아직은 정체성이 없는 블로그

[Design Pattern][SOLID] 개방-폐쇄 원칙 (OCP, Open-Closed Principle) 본문

Disign Pattern

[Design Pattern][SOLID] 개방-폐쇄 원칙 (OCP, Open-Closed Principle)

coooding 2020. 6. 23. 12:58

개방-폐쇄 원칙 (OCP, Open-Closed Principle)이란?

 

소프트웨어 개체(클래스, 모듈, 함수 등등)는 확장에 대해 열려 있어야 하고, 수정에 대해서는 닫혀 있어야 한다'는 프로그래밍 원칙이다.

 

다시 말하자면 변경을 위한 비용은 가능한 줄이고 확장을 위한 비용은 가능한 극대화 해야 한다는 의미로, 요구사항의 변경이나 추가사항이 발생하더라도, 기존 구성요소는 수정이 일어나지 말아야 하며, 기존 구성요소를 쉽게 확장해서 재사용할 수 있어야 한다는 뜻이다.

 


 

개방-폐쇄 원칙의 두 가지 속성

 

1.확장에 대해 열려 있다.

 

이것은 모듈의 동작을 확장할 수 있다는 것을 의미한다. 애플리케이션의 요구 사항이 변경될 때, 이 변경에 맞게 새로운 동작을 추가해 모듈을 확장할 수 있다. , 모듈이 하는 일을 변경할 수 있다.

 

2.수정에 대해 닫혀 있다

 

모듈의 소스 코드나 바이너리 코드를 수정하지 않아도 모듈의 기능을 확장하거나 변경할 수 있다. 그 모듈의 실행 가능한 바이너리 형태나 링크 가능한 라이브러리(예를 들어 윈도의 DLL이나 자바의 .jar)를 건드릴 필요가 없다.

 


 

개방-폐쇄 원칙 해결방법

 

 추상화상속을 통해 지켜질 수 있다.

 

예시

개방 폐쇠 원칙에 위반된 설계

 

일단 위 그림은 OCP를 위반한다.

성적표와 출석부를 출력하는 기능을 클라이언트 클래스가 사용하도록 할 수 있다.

이때 만약 새로운 기능인 도서 대여기록 출력을 추가하면 클라이언트 클래스를 다시 수정해야하기 때문에 OCP를 위반한다.

 

 

아래의 그림은 OCP에 위배되지 않는 설계의 그림이다.

 

개방 폐쇠 원칙을 지킨 설계

 

 

새로운 출력을 표현하는 클래스를 추가하게 하고, 이러한 변경이 있더라도 기존의 클래스가 영향을 받지 않게 클라이언트 클래스가 개별적인 클래스를 처리하지 않도록 하고, 인터페이스에서 구체적인 출력 매체를 캡슐화해 처리하도록 한다.

Comments