애플리케이션을 개발하면서 객체에 직접적으로 대응되는 실세계의 사물을 발견할 확률은 그다지 높지 않다. 객체지향의 목표는 실세계를 모방하는 것이 아니다. 오히려 새로운 세계를 창조하는 것이다.

협력하는 사람들

커피공화국의 아침

커피를 주문하는 손님, 주문을 받는 캐시어, 커피를 제조하는 바리스타라는 역할 이 존재한다. 이 세 사람은 커피 주문 이라는 협력 에 참여한다.

→ 커피 주문이라는 기능을 구현할 때 손님, 캐시어, 바리스타의 객체를 생성할 수 있다.

역할과 책임

역할이라는 단어는 의미적으로 책임이라는 개념을 내포한다.

역할, 책임, 협력

역할과 책임을 수행하며 협력하는 객체들

목표는 더 작은 책임으로 분할되고 책임을 수행할 수 있는 적절한 역할을 가진 사람에 의해 수행된다.

→ 객체가 역할을 수행해내기 위해 더 세분화된 객체에게 요청을 하여 기능을 수행한다.

객체지향 설계라는 예술은 적절한 객체에게 적절한 책임을 할당하는 것에서 시작한다.

협력 속에 사는 객체

  1. 객체는 충분히 협력적 이어야 한다. 외부의 도움을 무시한 채 모든 것을 스스로 처리하려고 하는 전지전능한 객체는 내부적인 복잡도에 의해 자멸하고 만다.

    → 한 객체에 과도한 역할을 부담하면 코드 내 복잡성이 높아진다.

  2. 객체는 충분히 자율적 이어야 한다. 자기 스스로의 원칙에 따라 어떤 일을 하거나 자기 스스로 통제하여 절제해야 한다.

객체지향 설계의 묘미는 다른 객체와 조화롭게 협력할 수 있을 만큼 충분히 개방적인 동시에 협력에 참여하는 방법을 스스로 결정할 수 있을 만큼 충분히 자율적인 객체들의 공동체를 설계하는 데 있다.

상태와 행동을 함께 지닌 자율적인 객체

객체가 협력에 참여하기 위해 어떤 행동을 해야 한다면 그 행동을 하는 데 필요한 상태도 함께 지니고 있어야 한다.