Post

OCP: 개방-폐쇄 원칙

8. OCP: 개방-폐쇄 원칙

소프트웨어 개체는 확장에는 열려 있어야 하고, 변경에는 닫혀 있어야 한다.

사고 실험

소프트웨어 아키텍처가 훌륭하다면 변경되는 코드의 양이 가능한 한 최소화 됨

서로 다른 목적으로 변경되는 요소를 적절하게 분리하고, 이들 요소 사이의 의존성을 체계화함으로써 변경량을 최소화 가능

아키텍트는 기능이 어떻게, 왜, 언제 발생하는지에 따라서 기능을 분리하고, 분리한 기능을 컴포넌트의 계층구조로 조직화한다.

컴포넌트 계층구조를 조직화하면 저수준 컴포넌트에서 발생한 변경으로부터 고수준 컴포넌트를 보호할 수 있다.

방향성 제어

인터페이스를 사용하여 방향성을 제어함

정보 은닉

추이 종속성(transitive dependency)

클래스 A가 클래스 B에 의존하고, 클래스 B가 클래스 C에 의존한다면, 클래스 A는 클래스 C에 의존한다.

클래스 이외의 모든 엔티티(패키지, 컴포넌트)에도 동일하게 적용

추이 종속성을 가지게 되면, 소프트웨어 엔티티는 ‘자신이 적접 사용하지 않는 요소에는 절대 의존해서는 안 된다’는 소프트웨어 원칙을 위반한게 된다.

결론

OCP는 시스템의 아키텍처를 떠받치는 원동력 중 하나

OCP의 목표는 시스템을 확장하기 쉬은 동시에 변경으로 인해 시스템이 너무 많은 영향을 받지 않도록 함

저수준 컴포넌트에서 발생한 변경으로부터 고수준 컴포넌트를 보호할 수 있는 형태의 의존성 계층구조가 만들어지도록 해야 함

참조

  1. 클린 아키텍처(Clean Architecture)
This post is licensed under CC BY 4.0 by the author.