14. 일관성 있는 협력
- 객체는 협력을 위해 존재합니다.
- 협력은 객체가 존재하는 이유와 문잭을 제공합니다.
- 잘 설계된 애플리케이션은 이해하기 쉽고, 수정이 용이하며, 재사용 가능한 협력의 모임입니다.
- 객체지향 패러다임의 장점은 설계를 재사용할 수 있다는 것입니다.
#
01. 핸드폰 과금 시스템 변경하기#
기본 정책 확장코드 재사용을 위한 상속은 해롭다
#
02. 설계에 일관성 부여하기- 협력을 일관성 있게 만들기 위해 아래의 지침을 따르는 것이 좋습니다.
- 변하는 개념을 변하지 않는 개념으로부터 분리
- 변하는 개념을 캡슐화
#
조건 로직 대 객체 탐색- 구성 요소를 캡슐화하는 실행 지침은 객체지향의 핵심 덕목 중 하나입니다. 시스템을 책임으로 캡슐화한섬들로 분리하고 그 섬들 간의 결합도를 제한합니다.
#
캡슐화 다시 살펴보기- 캡슐화는 변하는 어떤 것이든 감추는 것입니다.
- 다양한 캡슐화가 존재합니다.
- 데이터 캡슐화
- 메서드 캡슐화
- 객체 캡슐화
- 서브타입 캡슐화
- 서브타입 캡슐화와 객체 캡슐화를 적용하는 방법은 다음과 같습니다.
- 변하는 부분을 분리해서 타입 계층을 만듭니다.
- 변하지 않는 부분의 일부로 타입 계층을 합성합니다.
#
03. 일관성 있는 기본 정책 구현하기#
변경 분리하기- 변하지 않는 것과 변하는 것을 분리해야 합니다.
- 변하지 않는 '규칙'으로부터 변하는 '적용조건'을 분리해야합니다.
#
변경 캡슐화하기- 협력을 일관성 있게 만들기 위해서는 변경을 캡슐화해서 파급효과를 줄여야 합니다.
- 도메인 모델은 앞에서 설명한 것처럼 변하지 않는 부분으로부터 변하는 부분을 효과적으로 분리해야 합니다.
#
협력 패턴 설계하기- 객체지향에서는 모든 작업을 객체의 책임으로 생각
#
추상화 수준에서 협력 패턴 구현하기- 변하는 것과 변하지 않는 것을 분리하고 변하는 것을 캡슐화한 코드는 오로지 변하지 않는 것과 추상화에 대한 의존성만으로도 전체적인 협력을 구현할 수 있습니다.
#
구체적인 협력 구현하기개념적 무결성이 설계에서 중요한 역할을 차지합니다. 즉, 좋은 기능이나 서로 독립적이고 조화되지 못한 아이디어를 담고 있는 시스템보다는 하나로 통합된 일련의 설계 아이디어가 더 중요합니다.
#
협력 패턴에 맞추기- 때로는 개념적 무결성 보다는 약간의 부조화가 낫습니다.
지속적으로 개선하기. 협력은 고정된 것이 아니기에 과감하게 리팩터링하고 개선하는 것이 중요합니다.
#
패턴을 찾아라- 애플리케이션에서 유사한 기능에 대한 변경이 지속적으로 발생하고 있다면 변경을 캡슐화할 수 있는 적절한 추상화를 찾은 후, 이 추상화에 변하지 않는 공통적인 책임을 할당해야 합니다.
- 협력을 일관성 있게 만드는 과정은 유사한 기능을 구현하기 위해 반복적으로 적용할 수 있는 협력의 구조를 찾아가는 기나긴 여정입니다.