Java/Design Pattern

[헤드퍼스트 디자인 패턴] 8. 템플릿 메서드 패턴

noahkim_ 2024. 12. 18. 19:24

에릭 프리먼 님의 "헤드퍼스트 디자인 패턴" 책을 정리한 포스팅 입니다

 

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의 하위 클래스. 구현해야 할 최소 메서드만 정의해서 상위의 전체 로직 재사용