개방-폐쇄 원칙
|
|
이 문서는 위키백과의 편집 지침에 맞춰 다듬어야 합니다. 더 좋은 문서가 되도록 문서 수정을 도와주세요. 내용에 대한 의견이 있으시다면 토론 문서에서 나누어 주세요. |
개방-폐쇄 원칙(OCP, Open-Closed Principle)은 '소프트웨어 개체(클래스, 모듈, 함수 등등)는 확장에 대해 열려 있어야 하고, 수정에 대해서는 닫혀 있어야 한다.'는 프로그래밍 원칙이다.
목차 |
상세설명 [편집]
의존적인 모듈에서 한 군데를 변경할 경우, 이것이 단계적인 변경을 불러일으킬 때, 이 설계는 경직성의 악취를 풍긴다. 개방-폐쇄 원칙에서는 시스템을 리팩토링하여 나중에 이와 같은 유형의 변경이 더 이상의 수정을 유발하지 않도록 하라고 충고한다. 개방-폐쇄 원칙이 잘 적용된다면, 이미 제대로 동작하고 있던 원래 코드를 변경하는 것이 아니라 새로운 코드를 덧붙임으로써 나중에 그런 변경을 할 수 있게 된다.
개방-폐쇄 원칙의 두 가지 속성 [편집]
확장에 대해 열려 있다. [편집]
이것은 모듈의 동작을 확장할 수 있다는 것을 의미한다. 애플리케이션의 요구 사항이 변경될 때, 이 변경에 맞게 새로운 동작을 추가해 모듈을 확장할 수 있다. 즉, 모듈이 하는 일을 변경할 수 있다.
수정에 대해 닫혀 있다. [편집]
어떤 모듈의 동작을 확장하는 것이 그 모듈의 소스 코드나 바이너리 코드의 변경으로 이어지는 것은 아니다. 그 모듈의 실행 가능한 바이너리 형태는 링킹 가능한 라이브러리, DLL이나 자바의 .jar에서도 건드리지 않은 채로 남는다.
추상화를 통한 개방-폐쇄 원칙 [편집]
객체 지향 프로그래밍 언어(JAVA, C++ 등)에서는 고정되기는 해도 제한되지는 않은, 가능한 동작의 묶음을 표현하는 추상화가 가능하다. 모듈은 추상화를 조작할 수 있다. 이런 모듈은 고정된 추상화에 의존하기 때문에 수정에 대해 닫혀 있을 수 있고, 반대로 추상화의 새 파생 클래스를 만드는 것을 통해 확장도 가능하다. 따라서 추상화는 개방-폐쇄 원칙의 핵심 요소이다.
개방-폐쇄 원칙과 객체 지향 언어의 관계 [편집]
개방-폐쇄 원칙은 객체 지향 프로그래밍의 핵심 원칙이라고 할 수 있다. 개방-폐쇄 원칙을 따르지 않는다고 해서 객체 지향 언어(Java, C++ 등)을 구현이 불가능한 것은 아니지만 이 원칙을 무시하고 프로그래밍을 한다면, 객체 지향 프로그래밍의 가장 큰 장점인 유연성, 재사용성, 유지보수성 등을 결코 얻을 수 없다. 따라서 객체 지향 프로그래밍 언어에서 개방-폐쇄 원칙은 반드시 지켜야할 기본적인 원칙이다.