데이터 중심 설계로 발생하는 문제점을 해결하는 가장 기본적인 방법은 데이터가 아닌 책임에 초점을 맞추는 것이다.
책임에 초점을 맞춰 설계하는 과정에 어떤 객체에게 어떤 책임을 할당할지를 결정하는 것은 매우 어려운 일이다. 이 과정은 일종의 트레이드 오프 과정인데 동일한 문제를 어떤 관점에서 어떤 것을 트레이드 오프하며 최선의 방법을 찾아나가는 방법을 알아야한다.
책임 중심 설계를 위해서는..
→ 책임과 행동을 결정하는 것이 중요하구나.
객체지향 설계에서 가장 중요한 것은 적절한 객체에게 적절한 책임을 할당하는 능력이다. 객체가 필요한 데이터는 책임을 할당한 뒤 생각할 일이다.
협력에 적합하다면 책임을 잘 할당한 것이다. 객체의 입장이 아니라 협력의 입장에서 적합해야한다. 따라서 객체 입장에서 책임이 조금 어색해보이더라도 협력에 적합하다면 잘한것이다.
우리는 먼저 메시지를 선택해야한다. 객체가 결정된 후 객체가 처리할 수 있는 메시지를 만드는 것이 아니고 협력에 필요한 메시지가 존재하기 때문에 그 메시지를 처리할 객체가 필요한 것이다. 메시지가 객체를 선택하게 만들자.
클래스가 무엇을 해야하지?가 아니고 메시지를 전송해야하는데 누구에게 전송하지? 라고 질문하자. → 메시지 기반 설계. 객체를 가지고 있기 때문에 메시지를 보내는 것이 아닌 메시지를 전송해야하기 때문에 객체를 갖게된 것이라고 생각하자.
객체에게 적절한 책임을 할당하기 위해서는 협력이라는 문맥을 고려해야한다. 이때 적절한 책임이란 클라이언트의 관점에서 적절한 책임을 의미한다. 클라이언트가 전송할 메시지를 결정한 후에야 그 책임을 맡을 객체를 만들고 그 후에야 객체가 가지고 있어야할 데이터, 상태를 결정하는 것이다.