Java/고급객체지향

고급객체지향 프로그래밍 - 데코레이터 패턴 (Decorator Pattern)

얄루몬 2021. 10. 19. 02:19

데코레이터 패턴 (Decorator Pattern)

 

데코레이터 패턴 (Decorator Pattern)이란?

기능을 조금씩 추가하기 위해서 새로운 클래스를 생성하는 경우에 너무 많은 상속 관계가 발생할 수 있기에 데코레이터 패턴은 상속을 하지 않고 새로운 기능을 추가할 수 있도록 해주는 패턴이다.
데코레이터 패턴에서는 객체에 추가적인 요건을 동적으로 추가해준다. (서브 클래스를 만들지 않고 기능을 유연하게 확장할 수 있는 방법을 제공한다.) 

 

데코레이터 패턴의 구성요소

요소 설명
이름 데코레이터(Decorator)
문제 조금씩 다른 다양한 종류, 늘어날수록 확장이 어렵다
해결 방안 상속을 남용하지 않고 연관으로 필요한 기능을 추가해준다.
실행시점 확장 Extension at runtime (not compile time)
결과  확장성

 

 

데코레이터 패턴의 정의

 

 

- Component : 각 구성요소는 직접 쓰일 수도 있고 데코레이터로 감싸져서 쓰일 수도 있다. (클래스 또는 인터페이스)

- ConcreteComponent : 새로운 행동을 동적으로 추가한다.

- Decorator는 자신이 장식할 구성요소와 같은 인터페이스 또는 추상 클래스 역할을 한다.

- ConcreteDecorator에는 그 객체가 장식하고 있는 것(데코레이터가 감싸고 있는 컴포넌트 객체)을 위한 인스턴스 변수가 있다.

- Decorator는 컴포넌트의 기능 및 상태를 확장할 수 있다.

- 데코레이터에서 새로운 메소드 추가가 가능하다. 그러나 일반적으로 새로운 메소드를 추가하는 대신 컴포넌트에 원래 있던 메소드를 호출하기 전 또는 후에 별도의 작업을 처리하는 방식으로 새로운 기능을 추가한다. 이러한 이유는 데코레이터 패턴에서 상속은 기능(행동)을 물려받기 위함이 아니라 형식을 맞추기 위해서이다.

- 컴포넌트는 추상 클래스 또는 인터페이스로 구현 가능하다.