대다수의 개발자들은 객체지향 애플리케이션이 실세계를 모방해야 한다는 설명을 전혀 납득하지 못한다.
협력하는 사람들 (feat. 커피 공화국)
- 커피를 주문하는 손님, 주문을 받는 캐시어, 커피를 제조하는 바리스타라는 역할
- 손님, 캐시어, 바리스타는 주문한 커피를 손님에게 제공하기 위해 협력하는 과정에서 자신이 맡은 바 책임
- 커피 주문이라는 협력에 참여
요청과 응답으로 구성된 협력
1. 사람들은 스스로 해결하지 못하는 문제와 마주치면 문제 해결에 필요한 지식을 제공해 줄 수 있는 사람에게 도움을 요청한다.
2. 요청을 받은 사람은 다른 사람의 요청에 응답한다.
역할과 책임
특정한 역할은 곧 특정한 책임이며 몇 가지 개념을 제시한다. 이는 객체의 역할의 개념과 같다.
- 여러 사람이 동일한 역할을 수행할 수 있다 : 만약 캐시어가 카페를 그만둬도 새로운 캐시어를 뽑으면 그만이다.
- 역할은 대체 가능성을 의미한다 : 손님 입장에서 캐시어는 대체 가능하다.
- 책임을 수행하는 방법은 자율적으로 선택할 수 있다 : 커피를 제조하라는 동일한 요청을 받더라도 바리스타의 역할을 수행하는 사람들마다 서로 다른 방식으로 요청을 처리할 수 있다는 것이다. 이처럼 서로 다른 방식으로 응답하는 것을 다형성이라고 한다.
- 한 사람이 동시에 여러 역할을 수행할 수 있다 : 굳이 캐시어와 바리스타를 구분하지 않고, 캐시어가 커피까지 만들 수도 있는 것이다.
역할, 책임, 협력
객체는 자신의 책임을 수행하는 도중에 다른 객체에게 도움을 요청하기도 한다.
→ 협력에 참여하는 각 개인은 책임을 수행하기 위해 다른 사람에게 도움을 요청하기도 하며, 이를 통해 연쇄적인 요청과 응답으로 구성되는 협력 관계가 완성되며 목표를 달성한다.
협력 속에 사는 객체
- 객체는 충분히 '협력적'이어야 한다.
- 객체는 다른 객체의 요청에 충실히 귀 기울이고 다른 객체에게 적극적으로 도움을 요청할 정도로 열린 마음을 지녀야 한다.
- 물론, 다른 객체의 명령에 복종하는 것이 아니라 요청에 응답할 뿐이다. 어떻게 요청에 응할지는 객체 스스로 결정할 수 있다.
- 객체가 충분히 '자율적'이어야 한다.
- 첫 번째 덕목으로 알 수 있듯이 객체는 자기 스스로 일을 하거나 통제하며 절제해야 한다.
- 공동의 목표룰 달성하기 위해 협력하지만, 스스로의 결정과 판단에 따라 행동한다.
상태와 행동을 함께 지닌 자율적인 객체
손님과 캐시어, 바리스타는 외부의 간섬을 받지 않고 스스로 생각하고 스스로 판단하는 자율적인 존재였다.
객체의 관점에서 자율성이란 자신의 상태를 직접 관리하고 상태를 기반으로 스스로 판단하고 행동할 수 있음을 의미한다.
협력과 메시지
풍부한 메커니즘을 이용해 요청하고 응답할 수 있는 인간들의 세계와 달리,
객체지향의 세계에서는 오직 한 가지 의사소통 수단만이 존재한다. 이를 메시지라고 한다.
결과적으로 객체는 협력을 위해 다른 객체에게 메시지를 전송하고 다른 객체로부터 메시지를 수신한다.
이때 메시지를 전송하는 객체를 "송신자", 메시지를 수신하는 객체를 "수신자"라고 부른다.
4장에서 메시지의 중요성을 계속해서 다룬다! 왜냐하면 협력과 메시지는 필연이기 때문이다.
메서드와 자율성
수신자는 먼저 수신된 메시지를 이해할 수 있는지 여부를 판단한 후 미리 정해진 자신만의 방법에 따라 처리한다.
이처럼 객체가 수신된 메시지를 처리하는 방법을 메서드라고 부른다.
따라서 어떤 객체에게 메시지를 전송하면 결과적으로 메시지에 대응되는 특정 메서드가 실행된다.
책을 읽으면서 메시지를 어떻게 보낼지 고민했는데 매개변수가 메시지가 될 수도 있을까 하고 궁금했다.
그런데 메시지를 처리하는 방법이 메서드라면 매개변수가 메시지일 수도 있지 않을까? 생각했다.
뒷부분을 읽으면서 생각을 다듬어야겠다.
외부의 요청이 무엇인지를 표현하는 메시지와 요청을 처리하기 위한 구체적인 방법인 메서드를 분리하는 것은 객체의 자율성을 높이는 핵심 메커니즘이다.
그리고 이것은 캡슐화라는 개념과도 깊이 관련돼 있다.
'Book > 객체지향의 사실과 오해' 카테고리의 다른 글
[객체지향의 사실과 오해] 05장 책임과 메시지 (0) | 2023.07.24 |
---|---|
[객체지향의 사실과 오해] 04장 역할, 책임, 협력 (0) | 2023.07.24 |
[객체지향의 사실과 오해] 03장 타입과 추상화 (0) | 2023.07.24 |
[객체지향의 사실과 오해] 02장 이상한 나라의 객체 (0) | 2023.07.15 |