경주장

9장 유연한 설계 본문

기술서적/오브젝트

9장 유연한 설계

달리는치타 2021. 9. 3. 22:00
  1. 개방-폐쇄 원칙 (Open-Closed Principle, OCP)

소프트웨어 개체는 확장에 대해 열려있고, 수정에 대해서는 닫혀 있어야 한다.

컴파일타임 의존성을 고정시키고 런타임 의존성을 변경하라.

OCP의 핵심 = 추상화에 의존하는 것

변하지 않는 것이 무엇인지를 이해하고 옳바른 추상화를 신중히 결정하자

  1. 생성 사용 분리

의존관계를 외부에 명시적으로 드러내라

Factory 추가

생성만을 전문으로 하는 Factory에게 구체 Class 선택의 결정권을 주고 생성을 담당하게 하라
생성된 객체를 사용하는 Client는 Factory에의해 생성된 객체를 이용해 Method를 실행한다.

  1. 의존성 주입 (Dependency Injection)

외부의 독립적인 객체가 인스턴스를 생성한 후 이를 전달해서 의존성을 해결하는 방법

  • Constructor Injection
  • Setter Injection
  • Method Injection

의존성 해결을 위한 다른 방법 - Service Locator 패턴 (AppConfig.java ?)

하지만 이는 클래스의 의존성을 숨기는 설계를 유도한다. -> 캡슐화를 위반한다.

 

  1. 의존성 역전 원칙(Dependency Inversion Principle, DIP)
  • 상위 수준의 모듈은 하위 수준의 모듈에 의존해서는 안 된다. 둘 모두 추상화에 의존해야 한다.
  • 추상화는 구체적인 사항에 의존해서는 안 된다. 구체적인 사항은 추상화에 의존해야 한다.

패키지 구조

인터페이스가 상위 모듈에 속한다.

 

  1. 유연성에 대한 조언

유연성은 프로그램의 복잡도와 Trade-off관계에 있을 수 밖에 없다.

유연함은 단순성과 명확성의 희생 위에서 자라난다.