[java] 데코레이터 패턴
데코레이터 패턴은 객체 지향 디자인 패턴 중 하나로, 객체에 동적으로 새로운 책임을 추가하는 구조적인 디자인 패턴입니다.
데코레이터 패턴의 이점
데코레이터 패턴을 사용하면 상속을 통해 확장하거나, 객체를 수정하지 않고도 동적으로 새로운 책임을 추가할 수 있습니다. 이는 객체의 유연성과 확장성을 증가시켜줍니다.
데코레이터 패턴의 구성
데코레이터 패턴은 다음과 같이 구성됩니다.
- Component Interface: 데코레이터와 컨크리트 컴포넌트에 공통 인터페이스를 정의합니다.
- Concrete Component: 새로운 책임이 추가될 기본 객체입니다.
- Decorator: 데코레이터의 기반이 되는 추상 클래스이며, Component 인터페이스를 구현합니다.
- Concrete Decorator: 실제로 새로운 책임을 추가하는 구체적인 데코레이터 클래스입니다.
데코레이터 패턴의 예제
다음은 자바로 구현된 간단한 데코레이터 패턴의 예제입니다.
// Component Interface
public interface Beverage {
String getDescription();
double cost();
}
// Concrete Component
public class Espresso implements Beverage {
public String getDescription() {
return "에스프레소";
}
public double cost() {
return 1.99;
}
}
// Decorator
public abstract class CondimentDecorator implements Beverage {
protected Beverage beverage;
}
// Concrete Decorator
public class Mocha extends CondimentDecorator {
public Mocha(Beverage beverage) {
this.beverage = beverage;
}
public String getDescription() {
return beverage.getDescription() + ", 모카";
}
public double cost() {
return .20 + beverage.cost();
}
}
위의 코드 예제는 음료의 가격과 설명을 다루는 데코레이터 패턴을 보여줍니다.
결론
데코레이터 패턴은 객체 지향 프로그래밍에서 객체의 동적인 책임 추가에 유용한 패턴으로, 상속을 피하고 유연한 구조를 유지할 수 있도록 도와줍니다.