이전에 배운 것

Intro

객체지향 패러다임의 핵심은 역할, 책임, 협력이다. 객체지향의 본질은 협력을 위해 적절할 객체를 찾고 적절한 책임을 할당하는 것에 있다. 상속, 합성같은 개념은 책임과 협력이 어느정도 자리잡은 후에 사용할 수 있는 구현 메커니즘일 뿐이다. 너무 이른시기에 구현에 초점을 맞추면 좋지 않다.

1. 협력

객체가 협력에 참여하기 위해 수행하는 로직을 책임이라고 부르고 객체가 협력 안에서 수행하는 책임들이 모여서 역할을 구성한다.

협력

객체는 다른 객체의 상세한 내부 구현에 접근할 수 없기 때문에 오직 메시지 전송을 통해서만 요청을 전달할 수 있다. 그리고 이 메시지를 어떻게 처리할지는 메시지를 수신한 객체가 직접 결정한다. → 자율성을 띄고 있음을 의미한다.

그리고 필요한 행위를 위한 상태를 알고있는 객체가 다른 객체일 때 메시지를 통해 요청을 위임한다. 요청을 위임하지 않고 직접 수행하면 다른 객체의 상태에 의존하게 되어 내부 구현에 결합되게 된다.

결국 객체의 자율성을 위한 가장 기본적인 방법은 내부 구현을 캡슐화해 변경에 대한 파급효과를 제한하고 메시지 요청을 통해 협력하는 것이다.

협력 == 설계를 위한 문맥

객체가 가질 수 있는 상태와 행동을 어떤 기준으로 정해야 하는가?

어떤 객체도 섬이 아니다. 결국 모든 객체는 협력하기 위해 존재한다. 그리고 객체의 행동을 결정하는 것은 객체가 참여하고 있는 협력이다. 협력이 존재하기 때문에 객체가 존재한다.

객체의 행동을 결정하는 것이 협력이며 객체의 상태를 결정하는 것은 행동이다. 객체의 상태는 그 객체가 행동을 수행하는데 필요한 정보가 무엇인지로 결정된다.

협력 → 행동 → 상태 순으로 결정된다.