1장 협력하는 객체들의 공동체
이런 객체지향 한줄요약은 대부분의 사람들은 "객체지향이란 실세계를 직접적이고 직관적으로 모델링할 수 있는 패러다임" 이라는 설명과 마주하게 된다고 한다. 그래서 보통 현실세계를 가져와서 객체를 현실 세계에 존재하는 사물에 대한 추상화라고 표현하게 된다. 아쉽게도 이런 아이디어는 객체지향패러다임을 쉽게 설명해주기는 하지만 완벽한 설명은 아니다.
객체 지향의 목표는 실세계를 모방하는 것이 아니라. 현실 세계의 생명체처럼 생각하는 객체를 만드는 것이다.
협력하는 사람들
커피 공화국의 아침
커피집에서 커피를 먹는다고 생각해보자. 커피를 구매하기 위해 카운터에 가서 캐시어에게 커피한잔을 주문한다. 캐시어는 바리스타에게 커피를 제조하도록 이야기를 한다. 그러곤 바리스타는 커피를 제조한다.
커피 주문 - 캐시어 주문 받기 - 바리스타 커피제조 => 이런 상황은 여러 사람들의 조율과 조화가 필요한것이다. 이를 "협력" 관계라고한다. 이 협력관계를 나, 캐시어, 바리스타 라는 역할이 존재하기 때문에 커피를 먹을 수 있는 것이다. 그리고 협력하는 과정에서 자신이 맡은 바 "책임"을 다한다. 이 세가지 협력- 역할 - 책임이 객체지향의 핵심적인 가치이다.
요청과 응답으로 구성된 협력
대부분의 문제는 혼자 해결하기 버겁기 때문에 다른 전문가에게 문제를 해결하도록 "요청"한다.
요청을 받은 사람은 주어진 책무를 다하고 요청에 "응답"한다.
역할과 책임
사람들은 다른 사람과 협력하는 과정에서 "역할"을 부여 받는다. 커피집에서 가 커피를 한잔 마시기 까지 손님, 캐시어, 바리스타라는 역할이 존재한다. 역할을 맡은 살마들은 본인이 맡은 "책임"을 다해야 한다. 역할이란 표현은 책임이라는 개념을 내포하기 때문에 하나로 묶어서 협력이 원활하게 진행되는데 필요한 핵심적인 구성요소이다.
- 여러 사람이 동일한 역할을 수행할 수 있다. : 손님 입장에선 어떤 캐시어가 주문받는지 상관이 없고, 캐시어 입장에선 어떤 바리스타가 커피를 제조하던지 상관하지 않는다.
- 역할은 대체가능성을 의미한다. : 손님 입장에서 캐시어는 대체 가능 하다는 것을 의미한다.
- 책임을 수행하는 방법은 자율적으로 선택할 수 있다. : 요청을 받은 사람들은 요청을 처리하는 방법을 자유롭게 선택할 수 있다. 바리스타는 주문받은 커피를 자신만의 독특한 방법으로 커피를 제조할 수 있다. 중요한 것은 커피를 제조하라는 동일한 요청을 받더라도 바리스타의 역할을 수행하는 사람들마다 서로 다른 방식으로 요청을 처리 할 수 있다는 것이다. 이처럼 동일한 요청에 대해 서로 다른 방식으로 응답할 수 있는 능력 "다형성"이라고 한다.
- 한 사람이 동시에 여러 역할을 수행할 수 있다. : 한 사람이 캐시어와 바리스타의 역할을 동시에 수행하는 것도 가능하다. 따라서 한 사람이 동시에 둘 이상의 역할을 수행하는 것도 가능하다. 현실 속에 살아가는 우리는 모두 둘 이상의 역할을 수행한다.