개발서적/Head First Design Patterns
[Design Pattern] 데코레이터 패턴 (Decorator Pattern)
Heang Lee
2021. 8. 31. 23:48
이 글은 에릭 프리먼의 'Head First Design Patterns'를 읽고 TIL(Today I Learned)로써 정리한 내용을 기록하는 글입니다.
자세한 내용은 책을 통해 확인하실 수 있습니다.
알라딘: Head First Design Patterns (aladin.co.kr)
데코레이터 패턴(Decorator Pattern)
데코레이터 패턴은 객체에 기능을 동적으로 추가할 수 있도록 만드는 패턴입니다.
데코레이터 패턴은 클래스를 상속받는 데코레이터가 부모 클래스와 has-a 관계를 가지면서 그 객체의 메소드의 호출 결과에 새로운 기능을 추가할 수 있게 합니다.
이는 확장에 대해서는 열려 있지만 변경에 대해서는 닫혀 있어야 하는 객체지향 원칙(OCP)에 부합합니다.
데코레이터는 이를 상속받은 다른 데코레이터와 has-a 관계를 형성할 수 있습니다.
구성 요소를 감싸는 데코레이터의 개수에 제한이 없기 때문에 데코레이터 패턴을 남발할 경우 코드가 필요 이상으로 복잡해질 수 있다는 단점이 있습니다.
public abstracrt class Beverage {
String description = "제목 없음";
public String getDescription() {
return description;
}
public abstract double cost();
}
public abstract class CondimentDecorator extends Beverage {
public abstract String getDescription();
}
public class Espresso extends Beverage {
public Espresso() {
description = "에스프레소";
}
public double cost() {
return 1.99;
}
}
public class Mocha extends CondimentDecorator {
Beverage beverage;
public Mocha(Beverage beverage){
this.beverage = beverage;
}
public String getDescription() {
return beverage.getDescription() + ", 모카";
}
public double cost() {
return .20 + beverage.cost();
}
}