에릭 프리먼 님의 "헤드퍼스트 디자인 패턴" 책을 정리한 포스팅 입니다
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 |