Design-Pattern

[디자인 패턴] 데코레이터 패턴

_hong 2023. 3. 7. 12:52

데코레이터 패턴이란?

어떤 객체에 기능을 동적으로 추가하는 패턴

 

문제점

여러 기능들이 나뉘어있는 클래스를 만들기 위해 상속을 이용하여 확장한다면 너무 많은 클래스들이 생긴다. 

https://snowdeer.github.io/designpattern/2016/05/16/design-pattern-decorator/

 

 

 

이를 방지하기 위해서 최상위 클래스에 공통적인 기능들을 정의한다. 

하지만 해당 방식은 서브 클래스들이 모두 같은 기능을 상속받아야 하기 때문에 

객체의 기능 확장에 유연하지 않다. 

정적으로 기능들이 정해져있기 때문에 확장을 하기 위해선 슈퍼클래스에서 받은 것과 코드를 오버라이드한 것만 쓸 수 있다. 

 

여러 조합을 통해서 객체를 만들어야하는 경우, 객체를 동적으로 기능을 추가하거나 삭제해야 하는 경우 데코레이터 패턴을 사용할 수 있다.

서브 클래스를 상속받는 것보다 기능을 더 유연하게 추가할 수 있다.

 

 

 

 

 

Decorator라는 래퍼클래스를 상속받고 Decorator의 서브 클래스들은 Component의 객체를 가지고 있는다.

매개변수로 Component의 객체를 받고 나서 해당 Component 객체의 기능을 확장한다.

 

요기서 Decorator는 Component를 상속받는데 Decorator의 형식과 Decorator 내부에서 감싸는 객체의 형식을 맞추기 위함이다.

 

java.io 패키지에서 데코레이터 패턴을 사용한다.

https://snowdeer.github.io/designpattern/2016/05/16/design-pattern-decorator/

 

 

단점은 데코레이터 패턴을 사용하다 보면 쓸데없이 너무 많은 클래스가 생기기도 한다.

 

 

 

Reference.

헤드 퍼스트 디자인 패턴