핵심 인사이트 (3줄 요약)
- 알고리즘의 골격(Structure)을 부모 클래스에 정의하고, 구체적인 단계는 자식 클래스에서 오버라이딩함.
- "제어의 역전(IoC)" 원리를 적용하여, 부모가 자식의 메서드를 호출하는 "할리우드 원칙"을 실현.
- 중복 코드를 부모 클래스로 집약하고 변하는 부분만 분리하여 코드 재사용성을 극대화함.
Ⅰ. 개요 (Context & Background)
여러 클래스에서 유사한 흐름으로 동작하는 알고리즘이 있을 때, 이를 각자 구현하면 중복 코드가 발생하고 로직 수정 시 모든 클래스를 수정해야 하는 유지보수 문제가 생긴다. **템플릿 메서드 패턴(Template Method Pattern)**은 알고리즘의 변하지 않는 공통 흐름을 부모 클래스(추상 클래스)의 '템플릿 메서드'에 담고, 변하는 부분만 자식 클래스에서 채우도록 하여 설계의 일관성을 보장하는 패턴이다.
Ⅱ. 아키텍처 및 핵심 원리 (Deep Dive)
템플릿 메서드 패턴은 **AbstractClass(추상 클래스)**와 **ConcreteClass(구체 클래스)**로 구성된다.
+-----------------------------+
| AbstractClass |
+-----------------------------+
| + templateMethod() [Final] | <--- 알고리즘의 고정된 흐름 정의
| # primitiveOperation1() | <--- 추상 메서드 (자식에서 구현 필수)
| # primitiveOperation2() |
| # hook() | <--- 훅 메서드 (선택적 오버라이딩)
+-----------------------------+
^
|
+-----------------------------+
| ConcreteClass |
+-----------------------------+
| # primitiveOperation1() |
| # primitiveOperation2() |
+-----------------------------+
- Template Method: 부모 클래스에 정의되며,
primitiveOperation들을 호출하는 고정된 실행 순서를 가진다. 외부에서 수정하지 못하도록 보통final로 선언한다. - Primitive Operation: 자식 클래스에서 반드시 구현해야 하는 구체적인 단계들이다.
- Hook: 부모 클래스에 기본 구현이 되어 있거나 비어 있는 메서드로, 자식 클래스에서 알고리즘의 특정 지점에서 추가 제어를 하고 싶을 때 선택적으로 오버라이딩한다.
Ⅲ. 융합 비교 및 다각도 분석 (Comparison & Synergy)
| 비교 항목 | 템플릿 메서드 패턴 | 전략 패턴 (Strategy) | 팩토리 메서드 (Factory Method) |
|---|---|---|---|
| 재사용 기법 | 상속 (Inheritance) | 합성 (Composition) | 상속 (객체 생성에 특화) |
| 로직 제어 | 부모 클래스가 전체 흐름 제어 | 클라이언트가 전략 객체 교체 | 부모가 생성 시점 결정, 자식이 객체 결정 |
| 유연성 | 컴파일 타임에 결정 (정적) | 런타임에 결정 (동적) | 컴파일 타임에 결정 (정적) |
| 코드 관계 | 부모-자식 간 강결합 | 인터페이스를 통한 느슨한 결합 | 부모-자식 간 강결합 |
Ⅳ. 실무 적용 및 기술사적 판단 (Strategy & Decision)
- 적용 시점: 여러 알고리즘이 거의 동일한 단계를 거치지만 일부 단계만 다를 때, 또는 프레임워크를 설계할 때 핵심 뼈대를 보호하고 확장 포인트만 제공하고 싶을 때 적용한다.
- 기술사적 판단: 템플릿 메서드 패턴은 **IoC(제어의 역전)**의 가장 고전적인 형태이다. Spring의
JdbcTemplate,RestTemplate등 수많은 템플릿 클래스들이 이 패턴의 사상을 계승하고 있다. 다만, 자식 클래스가 부모의 내부 구현에 너무 의존하게 될 위험이 있으므로(상속의 단점), 상속 단계가 너무 깊어지지 않도록 주의해야 한다.
Ⅴ. 기대효과 및 결론 (Future & Standard)
템플릿 메서드 패턴을 통해 개발자는 알고리즘의 공통 로직을 한곳에서 관리할 수 있으며, 이는 버그 수정 및 기능 개선 시의 전파 범위를 최소화한다. 이는 "변하는 것과 변하지 않는 것의 분리"라는 소프트웨어 공학의 핵심 가치를 실현하며, 현대 아키텍처에서도 프레임워크의 확장성 모델로서 표준적으로 자리 잡고 있다.
📌 관련 개념 맵 (Knowledge Graph)
- Hollywood Principle: "먼저 연락하지 마세요, 저희가 연락하겠습니다." (부모가 자식을 호출)
- Abstract Class: 패턴 구현을 위한 필수적인 프로그래밍 언어 기능.
- Template Callback Pattern: 전략 패턴과 결합하여 상속 대신 익명 내부 클래스/람다를 사용하는 변형 패턴(Spring 다수 활용).
👶 어린이를 위한 3줄 비유 설명
- 라면 끓이는 '기본 요리법'은 똑같아요. (물 끓이기 -> 면 넣기 -> 스프 넣기)
- 어떤 라면은 마지막에 '계란'을 넣고, 어떤 라면은 '치즈'를 넣는 차이만 있는 거예요.
- 엄마가 알려준 '요리법(템플릿)'을 따르되, 마지막 재료만 내가 원하는 대로 바꾸는 방법이랍니다.