시너지를 생각하라. 전체는 부분의 합보다 크다. -스티븐 코비(Stephen R.Covey)

객체지향이라고 불리는 새로운 세상의 문을 연 대부분의 사람들은 **“객체지향이란 실세계를 직접적이고 직관적으로 모델링할 수 있는 패러다임”**이라는 성명과 마주하게 된다.

객체지향의 목표는 실세계를 모방하는 것이 아니다

실세계의 모방이라는 개념이 비현실적임에도 여전히 많은 사람들이 실세계 객체와 소프트웨어 객체 간의 대응이라는 과거의 유산을 반복적으로 재생산하는 이유는 뭘까?

객체를 스스로 생각하고 스스로 결정하는 현실 세계의 생명체에 비유하는 것은 상태와 행위를 ‘캡슐화(encapsulation)’ 하는 소프트웨어 객체의 **‘자율성(autonomous)’**을 설명하는 데 효과적이다. 현실 세계의 사람들이 암묵적으로 약속과 명시적인 계약을 기반으로 협력하며 목표를 달설해 나가는 과정은 **‘메세지(message)’**를 주고받으며 공동의 목표를 달성하기 위해 **‘협력(collaboration)’**하는 객체들의 관계를 설명하는 데 적합하다. 실세계의 사물을 기반으로 소프트웨어 객체를 식별하고 구현까지 이어간다는 개념은 객체지향 설계의 핵심사상인 **‘연결완전성(seamlessness)’**을 설명하는 데 적합한 틀을 제공한다.

실세계의 모방이라는 객체지향의 개념은 휼륭한 프로그램을 설계하고 구현하는 실무적인 관점에서는 부적합하지만 객체지향이라는 용어에 담긴 기본 사상을 이해하고 학습하는 데는 매우 효과적이다. 객체지향을 설명하는 많은 책과 문서들이 오해의 여지가 있다는 사실을 잘 알고 있음에도 실세계의 모방이라는 개념을 쉽게 포기하지 못하는 이유가 바로 여기에 있다.

이번 장에서는 객체지향에 관한 기본적인 내뇽을 설명하기 위해 잠시 동안만 실세계의 보방이라는 과거의 인습에 얽매일 예정이다. 먼저 소프트웨어 객체란 실세계 사물의 모방이라는 전통적인 관점에서 객체지향의 다양한 개념을 설명하기로 한다. 비록 전통적인 관점이 문제 해결방법으로서의 실용성 측면에서는 의심스럽더라도 객체지향이라는 세계를 이해하는 데 도움될 것이다.

협력하는 사람들

요청과 응답으로 구성된 협력

일상에서 발생하는 대부분의 문제는 개인 혼자만의 힘으로 해결하기 버거울 정도로 복잡하기 때문에 사람들은 혼자서 문제를 해결하기보다는 다른 사람들의 도움을 받아 문제를 해결하는 것을 선호한다. 사람들은 스스로 해결하지 못하는 문제와 마주치면 문제 해결에 필요한 지식을 갈고 있거나 서비스를 제공해줄 수 있는 사람에게 도움을 **요청(request)**한다.

일반적으로 하나의 문제를 해결하기 위해 다수의 사람 혹은 역할이 필요하기 때문에 한 사람에 대한 요청이 또 다른 사람에 대한 요청을 유발하는 것이 일반적이다. 따라서 요청은 연쇄적으로 발생한다.