Java 템플릿 메서드 패턴(Template Method Pattern) 완벽 이해하기
Java 실무에서 프레임워크 내부 구조를 이해하려면 반드시 알아야 하는 패턴이 바로:
템플릿 메서드 패턴(Template Method Pattern)
입니다.
특히:
- Spring Framework
- JdbcTemplate
- HttpServlet
- JUnit
- 트랜잭션 처리
등에서 매우 많이 사용됩니다.
초보 시절에는 보통:
“부모 클래스가 흐름을 정의하는 패턴”
정도로만 이해하기 쉽습니다.
하지만 실제 템플릿 메서드 패턴은:
- 공통 흐름 재사용
- 중복 제거
- 확장 포인트 제공
- 프레임워크 설계
를 위한 매우 중요한 객체지향 패턴입니다.
이번 글에서는:
- 템플릿 메서드 패턴이 왜 필요한가
- 내부 구조
- Spring에서 어떻게 사용하는가
- 전략 패턴과 차이
- 실무 사용 시 주의점
까지 정리해보겠습니다.
1. 템플릿 메서드 패턴이란?
템플릿 메서드 패턴은:
전체 작업 흐름(Template)은 부모 클래스가 정의하고, 일부 세부 구현만 자식 클래스가 구현하는 패턴
입니다.
즉:
공통 흐름 고정
↓
일부 단계만 변경 가능
구조.
2. 왜 템플릿 메서드 패턴이 필요할까?
예를 들어 데이터 처리 로직.
안 좋은 예:
public void processA() {
connect();
executeA();
disconnect();
}
public void processB() {
connect();
executeB();
disconnect();
}
문제:
공통 코드 중복
발생.
3. 템플릿 메서드 패턴 핵심 아이디어
핵심은:
공통 흐름은 부모에
세부 구현은 자식에
분리하는 것입니다.
4. 기본 구조
public abstract class DataProcessor {
public final void process() {
connect();
execute();
disconnect();
}
private void connect() {
System.out.println("DB 연결");
}
private void disconnect() {
System.out.println("DB 종료");
}
protected abstract void execute();
}
5. 자식 클래스 구현
public class UserProcessor
extends DataProcessor {
@Override
protected void execute() {
System.out.println("사용자 처리");
}
}
6. 실행 흐름
DataProcessor processor =
new UserProcessor();
processor.process();
결과:
DB 연결
사용자 처리
DB 종료
7. 템플릿 메서드 패턴 핵심 구조
구조:
Template Method
↓
공통 흐름 정의
↓
Hook / Abstract Method
↓
자식 구현
8. 왜 final을 자주 사용할까?
public final void process()
이유:
전체 흐름 변경 방지
목적.
즉:
- 프레임워크 핵심 흐름 보호
가능.
9. 추상 메서드(Abstract Method)
protected abstract void execute();
의미:
세부 구현은 자식이 반드시 제공
해야 함.
10. Hook Method란?
선택적으로 오버라이딩 가능한 메서드.
예시:
protected void before() {
}
기본 구현 존재.
필요 시 자식에서 변경.
11. Hook Method 목적
확장 포인트 제공
입니다.
즉:
- 기본 동작 유지
- 일부 커스터마이징 허용
구조.
12. 템플릿 메서드 패턴 장점
| 장점 | 설명 |
| 중복 제거 | 공통 흐름 재사용 |
| 유지보수성 | 공통 로직 한 곳 관리 |
| 확장성 | 일부 단계만 교체 가능 |
| 구조 표준화 | 흐름 통일 가능 |
13. 템플릿 메서드 패턴 단점
| 단점 | 설명 |
| 상속 의존 | 강한 결합 |
| 클래스 증가 | 구조 복잡 가능 |
| 유연성 제한 | 런타임 교체 어려움 |
14. 전략 패턴과 차이
매우 중요합니다.
| 구분 | 템플릿 메서드 | 전략 패턴 |
| 기반 | 상속 | 조합 |
| 변경 방식 | 상속 오버라이딩 | 객체 교체 |
| 결합도 | 상대적으로 높음 | 낮음 |
| 런타임 교체 | 어려움 | 쉬움 |
15. 핵심 차이 요약
템플릿 메서드
“흐름은 고정”
전략 패턴
“행동 자체 교체”
16. Spring JdbcTemplate도 템플릿 패턴
대표 사례.
예시:
jdbcTemplate.query(...)
내부적으로:
Connection 생성
↓
Statement 실행
↓
Exception 처리
↓
Resource 정리
공통 흐름 제공.
사용자는:
쿼리 실행 부분만 구현
하면 됨.
17. Spring Framework 이름 자체가 힌트
대표 클래스:
JdbcTemplate
RedisTemplate
RestTemplate
전부:
Template Method Pattern
기반.
18. HttpServlet도 템플릿 패턴
대표 구조:
service()
↓
doGet()
doPost()
흐름은 부모(HttpServlet)가 정의.
세부 구현은 자식 Servlet 제공.
19. JUnit도 템플릿 패턴 구조
예시:
@BeforeEach
@Test
@AfterEach
실행 흐름은 프레임워크가 제어.
20. 템플릿 메서드와 프레임워크
프레임워크에서 중요한 개념:
제어의 역전(Inversion of Control)
즉:
- 사용자가 흐름 제어 X
- 프레임워크가 흐름 제어
구조.
템플릿 메서드 패턴이 이를 잘 구현.
21. Hollywood Principle
템플릿 패턴과 자주 연결되는 원칙.
“Don't call us,
we'll call you.”
즉:
- 사용자가 흐름 호출 X
- 프레임워크가 필요 시 호출
구조.
22. 템플릿 메서드와 상속
핵심 기반:
상속 + 오버라이딩
입니다.
즉:
- 부모 흐름 유지
- 자식 일부 변경
구조.
23. 실무에서 자주 하는 실수
1) 템플릿 메서드 남용
모든 로직을 상속 구조로 설계.
→ 유연성 감소.
2) 부모 클래스 비대화
God Abstract Class
문제 발생 가능.
3) 너무 깊은 상속 구조
AbstractBaseService
↓
AbstractOrderService
↓
OrderService
유지보수 어려움.
24. 현대 실무는 전략 패턴 선호 경향
최근은:
상속보다 조합(Composition)
선호.
즉:
- 전략 패턴
- DI
- 함수형 방식
많이 사용.
25. 그래도 템플릿 패턴이 중요한 이유
프레임워크 내부는 여전히:
템플릿 메서드 패턴
매우 많이 사용.
특히:
- 공통 흐름 관리
- 리소스 정리
- 트랜잭션 처리
등에서 강력.
26. 실무에서 적합한 상황
추천 상황:
| 상황 | 적합 여부 |
| 공통 흐름 동일 | 매우 좋음 |
| 일부 단계만 변경 | 매우 좋음 |
| 프레임워크 구조 | 매우 좋음 |
| 런타임 교체 필요 | 전략 패턴 추천 |
27. 템플릿 메서드와 OCP (개방-폐쇄 원칙)
새 기능 추가 시:
새 자식 클래스 추가
만 하면 가능.
즉:
기존 흐름 수정 최소화
가능.
28. 템플릿 메서드 패턴 진짜 목적
핵심 목적은:
공통 흐름 재사용
+
확장 포인트 제공
입니다.
즉:
- 중복 제거
- 구조 통일
- 유지보수성 향상
을 위한 패턴.
29. 실무 관점 핵심 정리
템플릿 메서드 패턴
“흐름을 프레임워크가 제어”
전략 패턴
“행동을 객체로 교체”
30. 정리
템플릿 메서드 패턴(Template Method Pattern)은 단순 디자인 패턴이 아닙니다.
실제로는:
- Spring Template 구조
- 프레임워크 설계
- 공통 흐름 재사용
- 제어의 역전(IoC)
과 깊게 연결되는 매우 중요한 패턴입니다.
특히 실무에서는:
- JdbcTemplate
- HttpServlet
- 트랜잭션 처리
- 공통 로직 관리
등에서 매우 많이 사용됩니다.
다음 글에서는:
JVM 구조 이해
를 ClassLoader, Execution Engine, Runtime Data Area까지 포함해서 깊게 정리해보겠습니다.
'language > java' 카테고리의 다른 글
| Java ClassLoader 동작 원리 완벽 이해하기 (0) | 2026.05.26 |
|---|---|
| Java JVM 구조 이해 완벽 정리 (0) | 2026.05.26 |
| Java 전략 패턴(Strategy Pattern) 완벽 이해하기 (0) | 2026.05.22 |
| Java Builder Pattern 완벽 이해하기 (0) | 2026.05.22 |
| Java 불변 객체(Immutable Object) 완벽 이해하기 (0) | 2026.05.22 |
댓글