2. Design/Design
The Open-Closed Principle
SSKK
2009. 2. 17. 20:33
확장에 대해서는 열고, 수정에 대해서는 닫는다.
OCP 원칙은 Bertrand Meyer가 제시한 것으로 Robert C. Martin이 C++ Report (Jan. 1996)에 쓴 Engineering Notebook이라는 컬럼에 정리되어 잇다. (The Open-Closed Principle, http://www.objectmentor.com/publications/ocp.pdf )
이 원칙은 클래스 등이,
-. 확장(extension)에 대해서는 열려(open)있지만
-. 수정(modification)에 대해서는 닫혀(closed)있어야 한다
고 주장하고 있다.
클래스를 설계할 때 특별한 이유가 없는 한 확장을 허용해야 한다. 이유 없이 확장을 금지해서는 안되며, 이것이 '확장에 해서는 열려있다'라는 의미이다.
그러나 확장을 할 때마다 기존의 클래스를 수정해야 하는 것도 곤란한다. 확장을 해도 기존의 클래스는 수정할 필요가 없는 것이 '수정에 대해서는 닫혀있다'라는 의미이다.
확장은 대환영이지만 기존의 클래스를 수정해서는 안된다. 기존의 클래스를 수정하지 않고 확장할 수 있도록 하는 것이 The Open-Closed Principle의 원칙이다.
클래스에 대한 요구는 빈번하게 변화한다. 그리고 그 요구는 대부분 '기능을 확장하고 싶은' 경우이므로 클래스가 기능 확장을 할 수 없다면 곤란하다. 그러나 한편으로는 이미 완성되어 테스트까지 마친 클래스를 수정한다면 소프트웨어 품질을 떨어뜨릴 위험이 있다.
확장에 대해서는 열려있고 수정에 대해서는 닫혀있는 클래스가 부품으로써 재이용 가치가 높은 클래스이다. 그리고 디자인 패턴의 목적, 객체지향의 목적이란 바로 이러한 클래스를 만들 수 있는 구조를 제공하는 것이다.
참고 : Java 언어로 배우는 디자인 패턴 입문 - YUKI HIROSHI 저