반응형
[헤드퍼스트 디자인패턴] 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
반응형
'스터디 > 헤드퍼스트 디자인패턴' 카테고리의 다른 글
[헤드퍼스트 디자인패턴] 09. 상태 패턴(State Pattern) (0) | 2022.08.07 |
---|---|
[헤드퍼스트 디자인패턴] 08. 반복자 패턴 (Iterator Pattern) 과 컴포지트 패턴 (Composite Pattern) (0) | 2022.07.31 |
[헤드퍼스트 디자인패턴] 07. 어댑터 패턴(Adapter Pattern)과 퍼사드 패턴(Facade Pattern) (0) | 2022.07.17 |
[헤드퍼스트 디자인패턴] 06. 커맨드 패턴(Command Pattern) (0) | 2022.07.10 |
[헤드퍼스트 디자인패턴] 05. 팩토리 패턴(Factory Pattern) (1) | 2022.07.03 |
댓글