✅ Part 1: 템플릿 메서드 패턴 (Template Method Pattern)
📌 1. 개념 요약
템플릿 메서드 패턴은 전체 처리 흐름(템플릿)은 부모 클래스에서 고정하고,
그 중 일부 세부 로직은 자식 클래스에서 구현하도록 만드는 패턴입니다.
즉, **"변하지 않는 틀은 위에 두고, 변화되는 부분만 아래에서 다룬다"**는 구조입니다.
🔧 2. 구조 및 키포인트
[추상 클래스]
+ 템플릿 메서드 정의 (final로 고정 가능)
+ 공통 메서드 구현
+ 추상 메서드 → 자식이 오버라이딩
[자식 클래스]
+ 추상 메서드를 오버라이딩 하여 변화되는 부분 구현
✅ 3. 예제: 결제 처리 시스템
🔹 추상 클래스: 결제 흐름 정의
abstract class PaymentService {
// 템플릿 메서드 (변경 금지)
public final void processPayment() {
validate(); // 공통 검증 로직
pay(); // 세부 구현 (자식이 담당)
notifyUser(); // 공통 알림 로직
}
protected void validate() {
System.out.println("[공통] 사용자 및 결제 정보 검증");
}
protected abstract void pay(); // 세부 구현은 자식이 함
protected void notifyUser() {
System.out.println("[공통] 결제 완료 알림 전송");
}
}
🔹 구현 클래스 1: 카드 결제
class CardPayment extends PaymentService {
@Override
protected void pay() {
System.out.println("[카드] 신용카드로 결제 수행");
}
}
🔹 구현 클래스 2: 카카오페이
class KakaoPay extends PaymentService {
@Override
protected void pay() {
System.out.println("[카카오] 카카오페이로 결제 수행");
}
}
🔹 실행 코드
public class Main {
public static void main(String[] args) {
PaymentService card = new CardPayment();
PaymentService kakao = new KakaoPay();
card.processPayment();
System.out.println("---");
kakao.processPayment();
}
}
🔸 출력 결과
[공통] 사용자 및 결제 정보 검증
[카드] 신용카드로 결제 수행
[공통] 결제 완료 알림 전송
---
[공통] 사용자 및 결제 정보 검증
[카카오] 카카오페이로 결제 수행
[공통] 결제 완료 알림 전송
🧠 4. 실무 적용 포인트
실무 상황 |
적용 방식 |
공통된 처리 흐름은 바뀌지 않음 |
추상 클래스에 고정된 템플릿 메서드 사용 |
일부 처리 방식은 구현마다 다름 |
자식 클래스에서 오버라이딩 |
예: 인증, 결제, 로깅, 데이터 처리 |
validate → handle → notify 구조 등 |
📝 5. 정리
항목 |
설명 |
설계 핵심 |
상위 클래스에서 고정된 흐름을 정의하고, 변화되는 부분은 하위 클래스에 위임 |
사용 도구 |
abstract class + final 템플릿 메서드 + 추상 메서드 |
효과 |
중복 제거, 확장성 향상, 유지보수 편의성 증가 |
댓글