본문 바로가기
Architecture

[Clean Architecture 정리] 8장. OCP

by 테리는당근을좋아해 2022. 7. 19.

개방 폐쇄 원칙(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

 

클린 아키텍처 - YES24

살아있는 전설이 들려주는 실용적인 소프트웨어 아키텍처 원칙『클린 코드』와 『클린 코더』의 저자이자 전설적인 소프트웨어 장인인 로버트 C. 마틴은 이 책 『클린 아키텍처』에서 이러한

www.yes24.com

 

댓글