1. 협력하는 객체들의 공동체

객체지향 프로그래밍은 현실 속의 사물을 소프트웨어 내부로 모방하는 작업이지만 그대로 사용하기에는 큰 어려움이 있다. 오히려 모방하기 보다 새로운 것으로 창조해야 한다.

객체는 상태와 행동을 가지고 있고 외부에서는 무엇을 수행하는지를 알리고 어떻게하는지는 알리지 않는 캡슐화 형태를 가지고 있다.

2. 이상한 나라의 객체

앨리스 객체가 키라는 상태와 마시고 먹고 부채질하는 행동을 가지는 객체다. 앨리스 객체는 행동을 통해서 키가 결정되고 이는 행동을 통해 본인의 상태가 변하게 되는 것을 말한다.

3. 타입과 추상화

모든 정보를 오픈 할 필요는 없다. 필요한 정보만 제공하는 객체의 추상화가 필요하다. 이렇게 필요한 정보만 제공함으로써 복잡성을 낮추는 효과가 있다. 또한 필요한 정보를 가지는 객체들끼리 그룹화를 통해 공통 개념을 만들 수 있다.

4. 역할, 책임, 협력

현실에서 각자 역할이 있고 그 역할마다 책임이 있으며 역할끼리 협력을 하는 것처럼 객체들도 동일하게 본인만의 역할과 책임이 있고 객체들끼리 협력을 한다.

객체를 설계 할 때는 역할과 객체간의 협력을 생각해서 설계해야 한다.

5. 책임과 메시지

자율적인 책임의 특징은 객체가 어떻게 해야하는지가 아니라 무엇을 해야하는지 설명하는 것이다.

객체와의 협력에서 전달되는 메시지는 너무 구체적이지도 않고 너무 추상적이지도 않는 명확하게 해야한다.

다형성은 다양한 객체들이 동일한 책임을 공유하는 것을 의미한다.

객체들은 메시지를 통해서 낮은 결합도를 구성하고 이로 인해서 유연하고 확장 가능하도록 한다.

<aside> 💡 여기서 메시지는 interface를 이야기 하는 것 같다.

</aside>

6. 객체 지도

객체지향 설계 및 구조는 안정적인 구조를 위해 역할, 책임, 협력을 구성해야 한다.

요구사항이 변경됨으로써 유연하게 대처하기 위해서 안정적인 구조를 설계 해야만 한다.

도메인 모델을 기반으로 소프트웨어의 구조를 설계하면 변경에 유연하게 대응할 수 있다.