에릭 프리먼 님의 "헤드퍼스트 디자인 패턴" 책을 정리한 포스팅 입니다
1. OCP (Open/Closed Principle)
- 새로운 행동을 추가하여 확장
- 기존 코드를 수정 필요 없음
2. 데코레이터 패턴
- 클래스에 기능을 추가할 때, 상속이 아닌 객체를 감싸는 방식으로 확장하는 구조
| 항목 | 설명 | 
| 상속의 문제점 | - 슈퍼클래스에 모든 기능을 넣으면 → 일부 서브클래스에는 불필요하거나 부적절한 기능까지 상속됨 - 기능 변경 시 상속 구조 전체에 영향 발생 | 
| → 해결 방법 | - 기능을 데코레이터 객체로 분리 - 원래 객체를 감싸고, 필요한 기능만 동적으로 위임하여 확장 | 
| 형식 | - 데코레이터 클래스는 원래 객체와 동일한 인터페이스 또는 슈퍼클래스를 구현 - 따라서 감싼 객체처럼 사용 가능 | 
| 이점 | - 기능을 동적으로 추가 가능 - 여러 데코레이터 중첩 사용 가능 - 위임 + 부가 작업 수행 가능 (기능을 덧붙이거나 변형 가능) | 
3. 예제: 스타버즈
Beverage (Base)
더보기
public abstract class Beverage {
    private String descript;
    
    public String getDescript() { return descript; }
    
    public abstract double cost();
}public class Espresso extends Beverage {
    public Espresso() { descript = "에스프레소"; }
    
    public double cost() { return 1.99; }
}public class HouseBlend extends Beverage {
    public HouseBlend() { descript = "하우스 블렌드 커피"; }
    
    public double cost() { return .89; }
}
Condiment (Decorator)
더보기
public abstract class CondimentDecorator extends Beverage {
    private Beverage beverage;
    
    public abstract String getDescript();
}public class Mocha extends CondimentDecorator {
	public Mocha(Beverage beverage) { this.beverage = beverage; }
	
    public String getDescript() { return beverage.getDescript() + ", 모카"; }
    public double cost() { return beverage.cost() + .02; }
}
4. 대표적인 예
- java.io
'Java > Design Pattern' 카테고리의 다른 글
| [헤드퍼스트 디자인 패턴] 5. 싱글턴 패턴 (1) | 2024.12.16 | 
|---|---|
| [헤드퍼스트 디자인 패턴] 4. 팩토리 메서드 패턴 (0) | 2024.12.16 | 
| [헤드퍼스트 디자인 패턴] 2. 옵저버 패턴 (0) | 2024.12.16 | 
| [헤드퍼스트 디자인 패턴] 0. 디자인 패턴이란 (1) | 2024.12.16 | 
| [헤드퍼스트 디자인 패턴] 1. 전략 패턴 (2) | 2024.12.16 |