Templatemethod


title: 2026-03-03 author: 강병호 (이름) date: 2026-03-03 (날짜) category: TIL/강병호/2026/03 (파일 경로 : TIL/{이름}/{연}/{월}) layout: post (자유) —

템플릿 메서드 패턴 (Template Method Pattern)

1. 개요

정의: 알고리즘의 구조를 메서드에 정의하고, 하위 클래스에서 알고리즘 구조의 변경 없이 특정 단계들을 재정의할 수 있게 하는 행위 디자인 패턴

핵심 역할: 전체적인 실행 흐름(뼈대)은 상위 클래스에서 결정하고, 구체적인 단계별 구현은 하위 클래스에 맡기는 방식

2. 구조 및 구성 요소

AbstractClass (추상 클래스): 템플릿 메서드를 정의하며, 알고리즘의 골격을 담당하는 메서드를 포함함

Template Method: 알고리즘의 뼈대가 되는 메서드로, 내부에서 추상 메서드들을 순서대로 호출함. 하위 클래스에서 오버라이딩하지 못하도록 final 키워드를 주로 사용함

ConcreteClass (구현 클래스): 상위 클래스의 추상 메서드를 구현하여 각 단계의 구체적인 로직을 완성함

3. 코드 예시

public abstract class Student {
    // 하위 클래스에서 구현해야 할 단계별 로직
    public abstract void study();
    public abstract void watchYoutube();
    public abstract void sleep();

    // 템플릿 메서드: 전체적인 실행 순서를 제어함
    public final void doDailyRoutine() {
        study();
        watchYoutube();
        sleep();
    }
}

class BackendStudent extends Student {
    @Override
    public void study() {
        System.out.println("영한님 JPA 강의를 수강합니다.");
    }

    @Override
    public void watchYoutube() {
        System.out.println("개발바닥 유튜브를 시청합니다.");
    }

    @Override
    public void sleep() {
        System.out.println("7시간 잠을 잡니다.");
    }
}

4. 장단점 분석

장점

  • 코드 중복 제거: 공통 로직을 상위 클래스에 관리하여 중복을 최소화함

  • 재사용성 향상: 동일한 알고리즘 구조를 가진 다양한 변형 클래스를 쉽게 추가할 수 있음

  • 확장성: 핵심 로직의 틀을 유지하면서 특정 부분만 유연하게 변경 가능함

단점

  • LSP(리스코프 치환 원칙) 위반 가능성: 하위 클래스가 상위 클래스의 의도를 잘못 이해하고 로직을 변경할 경우 문제가 발생할 수 있음

  • 높은 의존도: 상위 클래스의 설계 변경이 발생하면 이를 상속받은 모든 하위 클래스에 영향이 파급됨

  • 가독성 저하: 로직의 흐름이 상위 클래스에 있어, 하위 클래스 코드만 봐서는 전체 동작 방식을 파악하기 어려울 수 있음

results matching ""

    No results matching ""