훌륭한 설계는 합리적인 비용 안에서 변경을 수용할 수 있는 구조를 만드는 것이다. 이런 설계를 만드려면 응집도가 높고 서로 느슨하게 결합돼 있는 요소로 구성되어야 한다.

낮은 결합도와 높은 응집도를 가진 구조를 얻으려면 올바른 객체에게 올바른 책임을 할당해야한다.

객체의 상태가 아니라 객체의 행동에 초점을 맞춰라. 객체를 단순히 데이터의 집합으로 보는 시각은 객체 내부 구현을 퍼블릭 인터페이스에 노출시키는 결과를 낳기 때문에 결과적으로 설계가 변경에 취약해진다.

이런 문제를 피할 수 있는 가장 좋은 방법은 객체의 책임에 초점을 맞추는 것이다. 책임은 객체의 상태에서 행동으로, 나아가 객체와 객체 사이의 상호작용으로 설계 중심을 이동시킨다. → 낮은 결합도와 높은 응집도가 만들어짐

상태 중심으로 객체 분할

책임 중심으로 객체 분할

→ 어떤 방식을 선택해야할까? 책임에 초점을 맞춰야한다. 객체의 상태는 구현에 속한다. 구현은 불안정하고 이는 변하기 쉽다. 구현에 관한 세부사항이 객체의 인터페이스에 스며들게 되어 캡슐화의 원칙이 무너지고 이는 변경에 취약한 구조를 만들어낸다.

그에 반해 객체의 책임은 인터페이스에 속한다. 객체의 책임을 드러내는 안정적인 인터페이스 뒤로 상태를 캡슐화함으로써 구현 변경에 대한 파장이 외부로 퍼져나가는 것을 방지할 수 있다. → 안정적인 설계를 얻을 수 있음