데코레이터 패턴
구조 관련 디자인 패턴.
기존 코드를 변경하지 않고 부가 기능을 추가하는 패턴.
상속이 아닌 위임을 사용해서 보다 유연하게 런타임에 부가 기능을 추가하는 것도 가능하다.
부가기능을 스태틱하게 컴파일타임이 아니라 다이내믹하게 런타임에 추가할 수 있다.
상속으로 문제를 해결하려고 하면 경우의 수가 많아지고,
조건에 맞게 클래스들을 따로 정의해야 한다.
컴포짓패턴과 유사하지만 차이점은
데코레이터가 컴포짓패턴에 있던 컴포짓 타입처럼
여러 개의 데코레이터를 갖는게 아니라,
딱 하나의 wrappee라는 Decorator가 감싸고 있는 Component 타입의 인스턴스를 갖고있다.
데코레이터는 자기가 감싸고 있는 딱 하나의 컴포넌트를 오퍼레이션 내부에서 호출하는데
호출하기 전이나 뒤에 부가적인 일을 할 수 있다.
데코레이터 패턴의 장점과 단점
장점
1. 새로운 클래스를 만들지 않고 기존 기능을 조합할 수 있다.
이러한 점이 가장 큰 장점이다.
기능을 추가하면 그 본연의 일만하고,
조합을 하고 사용하는 것은 다른쪽에서 일한다.
그래서 단일 책임 원칙을 위반하지 않고 기능을 추가, 조합할 수 있다.
2. 컴파일 타임이 아닌 런타임에 동적으로 기능을 변경할 수 있다.
인스턴스가 생성되기 전에 플래그를 이용해서 런타임에 조합할 기능을 선택 적용할 수 있다.
데코레이터 패턴을 사용하지 않는다면 조합을 사용하는 클래스가 정적으로 미리 준비가 되어있어야 한다.
단점
데코레이터를 조합하는 코드가 복잡할 수 있다.
하지만 만약 상속을 사용한다고 하면 더 많은 서브클래스가 생성되어야하기 때문에 단점으로 볼 수 없다.
https://refactoring.guru/ko/design-patterns/decorator
'프로그래밍 강의 메모 > 코딩으로 학습하는 GoF의 디자인 패턴_백기선' 카테고리의 다른 글
구조 관련 디자인 패턴 > 플라이웨이트 패턴(Flyweight Pattern) (0) | 2022.05.26 |
---|---|
구조 관련 디자인 패턴 > 퍼사드 패턴(Facade Pattern) (0) | 2022.05.26 |
구조 관련 디자인 패턴 > 컴포짓 패턴(Composite Pattern) (0) | 2022.05.25 |
구조 관련 디자인 패턴 > 브릿지 패턴(Bridge Pattern) (0) | 2022.05.25 |
구조 관련 디자인 패턴 > 어댑터 패턴(Adapter Pattern) (0) | 2022.05.25 |