개방-폐쇄 원칙

위키백과, 우리 모두의 백과사전.
이동: 둘러보기, 검색

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

상세설명[편집]

의존적인 모듈에서 한 군데를 변경할 경우, 이것이 단계적인 변경을 불러일으킬 때, 이 설계는 경직성의 악취를 풍긴다. 개방-폐쇄 원칙에서는 시스템을 리팩토링하여 나중에 이와 같은 유형의 변경이 더 이상의 수정을 유발하지 않도록 하라고 충고한다. 개방-폐쇄 원칙이 잘 적용된다면, 이미 제대로 동작하고 있던 원래 코드를 변경하는 것이 아니라 새로운 코드를 덧붙임으로써 나중에 그런 변경을 할 수 있게 된다.

개방-폐쇄 원칙의 두 가지 속성[편집]

확장에 대해 열려 있다.[편집]

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

수정에 대해 닫혀 있다.[편집]

어떤 모듈의 동작을 확장하는 것이 그 모듈의 소스 코드나 바이너리 코드의 변경으로 이어지는 것은 아니다. 그 모듈의 실행 가능한 바이너리 형태는 링킹 가능한 라이브러리, DLL이나 자바의 .jar에서도 건드리지 않은 채로 남는다.

추상화를 통한 개방-폐쇄 원칙[편집]

객체 지향 프로그래밍 언어(JAVA, C++ 등)에서는 고정되기는 해도 제한되지는 않은, 가능한 동작의 묶음을 표현하는 추상화가 가능하다. 모듈은 추상화를 조작할 수 있다. 이런 모듈은 고정된 추상화에 의존하기 때문에 수정에 대해 닫혀 있을 수 있고, 반대로 추상화의 새 파생 클래스를 만드는 것을 통해 확장도 가능하다. 따라서 추상화는 개방-폐쇄 원칙의 핵심 요소이다.

개방-폐쇄 원칙과 객체 지향 언어의 관계[편집]

개방-폐쇄 원칙은 객체 지향 프로그래밍의 핵심 원칙이라고 할 수 있다. 개방-폐쇄 원칙을 따르지 않는다고 해서 객체 지향 언어(Java, C++ 등)을 구현이 불가능한 것은 아니지만 이 원칙을 무시하고 프로그래밍을 한다면, 객체 지향 프로그래밍의 가장 큰 장점인 유연성, 재사용성, 유지보수성 등을 결코 얻을 수 없다. 따라서 객체 지향 프로그래밍 언어에서 개방-폐쇄 원칙은 반드시 지켜야할 기본적인 원칙이다.

참고문헌[편집]

  • Jacobson, Ivar, et al. Object-Oriented Software Engineering. Reading, MA: AddisonWesley, 1992.[쪽 번호 필요]
  • Heyer, Betrand. Object-Oriented Software Construction, 2d ed. Upper Saddle River, NJ: prentice Hall, 1997.[쪽 번호 필요]
  • 소프트웨어 개발의 지혜, 로버트 C. 마틴, 2004[쪽 번호 필요]