경주장
9장 유연한 설계 본문
- 개방-폐쇄 원칙 (Open-Closed Principle, OCP)
소프트웨어 개체는 확장에 대해 열려있고, 수정에 대해서는 닫혀 있어야 한다.
컴파일타임 의존성을 고정시키고 런타임 의존성을 변경하라.
OCP의 핵심 = 추상화에 의존하는 것
변하지 않는 것이 무엇인지를 이해하고 옳바른 추상화를 신중히 결정하자
- 생성 사용 분리
의존관계를 외부에 명시적으로 드러내라
Factory 추가
생성만을 전문으로 하는 Factory에게 구체 Class 선택의 결정권을 주고 생성을 담당하게 하라
생성된 객체를 사용하는 Client는 Factory에의해 생성된 객체를 이용해 Method를 실행한다.
- 의존성 주입 (Dependency Injection)
외부의 독립적인 객체가 인스턴스를 생성한 후 이를 전달해서 의존성을 해결하는 방법
- Constructor Injection
- Setter Injection
- Method Injection
의존성 해결을 위한 다른 방법 - Service Locator 패턴 (AppConfig.java ?)
하지만 이는 클래스의 의존성을 숨기는 설계를 유도한다. -> 캡슐화를 위반한다.
- 의존성 역전 원칙(Dependency Inversion Principle, DIP)
- 상위 수준의 모듈은 하위 수준의 모듈에 의존해서는 안 된다. 둘 모두 추상화에 의존해야 한다.
- 추상화는 구체적인 사항에 의존해서는 안 된다. 구체적인 사항은 추상화에 의존해야 한다.
패키지 구조
인터페이스가 상위 모듈에 속한다.
- 유연성에 대한 조언
유연성은 프로그램의 복잡도와 Trade-off관계에 있을 수 밖에 없다.
유연함은 단순성과 명확성의 희생 위에서 자라난다.
'기술서적 > 오브젝트' 카테고리의 다른 글
12장 다형성 (0) | 2021.09.06 |
---|---|
11장 합성과 유연한 설계 (0) | 2021.09.05 |
10장 상속과 코드 재사용 1. 상속과 중복코드 (0) | 2021.09.04 |
8장 의존성 관리하기 02 유연한 설계 (0) | 2021.09.03 |
8장 의존성 관리하기 01 - 의존성 (0) | 2021.09.03 |