[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())  # "기본 상자에 물건을 포장합니다. 리본을 묶어 포장합니다. 스티커를 붙여 포장합니다."

  • 객체 기능을 동적으로 확장하면서 클래스 구조를 깔끔하게 유지 가능

Categories:

Updated:

Leave a comment