문제정의
4가지 커피를 판매하고 있다.
만약 여기서 우유, 휘핑크림 등 추가하고 싶으면 어떻게 해야할까?
상속으로 표현한 경우,
엄청나게 많은 class가 추가된다.
기존 음료에 attribute로 표현해본 경우
아래와 같은 형태가 된다.
첨가물에 대해서 상위 Beverage가 첨가물 가격을 계산하고 하위에서 나머지 계산을 진행한다.
여기서 첨가물의 가격 변화가 있을 때마다
새로운 종류의 첨가물이 증가할 때
이 코드를 계속해서 변경해야된다.
해결 방법
첨가물 각각 concrete class를 만들고 그들을 묶는 CondimentDecorator를 생성한다.
Decorator Pattern
object를 dynamic하게 wrapping하여 이미 가지고 있는 responsibility와 behavior을 추가 및 변경하는 패턴
구현
Decorator는 자신이 꾸며야하는 Component와 연결되어있어야한다. (WrappedObj)
Decorator는 자신이 꾸며야하는 객체(ConcreteComponent)의 super type과 동일(상속)해야한다. (component)
단점
자잘한 class를 여러 개 만들어야한다.
이 패턴에 친숙하지 않으면 이해하기 어렵다.
반응형
'💻 개발IT > Design Patterns' 카테고리의 다른 글
6. Compound 패턴 - MVC Pattern (0) | 2022.03.12 |
---|---|
5. Structural 패턴 - Bridge Pattern (0) | 2022.03.10 |
5. Structural 패턴 - Composite Pattern (0) | 2022.03.09 |
5. Structural 패턴 - Adapter Pattern (0) | 2022.03.06 |
4. Creational 패턴 - Singleton Pattern (0) | 2022.03.04 |
4. Creational 패턴 - Builder Pattern (0) | 2022.03.03 |
4. Creational 패턴 - Abstract Factory Method Pattern (0) | 2022.03.02 |
4. Creational 패턴 - Factory Method Pattern (0) | 2022.03.02 |