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

오진서·2025년 6월 18일
0

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

상위 클래스(추상 클래스)에서 알고리즘의 골격(일련의 처리 순서)을 정의하고, 그 구체적인 세부 단계(메서드)는 하위 클래스가 구현하도록 일부만 추상화해서 재정의할 수 있게 만든 행위(Behavioral) 디자인 패턴이다.

주요 목적

공통된 로직의 흐름(순서)을 상위 클래스에 정의하고,
변경될 수 있는 부분만 하위 클래스에 위임하여,
코드 중복을 줄이고, 일관성 있게 알고리즘을 재사용하는 것

예시 구조

using System;

abstract class AbstractClass
{
    public void TemplateMethod()
    {
        StepOne();
        StepTwo(); // 하위 클래스에서 오버라이드 가능
        StepThree();
    }

    protected void StepOne()
    {
        Console.WriteLine("Step One (공통 구현)");
    }

    protected abstract void StepTwo(); // 하위 클래스에 위임

    protected void StepThree()
    {
        Console.WriteLine("Step Three (공통 구현)");
    }
}

class ConcreteClass : AbstractClass
{
    protected override void StepTwo()
    {
        Console.WriteLine("Step Two (구체 클래스 구현)");
    }
}

class Program
{
    static void Main()
    {
        AbstractClass instance = new ConcreteClass();
        instance.TemplateMethod();
    }
}

템플릿 메서드의 장점

1. 코드 중복 제거

알고리즘 공통된 흐름을 상위 클래스에 정의함으로써, 중복 코드를 하위 클래스에서 제거할 수 있다.

예: 여러 종류의 파일 업로더에서 저장 흐름은 같고, 저장 방식만 다르다면 상위 클래스에 템플릿 정의.

2. OCP 준수

기존 코드(상위 클래스)를 변경하지 않고, 새로운 기능(하위 클래스) 확장이 가능하다.

3. 제어의 역전(IoC)

일반적인 구조
보통은 하위 클래스나 호출자가 전체 흐름을 제어한다.

var a = new StepOne();
var b = new StepTwo();
a.Execute();
b.Execute();

-> 호출자가 로직의 흐름을 직접 제어.

템플릿 메서드 패턴

AbstractClass process = new ConcreteClass();
process.TemplateMethod();

상위 클래스가 전체 흐름을 제어한다.
-> 제어권이 하위에서 상위로 역전된 구조. 유지보수 하기 좋은 구조.

템플릿 메서드의 단점

  1. 클래스 수 증가

  2. 상속의 한계
    템플릿 메서드는 상속을 기반으로 하기 때문에, 유연성이 떨어질 수 있다.

언제 쓰면 좋을까?

로직 흐름은 동일하고, 일부 단계의 로직이 변경될 때
여러 비슷한 클래스들이 같은 로직 순서를 공유할 필요가 있을 때

핵심은 "일련의 로직 순서를 고정하고, 세부 구현을 위임한다"는 점이다.

profile
안녕하세요

0개의 댓글