데코레이터는 객체지향설계에서 자주 언급되는 디자인 패턴 중 하나인 Decorator Design pattern과 같은 의미의 단어입니다. 즉 기존에 존재하는 class를 수정하지 않고 기능을 변경하기 위해 기존 class를 감싸서(wrap한다고 하죠) 이 목적을 달성하는 패턴입니다. 사용자는 기존 class의 변경없이 부가적인 기능을 덧붙일 수 있는 장점을 지닙니다(이때 인터페이스는 동일해야 합니다.).
BT에서 데코레이터가 하는 역할도 똑같습니다. 데코레이터는 오직 하나의 자식 노드(즉 Task)를 가지는데(즉 바로 아래의 자식노드를 감싸는 역할을 한다는 의미겠지요..), 이 노드의 행위에 데코레이터가 영향을 줍니다. 데코레이터는 정말 다양하게 쓰일 수 있는데 본 글에서는 대표적으로 쓸만한 간단한 데코레이터만 언급하도록 하겠습니다.
가장 단순하게 자주 사용되는 녀석은 소위 필터(filter)라고 불리는 것으로 자식이 수행을 할지 말지를 결정하는 데코레이터가 있습니다. 예를 들어 자식노드가 반복적으로 수행되는 횟수를 제한하는 용도로 쓰일 수 있겠지요. 로직을 의사코드로 표현해 본다면 다음과 같습니다.