에릭 프리먼 님의 "헤드퍼스트 디자인 패턴" 책을 정리한 포스팅 입니다
1. 템플릿 메서드 패턴
- 전체 알고리즘의 흐름은 상위 클래스에 정의하고, 세부 단계 일부는 하위 클래스에서 구현하도록 유도하는 패턴
장점
장점 | 설명 |
알고리즘 구조 유지 |
전체 흐름(템플릿 메서드)은 변하지 않고 재사용 가능
|
부분 단계만 재정의 가능 |
서브클래스가 필요한 부분만 오버라이드해서 맞춤 동작 구현 가능
|
후크(Hook) 메서드 지원 |
선택적으로 오버라이드할 수 있는 "빈 메서드"를 제공 → 서브클래스가 조건에 따라 실행 여부 제어 가능
|
2. 예제: CaffeineBeverage
CaffeineBeverage (abstract class)
예제) CaffeineBeverage
더보기
public abstract class CaffeineBeverage {
final void prepareRecipe() {
boilWater();
brew();
pourInCup();
if (customerWantsCondiments()) addCondiments();
}
abstract void brew();
abstract void addCondiments();
void boilWater() { /* ... */ }
void pourInCup() { /* ... */ }
boolean customerWantsCondiments() { return true; }
}
Tea (subclass)
예제) Tea
더보기
public class Tea extends CaffeineBeverage {
public void brew() { System.out.println("찻잎 우려내는 중"); }
public void addCondiments() { System.out.println("레몬을 추가하는 중"); }
}
3. 예시
예시 | 설명 |
Arrays.sort() |
내부에서 정렬 알고리즘의 틀은 고정돼 있음
비교 로직은 compareTo() 또는 Comparator로 결정됨 |
AbstractList |
subList() 등 공통 로직이 정의돼 있음 → get()과 size()만 구현하면 작동함
ArrayList, LinkedList: AbstractList의 하위 클래스. 구현해야 할 최소 메서드만 정의해서 상위의 전체 로직 재사용 |
'Java > Design Pattern' 카테고리의 다른 글
[헤드퍼스트 디자인 패턴] 9-2. 컴포지트 패턴 (2) | 2024.12.18 |
---|---|
[헤드퍼스트 디자인 패턴] 9-1. 반복자 패턴 (0) | 2024.12.18 |
[헤드퍼스트 디자인 패턴] 7-2. 퍼사드 패턴 (0) | 2024.12.17 |
[헤드퍼스트 디자인 패턴] 7-1. 어댑터 패턴 (0) | 2024.12.17 |
[헤드퍼스트 디자인 패턴] 6. 커맨드 패턴 (0) | 2024.12.17 |