"객체지향의 사실과 오해" 책 내용을 체화하기 위해 읽으며 기록하는 노트이다.
클래스를 세 가지 관점에서 바라본다.
클래스는 개념, 인터페이스, 구현을 함께 드러내야 한다.
동시에 세 관점을 쉽게 식별할 수 있도록 깔끔하게 분리해야 한다.
설계는 도메인 안에 존재하는 개념과 개념들 사이의 관계를 표현한다.
사용자가 도메인을 바라보는 관점
사용자 영역인 도메인을 벗어나 소프트웨어 안에 있는 객체들의 책임에 초점을 맞춘다.
객체 인터페이스를 바라보는 것
협력 안에서 메시지를 선택하고 메시지를 수신할 객체를 선택하는 것
실제 작업을 수행하는 코드와 연관되어있다.
객체들이 책임을 수행하는 데 필요한 코드를 작성하는 것
객체가 메시지를 선택하는 것이 아닌 메시지가 객체를 선택한다.
협력을 통해 식별된 타입의 오퍼레이션은 외부에서 접근 가능한 공용 인터페이스의 일부다.
따라서 인터페이스에 포함된 오퍼레이션은 외부에서 접근 가능한 public으로 선언되야 한다.
객체가 다른 객체에게 메시지를 전송하기 위해서는 먼저 객체에 대한 참조를 얻어야 한다.
클래스가 도메인 개념의 특성을 최대한 수용하면 변경을 관리하기 쉽고 유지보수성을
향상시킬 수 있다.
클래스의 public 메서드는 다른 클래스가 협력할 수 있는 공용 인터페이스를 드러낸다.
객체 인터페이스는 수정하기 어려우니 인터페이스를 통해 구현과 관련된 세부사항이
드러나지 않게 해야한다.
클래스의 메서드와 속서은 구현에 속하며 인터페이스의 일부가 아니다.
때문에 원칙적으로 외부객체에 영향을 미쳐서는 안된다.
❗️ 인터페이스와 명세를 구분하라 ❗️