본문 바로가기

프로그래밍 강의 메모/코딩으로 학습하는 GoF의 디자인 패턴_백기선

구조 관련 디자인 패턴 > 데코레이터 패턴(Decorator Pattern)

https://inf.run/6Shr

 

코딩으로 학습하는 GoF의 디자인 패턴 - 인프런 | 강의

디자인 패턴을 알고 있다면 스프링 뿐 아니라 여러 다양한 기술 및 프로그래밍 언어도 보다 쉽게 학습할 수 있습니다. 또한, 보다 유연하고 재사용성이 뛰어난 객체 지향 소프트웨어를 개발할

www.inflearn.com

 

 

데코레이터 패턴

구조 관련 디자인 패턴.

 

기존 코드를 변경하지 않고 부가 기능을 추가하는 패턴.

 

상속이 아닌 위임을 사용해서 보다 유연하게 런타임에 부가 기능을 추가하는 것도 가능하다.

 

 

부가기능을 스태틱하게 컴파일타임이 아니라 다이내믹하게 런타임에 추가할 수 있다.

 

상속으로 문제를 해결하려고 하면 경우의 수가 많아지고,

조건에 맞게 클래스들을 따로 정의해야 한다.

 



컴포짓패턴과 유사하지만 차이점

데코레이터가 컴포짓패턴에 있던 컴포짓 타입처럼

여러 개의 데코레이터를 갖는게 아니라,

딱 하나의 wrappee라는 Decorator가 감싸고 있는 Component 타입의 인스턴스를 갖고있다.

 

데코레이터는 자기가 감싸고 있는 딱 하나의 컴포넌트를 오퍼레이션 내부에서 호출하는데

호출하기 전이나 뒤에 부가적인 일을 할 수 있다.

 

 

 

 

 

데코레이터 패턴의 장점과 단점

장점

1. 새로운 클래스를 만들지 않고 기존 기능을 조합할 수 있다.

이러한 점이 가장 큰 장점이다.

기능을 추가하면 그 본연의 일만하고, 

조합을 하고 사용하는 것은 다른쪽에서 일한다.

그래서 단일 책임 원칙을 위반하지 않고 기능을 추가, 조합할 수 있다.

 

2. 컴파일 타임이 아닌 런타임에 동적으로 기능을 변경할 수 있다.

인스턴스가 생성되기 전에 플래그를 이용해서 런타임에 조합할 기능을 선택 적용할 수 있다.

데코레이터 패턴을 사용하지 않는다면 조합을 사용하는 클래스가 정적으로 미리 준비가 되어있어야 한다.

 

단점

데코레이터를 조합하는 코드가 복잡할 수 있다.

하지만 만약 상속을 사용한다고 하면 더 많은 서브클래스가 생성되어야하기 때문에 단점으로 볼 수 없다.

 

 

 

 

 

 

https://refactoring.guru/ko/design-patterns/decorator

 

Decorator

/ Design Patterns / Structural Patterns Decorator Also known as: Wrapper Intent Decorator is a structural design pattern that lets you attach new behaviors to objects by placing these objects inside special wrapper objects that contain the behaviors. Prob

refactoring.guru