[구조 패턴] Decorator
데코레이터 패턴이란?
주어진 상황 및 용도에 따라 어떤 객체에 책임을 덧붙이는 패턴으로 기능 확장이 필요할 때 서브클래싱 대신 쓸 수 있는 패턴입니다.
즉 기존 객체가 가진 동작들을 포함하는 특수 래퍼를 만들 수 있는 디자인 패턴입니다.
Decorator pattern에 다른 이름?
데코레이터 패턴은 자기자신을 다시 자기 자신으로 감싸면서 큰 블록을 만들어 내는 것이 특징이 빈다. 작은 블록을 다시 작은 블록으로 감싸는 특징 때문에 Wrapper pattern이라고도 불립니다. 그리고 작은 블록으로 점점 큰 블록으로 쌓는다는 다는 특징 때문에 Structural pattern 패턴이라고 부릅니다.
주로 데코레이터 패턴은 언제 사용할까?
- 다른 객체들에 영향을 주지 않고 개별 객체 기능을 추가하고 싶을 떄 사용합니다.
- 추가한 기능을 없앨 떄도 사용합니다.
- 상속을 사용해서 기능을 확장하기 어려울 때 사용합니다.
데코레이터 패턴 조금 더 쉽게 이해하기~
https://refactoring.guru/ko/design-patterns/decorator님이 설명이 더 잘되있는 것 같습니다.
이분은 옷을 입는 것을 데코레이터 패턴을 설명했습니다.
"당신을 추을 때 스웨터로 몸을 감쌉니다. 스웨터를 입어도 춥다면 재킷을 입고, 또 비가 오면 비옷을 입습니다. 이 모든 옷은 기초 행동을 확장하지만, 당신의 일부가 아니기 때문에 필요할 때마다 옷을 쉽게 벗을 수 있습니다" (설명이 너무 찰떡같네요....)
만약 위 예제가 이해가 잘안되면 코으한번 보시면 바로 이해됩니다.
데코레이터 패턴의 장단점
장점
- 상속을 통한 하위 클래스를 만들지 않고 객체의 기능을 확장할 수 있습니다.
- 여러 개의 객체를 래핑 하여 여러 동작을 합칠 수 있습니다.
- 단일 책임 원칙을 준수합니다.
- 런타임에서 객체에 책임을 추가하고 제거할 수 있습니다.
단점
- 코드가 복잡해질 수 있습니다.
- 래퍼 스택에서 특정 래퍼를 제거하는 것이 어렵습니다.
- 데코레이터 기능이 데코레이터 스택 순서에 의존해야 합니다.
데코레이터 패턴 코드 예제
https://github.com/jjunhaa0211/ADPattern-Swift/tree/main/GoF-DecoratorPattern
GitHub - jjunhaa0211/ADPattern-Swift: 🧪 Swift를 사용하여 아키텍쳐 패턴과 디자인 패턴의 예제를 설명합
🧪 Swift를 사용하여 아키텍쳐 패턴과 디자인 패턴의 예제를 설명합니다. 🧪. Contribute to jjunhaa0211/ADPattern-Swift development by creating an account on GitHub.
github.com
오늘도 수고 많으셨습니다.