협력하는 객체들의 공동체
시너지를 생각하라. 전체는 부분의 합보다 크다.
- 스티븐 코비(Stephen R. Covey)
객체지향은 실세계의 모방이라는 개념은 객체지향을 이루는 철학적인 개념을 설명하는데에는 도움이 되지만, 유연하고 실용적인 관점에서 객체지향 분석, 설계를 설명하는데에는 도움이 되지 못한다.
객체지향의 목표는 실세계의 모방은 전혀 아니다. 오히려 새로운 세계를 창조하는 것이라고 볼 수 있다.
그럼에도 불구하고 계속 사용하고 있는 이유는 상태와 행위를 캡슐화(encapsulation) 하는 소프트웨어 객체의 자율성(autonomous)을 설명하는데 효과적이기 때문이다. 현실세계에서 암묵적으로 약속을 맺고, 명시적인 계약을 기반으로 협력하여 목표를 달성해나가는 과정은, 메시지를 주고 받으며 공동의 목표를 달성하기 위해 협력하는 객체들의 관계와 비슷하다.
협력하는 사람들
요청과 응답으로 구성된 협력
카페로 예를 들면, 손님이 캐시어에게 커피를 주문하고, 캐시어는 주문 받은 커피를 바리스타에게 제조 요청을 보낸다.
사람들은 스스로 해결하지 못하는 문제와 마주치면 문제 해결에 필요한 지식을 알고 있거나 서비스를 제공해 줄 수 있는 사람에게 도움을 요청(request)한다. 그리고 일반적으로 요청은 연쇄적으로 발생한다.
요청을 받은 사람은 주어진 책임을 다하면서 필요한 지식이나 서비스를 제공한다. 즉, 다른 사람의 요청에 응답(response)한다.
요청과 응답을 통해 다른 사람과 협력(collaboration)할 수 있는 능력은 인간으로 하여금 거대하고 복잡한 문제를 해결할 수 있는 공동체를 형성할 수 있게 만든다.
역할과 책임
협력하는 과정 속에서 각자는 모두 역할(role)이 있고, 그 역할 속에 맡은 책임(responsiblity)이 있다.
- 여러 사람이 동일한 역할을 수행할 수 있다.
- 역할은 대체 가능성을 의미한다.
- 책임을 수행하는 방법은 자율적으로 선택할 수 있다.
- 한 사람이 동시에 여러 역할을 수행할 수 있다.
사람들이 협력을 위해 특정한 역할을 맡고 역할에 적합한 책임을 수행한다는 사실은 위와 같이 몇가지 중요한 개념을 가지고 있다.
역할, 책임, 협력
기능을 구현하기 위해 협력하는 객체들
커피 주문 과정은 객체지향의 핵심 개념을 포함하고 있다. 사람이란 단어를 객체로, 에이전트의 요청을 메시지로, 에이전트가 요청을 처리하는 방법을 메서드로 바꾸면 객체지향이라는 문맥과 맞아 떨어진다.