[230810] Decorator Pattern
Decorator Pattern
- 객체지향 프로그래밍에서 사용
- 객체에 동적으로 새로운 기능을 추가할 수 있게 해주는 구조적 패턴
- 상속을 통해 기능을 확장하는 대신, 객체를 감싸는(wrapper) 방식으로 추가하거나 수정함
어떤 상황에서 유용할까?
- 기존 코드를 변경하지 않고 객체 기능을 확장해야할 때
- 많은 수의 동적으로 변하는 기능 조합이 필요한 경우
- 객체의 기능을 쉽게 추가하거나 제거해야할 때
일반적인 구성 요소
Component
데코레이터 패턴에서 기능을 추가하거나 변경하고자 하는 실제 객체, 데코레이터들로 감싸질 수 있음Decorator
기본 Componet 감싸며 추가 기능을 제공하는 클래스
예시
class BasicBox:
def pack(self):
return "기본 상자에 물건을 포장합니다."
class RibbonDecorator:
def __init__(self, box):
self.box = box
def pack(self):
return f"{self.box.pack()} 리본을 묶어 포장합니다."
class StickerDecorator:
def __init__(self, box):
self.box = box
def pack(self):
return f"{self.box.pack()} 스티커를 붙여 포장합니다."
basic_box = BasicBox()
ribbon_box = RibbonDecorator(basic_box)
sticker_box = StickerDecorator(basic_box)
ribbon_and_sticker_box = StickerDecorator(RibbonDecorator(basic_box))
print(basic_box.pack()) # "기본 상자에 물건을 포장합니다."
print(ribbon_box.pack()) # "기본 상자에 물건을 포장합니다. 리본을 묶어 포장합니다."
print(sticker_box.pack()) # "기본 상자에 물건을 포장합니다. 스티커를 붙여 포장합니다."
print(ribbon_and_sticker_box.pack()) # "기본 상자에 물건을 포장합니다. 리본을 묶어 포장합니다. 스티커를 붙여 포장합니다."
- 객체 기능을 동적으로 확장하면서 클래스 구조를 깔끔하게 유지 가능
Leave a comment