중요한 것은 개별 객체가 아니라 객체들 사이에 이뤄지는 협력이다. 협력은 동일한 목적을 달성하기 위함 수행하는 것.
협력
협력의 본질은 요청과 응답으로 연결되는 사람들의 네트워크임.
협력은 한 사람이 다른 사람에게 도움을
요청할
때 시작됨.
요청을 받은 사람은 일을 처리한 후 요청에
응답
한다.
요청을 받은 사람도 다른 사람에게 요청할 수 있다.
즉, 협력은 다수의 연쇄적인 요청과 응답의 흐름으로 구성됨.
책임
요청에 대해 응답해 줄 수 있거나, 적절한 행동을 할 의무가 있는 경우에 해당 객체는
책임
을 가짐.
ex) “재판을 수행하라”라는 요청에 응답해야 하므로 “재판을 수행할” 책임을 지게됨.
책임의 구현은 객체와 책임이 자리를 잡은 후에 고려해도 늦지 않음.
성급히 책임을 구현하는 것은 변경에 취약하고, 다양한 협력에 참여할 수 없음.
책임의 분류
책임은 객체가 알아야 하는 정보와, 수행할 수 있는 행위에 대해 개략적으로 서술한 문장임.
객체가 무엇을 알고 있는가(knowing)와 무엇을 할 수 있는가(doing)로 구성됨.
하는 것(doing)
객체를 생성하거나 계산을 하는 등의 스스로 하는것
다른 객체의 행동을 시작시키는 것
다른 객체의 활동을 제어하고 조절하는 것.
아는 것(knowing)
개인적인 정보에 관해 아는 것
관련된 객체에 관해 아는 것
자신이 유도하거나 계산할 수 있는 것에 관해 아는 것
객체의 책임을 이야기할 땐 일반적으로 외부에서 접근 가능한 공용 서비스에서 이야기함.
즉, 책임은 객체의 외부에서 제공해 줄 수 있는 정보(아는 것)와 서비스(하는 것)의 목록임.
책임은 객체의 공용 인터페이스를 구성함.
책임과 메시지
객체가 다른 객체에게 주어진 책임을 수행하도록 요청을 보내는 것을 **메시지 전송(message-send)**이라고함.
따라서 객체간 협력은
메시지
를 통해 이뤄짐.
메시지는 협력을 위해 한 객체가 다른 객체로 접근할 수 있는 유일한 방법임.
객체지향 설계는 협력에 참여하기 위해 어떤 객체가 책임을 수행하고, 메시지를 수신할 것인지를 결정하는 것으로부터 시작됨.
역할
역할은 협력 내에서 다른 객체로 대체할 수 있음을 나타내는 일종의 표식임.
해당 역할을 수행할 수 있는 어떤 객체라도 대신할 수 있음.
역할을 대체할 수 있는 객체는 동일한 메시지를 이해할 수 있는 객체로 한정됨.