템플릿 메서드 패턴
템플릿 메서드 패턴은 알고리즘의 전체 흐름은 상위 클래스에 고정하고, 세부 단계의 구현만 하위 클래스에 위임하는 행위 디자인 패턴입니다.
핵심 개념
- 상위 클래스가 실행 순서(템플릿)를
final메서드로 고정합니다. - 하위 클래스는
abstract메서드로 선언된 각 단계만 구현합니다. - 추상 클래스를 이용해 공통 로직과 변경 지점을 함께 표현합니다.
- 상속을 통해 알고리즘의 뼈대를 재사용합니다.
Java 예시
public abstract class Student {
public abstract void study();
public abstract void watchYoutube();
public abstract void sleep();
// 템플릿 메서드
final public void doDailyRoutine() {
study();
watchYoutube();
sleep();
}
}
class BackendStudent extends Student {
@Override
public void study() {
System.out.println("JPA 강의를 수강합니다.");
}
@Override
public void watchYoutube() {
System.out.println("개발 유튜브를 시청합니다.");
}
@Override
public void sleep() {
System.out.println("7시간 잠을 잡니다.");
}
}
장점
- 공통 로직을 상위 클래스에 모아 중복 코드를 줄일 수 있습니다.
- 알고리즘 골격의 재사용성을 높일 수 있습니다.
주의사항
- 하위 클래스를 개발할 때 상위 클래스의 내용을 알기 전까지 동작 방식을 예측하기 어렵습니다.
- 상위 클래스 수정이 발생하면 모든 하위 클래스에 영향을 줄 수 있습니다.
- 상속 기반이라 전략 패턴과 달리 런타임에 알고리즘을 교체하기 어렵습니다.
전략 패턴과의 비교
| 구분 | 템플릿 메서드 패턴 | 전략 패턴 |
|---|---|---|
| 관계 | 상속 | 조합 |
| 흐름 결정 | 상위 클래스가 고정 | Context가 전략 객체에 위임 |
| 변경 시점 | 컴파일 타임 (하위 클래스) | 런타임 (전략 교체) |
핵심 정리
템플릿 메서드 패턴은 변하지 않는 알고리즘의 뼈대는 상위 클래스에 두고, 변하는 세부 구현만 하위 클래스에 맡기는 패턴입니다.