세 패턴 모두 "유사한 알고리즘 구조를 갖고, 일부 행동은 나중에 결정한다"는 공통점 갖고 있는 패턴이다.
하위 클래스에서 구현할 수 있는 메서드로 추상 메서드와 Hook 메서드가 존재한다.
Hook 메서드는 선택적으로 오버라이딩 할 수 있는 메서드를 뜻한다.
제어의 흐름은 부모 클래스에서 고정되어 있고, 일부 로직(행동)만 하위 클래스에서 정의할 수 있다.
전략을 동적으로 바꿔야 할 때 사용한다.
| 항목 | 템플릿 메서드 | 전략 패턴 |
|---|---|---|
| 핵심 개념 | 부모 클래스가 알고리즘의 틀 정의하고 일부만 하위 클래스에 위임 | 알고리즘을 인터페이스로 분리하고 외부에서 주입 |
| 확장 방식 | 상속 | composition |
| 실행 시점 변경 가능? | ❌ 컴파일 타임 구조 고정 | ✅ 런타임에 전략 변경 가능 |
| 적용 예 | HttpServlet.service(), JUnit의 TestCase 등 | Comparator, Spring의 Policy 전략 등 |
| 단점 | 상속에 의존 → 유연성 낮음 | 객체 수 많아질 수 있음 |
| 대표 의도 | 공통 알고리즘 구조를 고정, 일부만 다르게 | 다양한 알고리즘을 유연하게 교체 |
<결론>
알고리즘 틀 유지하고, 일부만 변경, 고정된 흐름 -> 템플릿 메서드.
유연하고 바꿀 수 있는 전략 필요 -> 전략 패턴.
| 항목 | 템플릿 메서드 | 템플릿 콜백 |
|---|---|---|
| 핵심 개념 | 부모 클래스가 알고리즘을 고정하고 일부만 하위 클래스에 위임 | 메서드 흐름은 고정하되, 콜백으로 핵심 로직 전달 |
| 구현 방식 | 클래스 상속, 메서드 재정의 | 함수형 인터페이스 또는 람다 전달 |
| Java 버전 | 자바 전통적인 객체 지향 방식 | Java 8 이상 (람다식 활용) |
| 예시 | AbstractController 등 | JdbcTemplate.execute(), 람다 기반 콜백 |
| 유연성 | ❌ 고정 구조, 재정의 필요 | ✅ 간결하고 유연, 코드 중복 줄이기 |
| 결합도 | 클래스 간 결합 높음 | 결합도 낮음 (함수 단위 분리) |
<결론>
상속의 한계 피하려면 템플릿 콜백이 더 현대적인 방식.
| 항목 | 전략 패턴 | 템플릿 콜백 |
|---|---|---|
| 구조 방식 | 인터페이스 기반의 객체 위임 | 함수형 콜백 전달 |
| 전략/로직 제공 방식 | 명시적인 전략 객체 | 람다식 등 간단한 익명 함수 |
| 전통성 | OOP 전통적 방식 | 함수형, Java 8 이후 등장 |
| 코드 양 | 클래스 수 증가 가능 | 코드 간결함, 재사용성 좋음 |
| 사용 예 | Sorting 정책, 인증 방식 | JdbcTemplate, TransactionTemplate 등 |
| 결합도 | 낮음 (구성 기반) | 매우 낮음 (함수 전달) |
<결론>
둘 다 유연하지만,
명확한 전략 객체 구조 필요 시 -> 전략 패턴.
단순하고 유연한 작업 위임, 람다 -> 템플릿 콜백.