회색 박스 (Graybox)??
패턴계에는 크게 두가지 박스가 있습니다.
GoF 패턴 책을 읽으신 분이라면 하얀 박스(상속)와 검은 박스(조합) 애기는 많이 들어 보셨을 겁니다. 혹시 회색 박스는 들어보셨나요? 🙂
하얀 박스(Whitebox)는 속이 보이는 상속을 의미합니다.
바로 자식 클래스가 부모 클래스를 접근해서 다 볼수 (사용할수) 있음을 의미합니다.
상속(Inheritance)을 통해 계약기반의 시스템을 구성함으로써, 확장성과 일관성 있는 구조를 가질 수 있는 장점이 있습니다.
단점으로는 재사용 측면에서만 보자면 상속을 이용해서 확장해 나가기 위해서는 부모 클래스 (Abstract 클래스 또는 Template Method)의 흐름과 행위들을 파악해야 하는 것이 단점이죠.
이와 반대되는 개념으로는 검은 박스 (Blackbox)은 조합이 있습니다.
호출하는 caller 입장에서는 내부를 모르는체 단지 인터페이스만 호출해서 결과를 얻기 때문에 검은 박스라고 합니다.
조합(Composition)은 단순히 인터페이스 하나만 호출하기 때문에, 재사용하기가 상대적으로 용이하고, 런타임시에도 쉽게 컴포넌트를 교체할 수 있는 장점이 있습니다.
하지만 상속에 비해 확장성이 떨어지고 한번에 올바른 인터페이스를 설계하기 어렵습니다. 계속해서 요구사항이 바뀌면 인터페이스의 파라메터들을 프로토콜 형태로 만들어넣거나? 아니면 기존 인터페이스를 유지한채 새롱누 인터페이스를 계속 추가해야 되기 때문입니다.
그래서 서로의 단점을 상쇄시키기 위해, 상속(Whitebox)과 조합(Blackbox)을 합쳐서 사용하는데, 하얀색과 검은색을 합치면 회색이기 때문에 Graybox 라고 부르기도 합니다.
디자인 패턴의 Template Method Pattern이 가장 좋은 회색 박스의 예입니다.
Abstract 클래스에 있는 Template Method로 하위 클래스의 흐름을 일관성있게 제어하면서, 조합을 이용해 런타임 시에도 서브 클래스를 교체할 수 있습니다. 라이브러니나 프레임워크 구축시 에는 Strategy 보다는 Template Method를가 훨씬 잘 사용됩니다.
Framework 설계의 대가인 Ralph Johnson도 자신의 논문인 Evolving Framework에서 Whitebox Framework으로 일관성 있는 흐름과 제어 방향을 구축한 후, Blackbox Framework으로 중복된 부분을 줄여나가는 방법을 선호하고 있습니다.
자세한 부분은 논문을 요약 정리한 필자의 블로그 포스트(https://arload.wordpress.com/2008/09/15/evolvingframeworks/)를 참고하시길 권해드립니다.
와우 .. ㅋㅋ
오랜만이네요 ..
아~참..
새해복 많이 받으세요.
조금 늦은 감이 있는 새해 인사지만요..^^
태원아>>
하이 태원아 오랜만이다.
잘 지내고있지 🙂 찾아와 줘서 고맙다.
너도 건강하고, 희망찬 한해 보내길 바래~~~
[…] graybox 즉 whitebox(상속)과 blackbox(조합)을 함께 적용하는 것이 패턴계의 철학으로 굳혀져 있어서 과연 이말이 맞는지 많은 의구심을 […]