[java] 데코레이터 패턴

데코레이터 패턴은 객체 지향 디자인 패턴 중 하나로, 객체에 동적으로 새로운 책임을 추가하는 구조적인 디자인 패턴입니다.

데코레이터 패턴의 이점

데코레이터 패턴을 사용하면 상속을 통해 확장하거나, 객체를 수정하지 않고도 동적으로 새로운 책임을 추가할 수 있습니다. 이는 객체의 유연성과 확장성을 증가시켜줍니다.

데코레이터 패턴의 구성

데코레이터 패턴은 다음과 같이 구성됩니다.

데코레이터 패턴의 예제

다음은 자바로 구현된 간단한 데코레이터 패턴의 예제입니다.

// 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();
    }
}

위의 코드 예제는 음료의 가격과 설명을 다루는 데코레이터 패턴을 보여줍니다.

결론

데코레이터 패턴은 객체 지향 프로그래밍에서 객체의 동적인 책임 추가에 유용한 패턴으로, 상속을 피하고 유연한 구조를 유지할 수 있도록 도와줍니다.

참고 자료