[Clean Architecture 정리] 8장. OCP
개방 폐쇄 원칙(OCP, Open-Closed Principle)
- 소프트웨어 개체(artifact)는 확장에는 열려 있어야 하고, 변경에는 닫혀 있어야 한다.
컴포넌트 계층구조
- 모든 컴포넌트 관계는 단방향으로 이루어진다.
- 변경으로부터 보호하려는 컴포넌트에 의존하도록 해야한다.
- 위 그림에서 Interactor 처럼 어떤 변경도 영향을 주지않는, 보호받는 '특별한 위치'에 있는 컴포넌트는 업무 규칙을 포함하는 등의 가장 높은 수준의 정책을 포함한다.
- 컴포넌트 관계에서 보호의 계층구조가 '수준(Level)'이라는 개념을 바탕으로 가장 높은 수준의 개념이 최고의 보호를 받고 가장 저수준의 개념이 거의 보호를 받지 못한다.
- 컴포넌트 계층구조는 아키텍처에서 OCP가 동작하는 방식이 된다.
- 컴포넌트를 계층구조로 조직화하면 '저수준 컴포넌트'의 변경으로부터 '고수준 컴포넌트'를 보호할 수 있다.
방향성 제어
- 클래스를 작성하다보면 고수준 컴포넌트가 저수준의 컴포넌트를 의존하는 상황이 발생할 수 있다.
- 이런 상황에, 고수준 컴포넌트 내에 인터페이스를 두어 의존성을 역전시켜 고수준 컴포넌트를 보호할 수 있다.
정보 은닉
- 인터페이스는 방향성 제어말고도 '정보 은닉'의 목적으로도 사용할 수 있다.
- 위 그림에서 Requester가 없었다면 Controller는 Interactor Inner Class를 의존하고 Entity에 추이 종속성(transitive dependency)을 가지게 된다.
- 추이 종속성은 '자신이 직접 사용하지 않는 요소에는 절대로 의존해서는 안 된다'라는 소프트웨어 원칙을 위배한다.
- Entity의 변경에 대해서 Controller가 알 수 없도록(정보 은닉) 하기 위해 인터페이스를 사용할 수 있다.
개방 폐쇄 원칙(OCP, Open-Closed Principle)
- OCP의 목표는 확장하기 쉬우면서 변경으로부터 너무 많은 영향을 받지 않도록하기 위함이다.
- OCP의 목표를 달성하기 위해 컴포넌트 단위로 분리하고, 저수준 컴포넌트에서의 변경이 고수준 컴포넌트에 영향을 주지않도록 의존성 계층 구조가 만들어지도록 설계해야 한다.
서적 : http://www.yes24.com/Product/Goods/77283734