Template Method Pattern
알고리즘의 골격을 정의한다. 알고리즘의 일부 단계를 서브클래스에서 구현할 수 있으며, 알고리즘의 구조는 그대로 유지하면서 알고리즘의 특정 단계를 서브클래스에서 재정의할 수도 있다.
OO 원칙
-할리우드 원칙: 저수준 구성요소가 시스템에 접속할 수는 있지만 언제 어떻게 그 구성요소를 사용할지는 고수준 구성요소가 결정한다. 의존성 부패를 방지한다.
** 의존성 부패: 어떤 고수준 구성요소가 저수준 구성요소에 의존하고, 그 저수준 구성요소는 다른 구성요소에 의존하여 의존성이 복잡하게 꼬여있는 상황
Coffee 클래스와 Tea 클래스 추상화
Abstract Class
- Coffee와 Tea의 추상 클래스를 생성하고, 공통된 부분을 메소드로 구현한다.
- 이때 공통된 알고리즘을 구현한 메소드를 템프릿 메소드라고 한다.
- 고수준 구성요소로, 알고리즘을 어떻게 구현할 지를 결정한다.
public abstract class CaffeineBeverage{
final void prepareRecipe() { // 공통된 부분
boilWater(); // 해당 클래스에서 구현
brew(); // 서브클래스에서 구현
pourInCup();
addCondiments();
}
abstract void brew();
abstract void addCondiments();
void boilwater() {...}
void pourInCup() {...}
}
Concrete Class
- 각 클래스는 템플릿 메소드에서 요구하는 모든 단계를 제공해야 한다.
- 호출 당하기 전까지는 추상클래스를 직접 호출하지 않는다.
// 추상 클래스를 상속받는다..
public class Tea extends CaffeineBeverage{
public void brew() {...} // 추상 메서드 구현
public void addCondiments() {...}
}
public class Coffee extends CaffeineBeverage{
public void brew() {...} // 추상 메서드 구현
public void addCondiments() {...}
}
장단점
장점
- 템플릿 메소드를 구현한 클래스에서 작업을 처리하여 알고리즘을 독점할 수 있다.
- 서브클래스에서 코드를 재사용할 수 있다.
- 알고리즘이 하나로 모여있어 코드 수정이 편리하다.
- 다른 클래스도 쉽게 추가가 가능한 프레임워크를 제공한다.
- 추상 클래스에 알고리즘에 집중되어 있고, 일부 구현만 서브 클래스에 의존한다.
단점
- 정해진 알고리즘 골격에 의해 제한받을 수 있다.
후크
추상클래스에서 선언되지만 기본적인 내용만 구현되어 있거나 아무 코드도 들어있지 않은 메소드로 다양한 용도로 사용이 가능하다.
- 서브클래스에서 후크를 오버라이드해서 원하는 기능을 구현해서 상황에 따라 알고리즘 진행을 변경할 수 있다.
적용
JFrame
- 후크 메소드인 paint() 를 오버라이드 하면 특정 화면 영역에 특정 내용을 표시하는 JFrame 알고리즘에 사용자가 원하는 그래픽을 추가할 수 있다.
'Books > Head First Design Pattern' 카테고리의 다른 글
| [12장] MVC (0) | 2024.05.24 |
|---|---|
| [11장] Proxy Pattern (0) | 2024.05.24 |
| [7장] Adapter Pattern과 Facade Pattern (0) | 2024.05.24 |
| [6장] Command Pattern (0) | 2024.05.24 |
| [5장] Singleton Pattern (0) | 2024.05.24 |