데코레이터 패턴 (Decorator Pattern)
데코레이터 패턴 (Decorator Pattern)이란?
기능을 조금씩 추가하기 위해서 새로운 클래스를 생성하는 경우에 너무 많은 상속 관계가 발생할 수 있기에 데코레이터 패턴은 상속을 하지 않고 새로운 기능을 추가할 수 있도록 해주는 패턴이다.
데코레이터 패턴에서는 객체에 추가적인 요건을 동적으로 추가해준다. (서브 클래스를 만들지 않고 기능을 유연하게 확장할 수 있는 방법을 제공한다.)
데코레이터 패턴의 구성요소
요소 | 설명 |
이름 | 데코레이터(Decorator) |
문제 | 조금씩 다른 다양한 종류, 늘어날수록 확장이 어렵다 |
해결 방안 | 상속을 남용하지 않고 연관으로 필요한 기능을 추가해준다. 실행시점 확장 Extension at runtime (not compile time) |
결과 | 확장성 |
데코레이터 패턴의 정의
- Component : 각 구성요소는 직접 쓰일 수도 있고 데코레이터로 감싸져서 쓰일 수도 있다. (클래스 또는 인터페이스)
- ConcreteComponent : 새로운 행동을 동적으로 추가한다.
- Decorator는 자신이 장식할 구성요소와 같은 인터페이스 또는 추상 클래스 역할을 한다.
- ConcreteDecorator에는 그 객체가 장식하고 있는 것(데코레이터가 감싸고 있는 컴포넌트 객체)을 위한 인스턴스 변수가 있다.
- Decorator는 컴포넌트의 기능 및 상태를 확장할 수 있다.
- 데코레이터에서 새로운 메소드 추가가 가능하다. 그러나 일반적으로 새로운 메소드를 추가하는 대신 컴포넌트에 원래 있던 메소드를 호출하기 전 또는 후에 별도의 작업을 처리하는 방식으로 새로운 기능을 추가한다. 이러한 이유는 데코레이터 패턴에서 상속은 기능(행동)을 물려받기 위함이 아니라 형식을 맞추기 위해서이다.
- 컴포넌트는 추상 클래스 또는 인터페이스로 구현 가능하다.
'Java > 고급객체지향' 카테고리의 다른 글
고급객체지향 프로그래밍 - 싱글턴 패턴(Singleton Pattern), 반복자 패턴(Iterator Pattern) (0) | 2021.10.19 |
---|---|
고급객체지향 프로그래밍 - 팩토리 메소드 패턴(Factory Method Pattern) (0) | 2021.10.19 |
고급객체지향 프로그래밍 - 스윙 (Swing) (0) | 2021.10.18 |
고급객체지향 프로그래밍 - 옵서버 패턴 (Observer Pattern) (0) | 2021.10.18 |
고급객체지향 프로그래밍 - 전략 패턴strategy pattern) (0) | 2021.10.18 |