
개방-폐쇄 원칙은 아래와 같은 정의 이다.
소프트웨어 개체는 확장에는 열려 있어야 하고, 변경에는 닫혀 있어야 한다.
다시 말해서 소프트웨어 개체의 행위는 확장할 수 있어야 하지만, 이때 개체를 변경해서는 안된다.
개방 폐쇄 원칙 예시
재무제표를 웹 페이지로 보여주는 시스템이 있다고 가정해보자. 웹 페이지에 표시되는 데이터는 스크롤할 수 있으며, 음수는 빨간색으로 출력한다.
요구사항
- 이해 관계자가 동일한 정보를 보고서 형태로 변환해서 흑백 프린터로 출력 요청
- 해당 보고서는 페이지 번호가 제대로 매겨져야 함
- 페이지마다 머리글과 바닥글이 있어야 함
- 표의 각 열에는 레이블이 있어야함
- 음수는 괄호로 감싸야 함
훌륭한 소프트웨어 아키텍처라면 변경되는 코드의 양은 가능한 최소화가 되어야 하고 이상적이라면 0이여야 한다.
해결방법
서로 다른 목적으로 변경되는 요소를 적절하게 분리하고(SRP – 단일책임원칙), 이들 요소 사이에 의존성을 체계화(DIP – 의존성 역전 원칙) 함으로써 변경량을 최소화 할 수 있다.

단일 책임 원칙을 적용하면 데이터 흐름을 아래 그림과 같이 형태로 분리를 할 수 있다.
이처럼 책임을 분리하면, 두 책임 중 하나의 변경이 발생하더라도 다른 하나는 변경되지 않도록 소스 코드 의존성으도 확실히 조직화 해야 한다. 처리과정을 클래스 단위로 분할하고 이들 클래스를 컴포넌트 단위로 구분해야 한다.

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


![[소프트웨어 아키텍트] 아키텍트 성향 3가지 총정리](https://codecampai.com/wp-content/uploads/2026/01/image-20-768x390.jpg)

![[소프트웨어 아키텍처] 정책요소와 세부사항이란?](https://codecampai.com/wp-content/uploads/2026/02/image-39-768x515.jpg)
![[소프트웨어 아키텍처] 소프트웨어 개발/배포에 대한 고찰](https://codecampai.com/wp-content/uploads/2026/02/image-34-768x419.jpg)
![[소프트웨어 아키텍처] 체크리스트를 활용한 프로젝트 관리](https://codecampai.com/wp-content/uploads/2026/01/image-25-768x429.jpg)