Book/객체지향의 사실과 오해

[객체지향의 사실과 오해] 04장 역할, 책임, 협력

yo0oni 2023. 7. 24. 11:14

협력

협력은 한 사람이 다른 사람에게 도움을 요청할 때 시작된다.

요청을 받은 사람은 일을 처리한 후 요청한 사람에게 필요한 지식이나 서비스를 제공하는 것으로 요청에 응답한다.

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

 

 

이상한 나라의 앨리스 재판 속 협력

어떤 등장인물들이 특정한 요청을 받아들일 수 있는 이유는 그 요청에 대해 적절한 방식으로 응답하는데 필요한 지식과 행동 방식을 가지고 있기 때문이다.

그리고 요청과 응답은 협력에 참여하는 객체가 수행할 책임을 결정한다.

 

 

책임

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

 

책임과 메시지

협력 안에서 객체는 다른 객체로부터 요청이 전송됐을 경우에만 자신에게 주어진 책임을 수행한다.

모자 장수가 자신의 책임을 완수하기 위해 증언을 하는 이유는 왕으로부터 요청이 수신됐기 때문이다. (메시지 전송)

 

왕과 모자 장수가 협력할 수 있는 이유는 무엇일까?

왕이 모자 장수가 이해할 수 있는 메시지를 전송하였고, 모자 장수는 왕이 전송한 메시지에 대해 적절한 책임을 수행할 수 있기 때문이다.

코드와 관련되게 이해해보자면,, 아무래도 왕이 필요로 하는 메서드를 모자 장수가 갖고 있었기 때문에 적절하게 책임을 수행할 수 있는 것 같다. 그리고 그 과정에서 보내지는 메시지가 곧 매개변수라고 생각한다.
근데 왕이 '증언하라'라는 메시지를 보냈다면 증언하라가 곧 메서드라고 생각되는데 메시지와 메서드의 경계가 아직 애매한 것 같다. 더 공부하면서 익혀야겠다.

 

 

역할

재판이라는 협력에 참여하기 위해

모자 장수는 '증인'의 역할을,

왕은 '판사'라는 역할을 수행하고 있다.

 

역할이 답이다.

아래의 글을 읽었을 때 객체를 제외한 문장이 계속해서 반복되는 것을 알아차려야 한다.

책을 보면 협력에 참여하는 등장인물들을 제외한 나머지 과정이 너무나도 유사하다!!!

이때 앞장에서 배운 추상화를 생각해야 한다.

 

'판사'와 '증인'이라는 역할을 사용하면 세 가지 협력을 모두 포괄할 수 있는 하나의 협력으로 추상화할 수 있다.

 

따라서 역할을 대체할 수 있는 객체는 동일한 메시지를 이해할 수 있는 객체로 한정된다.

요약하면 역할의 대체 가능성은 행위 호환성을 의미하고, 행위 호환성은 동일한 책임의 수행을 의미한다.