기능 확장과 수정에 대한 이야기가 나왓으므로 The Open-closed Principle(OCP)이라는
원칙에 대해서 설명하겠습니다. 이 원칙은 Bertrand Meyer가 제시한 것으로 Robert C.Martin이
C++ Report(Jan.1996)에 슨 Engineering Notebook이라는 컬럼에 정리되어 있습니다.

이 원칙은 클래스 등이
* 확장(extension)에 대해서는 열려(open)있지만
* 수정(modification)에 대해서는 닫혀(closed)있어야 한다.
라고 주장하고 있습니다.

클래스를 설계할 때 특별한 이유가 없는 한 확장을 허용해야 합니다. 이유 없이 확장을
금지해서는 안되며, 이것이 '확장에 대해서는 열려있다.'라는 의미 입니다.

그러나 확장을 할 때마다 기존의 클래스를 수정해야 하는 것도 곤란 합니다. 확장을 해도
기존의 클래스는 수정할 필요가 없는 것이 ' 수정에 대해서는 닫혀있다.' 라는 의미입니다.

확장은 대환영이지만 기존의 클래스를 수정해서는 안됩니다. 기존의 클래스를 수정하지 않고
확장할 수 있도록 하는 것이 The Open-Closed Principle의 원칙입니다.

클래스에 대한 요구는 빈번하게 변화합니다. 그리고 그 요구는 대부분 '기능을 확장하고 싶은'
경우이므로 클래스가 기능 확장을 할 수 없다면 곤란합니다. 그러나 한편으로는 이미 완성되어
테스트까지 마친 클래스를 수정한다면 소프트웨어의 품질을 떨어뜨릴 위험이 있습니다.

확장에 대해서는 열려있고, 수정에 대해서는 닫혀있는 클래스가 부품으로써 재이용 가치가 높은
클래스입니다. 그리고 디자인 패턴의 목적, 오브젝트(객체)지향의 목적이란 바로 이러한 클래스를
만들 수 있는 구조를 제공하는 것입니다.

주석 : The Open-Closed Principle, http://www.objectmentor.com/publication/ocp.pdf
참조 : java언어로 배우는 디자인 패턴 입문 (영진닷컴), 문제가 될 시 삭제하겠습니다. 

+ Recent posts