협력하는 객체들의 공동체


협력, 책임, 역할.
협력에 참여하는 구성원들이 책임과 역할을 다 한다.
구성원들은 요청과 응답을 주고받으며 협력함.


예를 들어,
손님은 캐셔에게 커피를 주문하는 요청을 하고
캐셔는 바리스타에게 커피를 만들어달라는 요청을 한다.
응답의 방향은 반대. 
바리스타는 커피를 만들어 캐셔에게 전달하고 캐셔는 다시 손님에게 커피를 전달함.



역할은 의미적으로 책임이라는 개념을 내포한다.
역할에 적합한 책임을 수행하는 것.
그리고 그 역할은 책임을 수행할 수 있는 누구나 가능하다. 그러므로 대체가 가능함.
그리고 그 책임을 수행하는 방법은 개개인마다 자율적으로 선택할 수 있음.
=> 같은 일을 요청받아도 수행하는 사람마다 다른 방식으로 요청을 처리할 수 있음(이러한 능력을 다형성이라고 함)
또한 한 사람이 무조건 하나의 역할만을 수행하는 것이 아니라, 동시에 여러 역할을 수행할 수도 있다.



객체들은 애플리케이션의 기능을 구현하기 위해 협력한다.
즉, 객체들간의 연쇄적인 요청과 응답의 흐름으로 구성된 협력으로 기능이 수행된다.
그러므로 객체에게 명확하고 적절한 책임(불분명하고 애매한 것이 아닌)을 할당하는 것이 중요하다.

 


객체 또한 사람과 유사한 특징을 지닌다.
하나의 역할은 여러 객체가 수행할 수 있고 역시 다른 객체로 대체가 가능함.
각 객체는 책임을 수행하는 방법을 자율적으로 선택할 수 있음(메서드 구현 내용의 자율성을 말하는 것 같음)
하나의 객체가 동시에 여러 역할을 수행할 수 있다.


객체는 두 가지 덕목을 갖춰야 하며, 두 덕목 사이에서 균형을 유지해야 한다.
1. 객체는 충분히 협력적이어야 한다.
2. 객체는 충분히 자율적이어야 한다.
(다른 객체의 요청에 대해 자율적으로 판단하여 행동해야 한다는 의미 같음.

요청을 받았을 때 그것을 처리해줄 것인지 판단하고, 또 처리해줄 것이라면 어떤 방식으로 처리해줄 것인지)


객체는 상태와 행동을 함께 지닌 자율적인 객체이다.
객체는 행동을 위해 필요한 상태를 포함하는 동시에 특정한 행동을 수행하는 방법을 스스로 결정할 수 있어야 한다.
(자바의 인터페이스가 생각남. 특정 메서드를 구현하고 있어야 하며 그 구현 내용은 각자 객체마다 다르게 구현되어 있음)
그러므로 자율적인 객체로 구성된 공동체는 유지보수가 쉽고 재사용도 용이하게 된다.


객체들간에 요청과 응답을 할 때 메세지를 전송하고 수신함.(유일한 의사소통 수단)
객체가 수신된 메세지를 처리하는 방법을 메서드라고 부른다.

요청이 무엇인지를 표현하는 메세지와 요청을 처리하기 위한 구체적인 방법인 메서드를 분리하는 것은 객체의 자율성을 높이는 핵심 메커니즘이다. 이것은 캡슐화(encapsulation)라는 개념과도 깊이 관련되어 있다.


그래서 정리하면 객체지향이란 무엇인가?
1. 시스템을 상호작용하는 자율적인 객체들의 공동체로 바라보고 객체를 이용해 시스템을 분할하는 방법.
2. 각 객체들은 상태와 행위를 함께 지니며 자율적으로 행동하고(스스로 책임을 갖고 있음) 서로 협력하며 시스템 내에서 정해진 역할을 수행함.(역할은 관련된 책임의 집합)
3. 객체들은 협력을 위해 서로 메세지를 주고받으며, 메세지를 수신하면 그 메세지를 처리하는데 적합한 메서드를 자율적으로 선택함.


객체지향은 클래스를 지향하는 게 아니다.
핵심은 적절한 책임을 수행하는 객체들 간에 유연하고 견고한 협력 관계를 구축하는 것.
클래스는 객체를 만드는데 필요한 구현 메커니즘일 뿐이다.


객체의 역할, 책임, 협력을 고려하는 것이 중요하다.

'Books > 객체지향의 사실과 오해' 카테고리의 다른 글

Chapter 6. 객체 지도  (0) 2023.08.17
Chapter 5. 책임과 메시지  (0) 2023.08.13
Chapter 4. 역할, 책임, 협력  (0) 2023.08.09
Chapter 3. 타입과 추상화  (0) 2023.08.05
Chapter 2. 이상한 나라의 객체  (0) 2023.08.02

+ Recent posts