본문 바로가기
도서/프로그래밍

[01] 객체지향의 사실과 오해 - 협력하는 객체들의 공동체

by 신발사야지 2023. 12. 26.

 

 

시너지를 생각하라. 전체는 부분의 합보다 크다.
- 스티븐 코비(Stephen R. Covey)

 

객체지향의 목표는 실세계를 모방하는 것이 아니다. 오히려 새로운 세계를 창조하는 것이다.

 

실세계 모방이라는 객체지향의 개념은 훌륭한 프로그램을 설계하고 구현하는 실무적인 관점에서는 부적합하지만 객체지향이라는 용어에 담긴 기본 사상을 이해하고 학습하는 데는 매우 효과적이다.

 

커피를 주문하는 과정은 캐시어와 바리스타, 손님의 역할과 책임 협력이라는 세 가지 개념이 한데 어울려 조화를 이루며 만들어 낸 것이다.

 

객체 지향의 가장 중요한 개념 세 가지는 역할, 책임, 협력이다.

 

협력

객체들의 요청과 응답이 각각 연쇄적으로 일어나며 일이 처리 된다.

 

역할과 책임

역할은 책임을 내포한다.

  • 여러 사람이 동일한 역할을 수행할 수 있다.
  • 역할은 대체 가능성을 의미한다
  • 책임을 수행하는 방법은 자율적으로 선택할 수 있다. (다형성)
  • 한 사람이 동시에 여러 역할을 수행할 수 있다.

 

“어떤 객체도 섬이 아니다” 객체 공동체 안에 살고 있는 성실한 객체 시민은 자식에게 주어진 역할과 책임을 다하는 동시에 시스템의 더 큰 목적을 이루기 위해 다른 객체와도 적극적으로 협력한다.

 

협력 속에 사는 객체

역할과 책임이 존재해도 실제로 수행하는 사람이 없으면 소용이 없는 것처럼, 객체가 존재하지 않는다면 객체지향 세계 역시 아무런 의미가 없다.

객체란 상태(state)와 행동(behavior)을 함께 지닌 실체라고 정의한다.

좋은 객체의 특징

  1. 충분히 ‘협력적’이어야 한다. 다른 객체의 요청에 충실히 귀 기울기고 다른 객체에게 적극적으로 도움을 요청할 정도로 열린 마음을 지녀야한다.
  2. ‘자율적’이어야 한다. 객체는 다른 객체의 명령에 복종하는 것이 아니라 요청에 응답할 뿐이다. 객체의 자율성은 객체의 내부와 외부를 명확하게 구분하는 것으로부터 나온다. 객체의 사적인 부분은 객체 스스로 관리하고 외부에서 일체 간섭할 수 없도록 차단해야 한다.

부풀려진 Class 의 중요성

  • 에스키모의 눈에 대한 어휘가 400개 라는 이야기는 부풀려진 이야기다.

객체지향에서 중요한 것은 클래스가 아니라 객체들이 어떻게 협력 하고 책임을 가지고 있는지가 중요하다. 클래스도 중요하지만 사실 클래는 객체를 만드는데 필요한 구현 메커니즘일 뿐이다. 객체지향은 객체를 지향하는 것이지 클래스를 지향하는 것이 아니다.

 

 

한줄요약: 객체지향 프로그래밍이란 객체들이 어떠한 책임과 역할을 가지고 협력하는지에 대해 중요시 여기는 것