01. 협력하는 객체들의 공동체
객체지향의 사실과 오해 - 1장
Summary
객체지향에서 가장 중요한 개념은 "역할, 책임, 협력"이다.
어플리케이션의 기능은 객체들의 협력으로 구현된다.
객체는 역할을 가지는데, 한 객체가 여러 역할을 가질수도 있고, 동일한 역할을 여러 객체가 맡을 수도 있다.
역할은 관련된 책임의 집합이다. 객체는 책임을 수행하며, 수행하는 방법은 객체가 자율적으로 선택할 수 있다.
협력은 이런 객체들이 서로 요청을 보내고 응답하며 이루어진다.
이런 과정속에서 객체는 두 가지 덕목을 갖춰야 한다.
첫번째는 객체는 충분히 협력적이여야 한다.
하나의 객체가 모든 일을 수행할 수 없기 때문에 객체는 반드시 협력해야 하고 따라서 협력적이여야 한다.
두번째는 객체는 충분히 자율적이여야 한다.
자율적이라는 의미는 "자기 스스로의 원칙에 따라 어떤 일을 하거나 자기 스스로를 통제하여 절제하는 것"이다.
다른 객체에 의해 수동적으로 동작하는 것이 아닌, 요청에 객체 스스로가 결정하고 책임져야 한다.
이런 자율적인 객체는 상태(state)와 행동(behavior)를 함께 가지고 있어야 한다.
자율적으로 행동하기 위해서는 객체는 어떤 행동을 하기 위해 필요한 상태를 스스로 가지고 있어야 한다.
객체는 협력하기 위해 메시지를 보내고, 메시지를 받은 객체는 이를 처리하기 위한 방법을 자율적으로 선택한다.
이때 메시지를 처리하는 방법을 메서드라고 한다.
객체의 자율성을 높이는 핵심 매커니즘은 메시지(외부의 요청이 무엇인지 표현)와 메서드(요청을 처리하기 위한 구체적인 방법)를 분리하는 것이다.
객체지향의 중심 개념을 클래스라고 오해하기 쉬운데, 훌륭한 객체지향 설계자가 되기 위한 첫 번째 도전은 코드를 담는 클래스의 관점에서 메시지를 주고받는 객체의 관점으로 사고의 중심을 전환하는 것이다.
객체지향의 핵심은 적절한 책임을 수행하는 역할 간의 유연하고 견고한 협력 관계를 구축하는 것이다.
그러니 클래스의 구조와 메서드가 아니라 객체의 역할, 책임, 협력에 집중해라. 객체지향은 객체를 지향하는 것이다.