본문 바로가기
객체지향의 사실과 오해

객체지향의 사실과 오해 1장 정리

by 킴도TV 2022. 5. 8.

협력하는 객체들의 공동체

객체지향(Object Oriented Programming)

  • 객체지향의 목표는 실세계를 모방하는 것이 아니다. 오히려 새로운 세계를 창조하는 것이다. 소프트웨어 개발자의 역할은 단순히 실세계를 소프트웨어 안으로 옮겨 담는 것이 아니라 고객과 사용자를 만족시킬 수 있는 신세계를 창조하는 것이다.
  • 객체의 특징: 캡슐화(encapsulation), 자율성(autonomous), 메시지(message), 협력(collaboration), 연결완전성(seamlessness)

메시지, 오퍼레이션, 메소드

  • 해당 객체가 다른 객체에게 메시지를 보낸다고 표현을 하지, 절대 해당 객체가 다른 객체의 함수를 호출한다고 부르지 않는다. 함수가 아닌 operation이라고 부른다. 왜냐하면 메시지를 보내더라도 메시지를 처리하는 객체가 그 메시지를 처리한다는 보장이 없기 때문이다. 그 operation에 매칭되는 실제로 구현되어있는 객체의 메소드가 실행된다.

역할, 책임, 협력

  • 역할: 객체의 하나로 대표되는 추상화된 역할. 역할이라는 단어는 의미적으로 책임이라는 개념을 내포한다 (ex. UILabel, UIView)
  • 책임: 객체의 역할 이름 아래에 나눠지는 작은 기능들 (ex. URLSession은 서버 url로 요청을 보내는 책임이 있다)
  • 협력: 객체끼리 요청을 보내고 응답을 받는 과정(요청과 응답으로 구성된 협력)

워드 커닝험 - 어떤 객체도 섬이 아니다 (객체들끼리 협력하도록 잘 설계해라)

객체와 자료구조 (feat. 클린 코드)

  • 객체는 동작을 공개하고 자료를 숨긴다.
  • 자료구조는 별다른 동작없이 자료를 노출한다. 자료구조는 별도의 메서드를 만들지 않는다.

객체를 섬으로 만들지 마라. 외부의 도움을 무시한 채 모든 것을 스스로 처리하려고 하는 전지전능한 객체(god object)는 내부적인 복잡도에 의해 자멸하고 만다.