안녕하세요. moltak입니다.
오늘은 디자인 패턴 중 데코레이터 패턴입니다.
의도:
데코레이터 패턴은 어떤 클래스를 꾸미는 역할을 합니다.
예전에 우리가 만들었던 코드를 "감싸"서 새로운 임무를 부여하는 것이 가능합니다.
"감싸"다는 말은 이 패턴에서 굉장히 중요합니다.
활용성:
제가 보는 책(head first design patterns)에서는 데코레이션 패턴을 커피 예를 들어서 설명을 했습니다.
커피집에 가면 커피가 굉장히 많은데 그 커피에 대한 클래스를 만들고 모든 재료, 기능들을 넣는 것 보단 커피 클래스 따로 재료 클래스 따로 만들고 있었습니다.
커피 클래스, 재료 클래스를 따로 만들게 되었을 때 서로 유기적으로 잘 묶기만 한다면 한 클래스에 모든 기능을 넣는 것 보단 당연히 구조적으로 좋겠죠?
데코레이션 패턴에서는 유기적으로 묶는 방법으로 "감싸"는 것을 선택했습니다.
위 클래스 다이어그램을 보시면 가장 상위에 Coffee 추상 클래스가 보입니다.
그 아래로 그것을 상속받는 Americano, Espresso, Cafelatte같은 클래스가 있습니다.
또, Decorator라는 추상클래스가 있는데 이 클래스는 getDescription이라는 순수가상함수를 갖고 있습니다.
그래서 아래 재료들이 무조건 이 함수를 새로 정의하게 만들었습니다.
이 패턴의 시나리오는 위 소스에서 보는 것과 같이 원하는 커피 인스턴스를 생성하고 원하는 재료를 만들어서 서로에게 계속 참조를 시킨다는 것입니다. (감싼다는 의미가 이것입니다.)
사용자가 getDescription함수를 호출하거나 cost 함수를 호출하면 제어가 계속 참조하는 곳으로 올라가게 됩니다.
(아래 소스 참조)
이런 식으로 사용자는 예전부터 있던 클래스를 하나도 수정하지 않고 단지 "감싸"서 예전 클래스에 새로운 기능을 부여하는 것이 가능합니다.
Bloger : moltak.net
'SE > RF_DP' 카테고리의 다른 글
Design Pattern 도움 사이트 (0) | 2011.03.15 |
---|