본문 바로가기
스터디/헤드퍼스트 디자인패턴

[헤드퍼스트 디자인패턴] 08. 템플릿 메소드 패턴(Template method)

by 디토20 2022. 7. 24.
반응형

 

 

 

[헤드퍼스트 디자인패턴] 08. 템플릿 메소드 패턴(Template method)

 

 

 

1. 템플릿 메소드란?

알고리즘을 일련의 단계로 정의한다. 템플릿 메소드를 사용하면 알고리즘의 일부 단계를 서브클래스에서 구현할 수 있으며, 알고리즘의 구조는 그대로 유지하면서 알고리즘의 특정 단계를 서브클래스에서 재정의할 수도 있다.

 

public abstract class CaffeineBeverage {
	// prepareRecipe()은 템플릿 메소드
    // override를 방지하기 위해 final로 선언
    final void preparedRecipe() {
    	boilWater();
        brew();
        pourInCup();
        addCondiments();
    }

    abstract void brew();
    
    abstract void addCondiments();
    
    void boilWater() {
    	// 메소드를 구현하는 코드
    }

    void pourInCup() {
    	// 메소드를 구현하는 코드
    }

}

 

 

 

2. 템플릿 메소드의 장점

  • 추상클래스에서 알고리즘을 독점해 작업을 처리할 수 있다.
  • 서브클래스에서 코드를 재사용할 수 있다.
  • 알고리즘이 변경될 경우 알고리즘이 한 곳에 모여있으므로 한 부분만 고치면 된다.
  • 새로운 객체를 쉽게 추가할 수 있다.
  • 추상 클래스에 알고리즘 지식이 집중되어 있어 일부 구현만 서브 클래스에 의존한다.

 

 

 

 

3. Hook

public abstract class CaffeineBeverage {
	// prepareRecipe()은 템플릿 메소드
    // override를 방지하기 위해 final로 선언
    final void preparedRecipe() {
    	boilWater();
        brew();
        pourInCup();
        addCondiments();
        hook();
    }

    abstract void brew();
    
    abstract void addCondiments();
    
    void boilWater() {
    	// 메소드를 구현하는 코드
    }

    void pourInCup() {
    	// 메소드를 구현하는 코드
    }
    
    void hook() {}

}

기본적으로 아무것도 하지 않는 구상 메소드를 정의할 수 있는데, 이런 메소드를 후크(Hook)라고 부른다. 서브클래스에서 오버라이드 해서 사용할 수도 있고, 사용하지 않을 수도 있다.

 

 

 

 

4.할리우드 원칙과 템플릿 메소드 패턴

 

디자인 원칙

할리우드 원칙 : 먼저 연락하지 마세요. 저희가 연락 드리겠습니다.

 

저수준 구성 요소는 고수준 구성 요소를 직접 호출할 수 없고, 저수준 구성 요소가 언제 어떻게 쓰일지는 고수준 구성 요소가 결정한다. 템플릿 메소드 패턴의 추상 클래스는 고수준 구성 요소로, 메소드 구현이 필요한 상황에만 서브클래스를 불러낸다.

 

 

 

 

 

728x90
반응형

댓글