본문 바로가기
Java

[Java] Interface/Abstract Class 실무 활용 패턴 - Part 1: 템플릿 메서드 패턴 (Template Method Pattern)

by clolee 2025. 5. 7.

✅ 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 템플릿 메서드 + 추상 메서드
효과 중복 제거, 확장성 향상, 유지보수 편의성 증가

댓글