객체지향 설계의 전체적인 품질을 결정하는 것은 개별 객체의 품질이 아니라 여러 객체들이 모여 이뤄내는 협력의 품질이다. 협력이 자리를 잡으면 저절로 객체의 행동이 드러나도 뒤이어 적절한 객체의 상태가 결정된다.

협력

요청하고 응답하며 협력하는 사람들

일상생활 속에서 이뤄지는 협력의 본질은 요청과 응답으로 연결되는 사람들의 네트워크다. 협력은 한 사람이 다른 사람에게 도움을 요청할 때 시작된다. 자신에게 할당된 일이나 업무를 처리하던 중에 스스로 해결하기 어려운 문제에 부딪히게 되면 문제를 해결하는데 필요한 지식을 알고 있거나 도움을 받을 수 있는 누군가에게 도움을 요청하게 된다. 요청을 받은 사람은 일을 처리한후 요청한 사람에게 필요한 지식이나 서비스를 제공하는 것으로 요청에 응답한다.

결과적으로 협력은 다수의 요청과 응답 으로 구성되며 전체적으로 협력은 다수의 연쇄적인 요청과 응답의 흐름으로 구성된다.

재판 속의 협력

누군가 왕에게 재판을 해달라는 요청을 보냈다는 말은 왕이 재판을 수행할 의무가 있으며, 재판에 필요한 지식을 가지고 있음을 의미한다. 왕이 하얀 토끼에게 목격자를 불러오라고 요청한 이유는 토끼가 목격자에게 대해 알고 있으며 동시에 목격자를 부를 의무가 있기 때문이다. 왕이 모자 장수에게 증언하라고 요청한 이유는 모자 장수가 재판에 도움이 될 만한 사건의 내용에 대해 조금이라도 알고 있으며 증언할 의무가 있기 때문이다.

결국 어떤 등장인물들이 특정한 요청을 받아들일 수 있는 이유는 그 요청에 대해 적절한 방식으로 응답하는 데 필요한 지식과 행동 방식을 가지고 있기 때문 이다. 그리고 요청과 응답은 협력에 참여하는 객체가 수행할 책임을 정의한다.

책임

객체지향 세계에서는 어떤 객체가 어떤 요청에 대해 대답해 줄 수 있거나, 적절한 행동을 할 의무가 있는 경우 해당 객체가 책임을 가진다고 말한다.

책임과 메시지

협력 안에서 객체는 다른 객체로부터 요청이 전송됐을 경우에만 자신에게 주어진 책임을 수행한다. 객체가 다른 객체에게 주어진 책임을 수행하도록 요청을 보내는 것을 메시지 전송이라고 한다. 메시지는 협력을 위해 한 객체가 다른 객체로 접근할 수 있는 유일한 방법이다.

역할