목차

11. 데코레이터 패턴(Decorator Pattern)


개요

원천 객체(Object)에 기능을 추가해나가는 디자인 패턴.

개발을 하다보면 가끔 전체 클래스에 새로운 기능을 추가할 필요는 없지만, 특정 객체에는 새로운 기능이 추가되야 하는 경우가 있습니다.

예를 들어 Box라는 객체에는 좌우측 측면에 손잡이목적의 구멍(Hole)이 없지만 어떤 박스에는 필요 할수도 있습니다. 이런 경우 해당 박스에 새로운 속성이 추가되야 합니다.

일반적으로, 위와같은 기능및 속성추가를 하는 방법은 상속을 이용합니다. 말인즉슨, Box를 상속받는 BoxWithHole이라는 SubClass를 만드는 방법이죠.

하지만, 해당 방법은 적절한 방법은 아닌데, 그 이유는 손잡이구멍의 선택은 정적이기 때문입니다. 사용자는 구성요소를 언제 어디서 어떻게 손잡이를 구성할지 제어할 수 없기 때문입니다.

그래서 기존의 Box라는 객체를 감싸서 다른 기능(손잡이)을 추가해주는 객체를 장식자(Decorator)라고 합니다. 장식자는 자신이 둘러싼 속성과 기능도 동일하게 제공하기 때문에 장식자의 존재는 이를 사용하는 사용자에게 감춰집니다. 그리고 사용자가 기존 객체에 대한 요청을 중간에 가로채서 해당 객체에 전달하는데, 그 사이에 전&후처리로 다른 작업을 추가 할 수 있고, 이 경우 투명성이 존재하기에 장식자(Decorator)의 중첩이 가능하고 이를 통해 기능추가를 계속 할 수 있게 됩니다.

사용시기

예제