객체지향 설계란 올바른 객체에게 책임을 할당하고 낮은 결합도, 높은 응집도를 가진 구조를 창조하는 활동이다. → 객체 지향의 핵심은 책임인 것, 책임을 할당하는 작업이 응집도, 결합도 같은 설계품질과 연관돼 있다는 것
훌륭한 설계란 합리적인 비용 안에서 변경을 수용할 수 있는 구조를 만드는 것. 이는 객체의 상태가 아니라 행동에 초점을 맞춤으로써 이루어진다.
객체지향 설계는 두 가지 방법을 사용해 시스템을 객체로 분할할 수 있다.
객채의 상태는 객체가 저장해야하는 데이터의 집합을 의미하므로 여기서는 상태와 데이터를 동일한 의미로 사용한다.
객체의 상태는 구현에 속한다. 구현은 불안정하기에 변하기 쉽다. 상태를 객체 분할의 중심으로 삼으면 구현에 관한 세부사항이 객체의 인터페이스에 스며들어 캡슐화의 원칙이 무너진다. 결국 상태 변경이 인터페이스의 변경을 초래해 주변 객체에 영향이 퍼지게 된다.
데이터 중심 설계는 객체가 저장해야하는 데이터가 무엇인가? 에서 시작한다.
영화의 경우 영화 자체의 정보부터 할인 정책, 할인 조건까지 모든 조건을 인스턴스 변수로 가지고 있다.
좋은 설계를 판단하기 위한 기준이 여러가지가 있는데 그중 캡슐화, 응집도, 결합도에 초점을 맞춰본다.
변경 가능성이 높은 부분을 구현이라 하고 상대적으로 안정적인 부분을 인터페이스라고 부른다. 그리고 객체지향에서 가장 중요한 것은 불안정한 구현사항을 안정적인 인터페이스 뒤로 캡슐화하는 것이다.
그리고 이 캡슐화의 목적은 유지보수성이다. 유지보수성은 두려움, 주저함, 저항감 없이 코드를 변경할 수 있는 능력을 말한다. 캡슐화를 통해 예상치 못한 문제를 피해갈 수 있다.