[소프트웨어 아키텍처] 개방-폐쇄 원칙(OCP)

개방-폐쇄 원칙은 아래와 같은 정의 이다.

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

다시 말해서 소프트웨어 개체의 행위는 확장할 수 있어야 하지만, 이때 개체를 변경해서는 안된다.

개방 폐쇄 원칙 예시

재무제표를 웹 페이지로 보여주는 시스템이 있다고 가정해보자. 웹 페이지에 표시되는 데이터는 스크롤할 수 있으며, 음수는 빨간색으로 출력한다.

요구사항

  • 이해 관계자가 동일한 정보를 보고서 형태로 변환해서 흑백 프린터로 출력 요청
  • 해당 보고서는 페이지 번호가 제대로 매겨져야 함
  • 페이지마다 머리글과 바닥글이 있어야 함
  • 표의 각 열에는 레이블이 있어야함
  • 음수는 괄호로 감싸야 함

훌륭한 소프트웨어 아키텍처라면 변경되는 코드의 양은 가능한 최소화가 되어야 하고 이상적이라면 0이여야 한다.

해결방법

서로 다른 목적으로 변경되는 요소를 적절하게 분리하고(SRP – 단일책임원칙), 이들 요소 사이에 의존성을 체계화(DIP – 의존성 역전 원칙) 함으로써 변경량을 최소화 할 수 있다.

단일 책임 원칙을 적용하면 데이터 흐름을 아래 그림과 같이 형태로 분리를 할 수 있다.

이처럼 책임을 분리하면, 두 책임 중 하나의 변경이 발생하더라도 다른 하나는 변경되지 않도록 소스 코드 의존성으도 확실히 조직화 해야 한다. 처리과정을 클래스 단위로 분할하고 이들 클래스를 컴포넌트 단위로 구분해야 한다.

컴포넌트 단위로 구분

OCP는 시스템의 아키텍처를 떠받치는 원동력 중 하나다. OCP의 목표는 시스템을 확장하기 쉬운 동시에 변경으로 인해 시스템이 너무 많은 영향을 받지 않도록 하는 데 있다. 이러한 목표를 달성하려면 시스템을 컴포넌트 단위로 분리하고 저수준 컴포넌트에서 발생한 변경으로부터 고수준 컴포넌트를 보호할 수 있는 형태의 의존성 계층구조가 만들어 지도록 해야 한다.





관련 글 보기