1. 개요
템플릿 메서드 패턴은 알고리즘의 뼈대를 정의하고, 세부 구현은 서브클래스에서 결정하도록 만드는 디자인 패턴입니다. 동일한 구조를 유지하면서도 일부 기능을 커스터마이징할 수 있어 코드 재사용성과 유지보수성을 높입니다. 📜
2. 개념
이 패턴의 핵심은 상위 클래스에서 템플릿 메서드를 정의하고, 하위 클래스가 이 메서드에서 호출되는 세부 작업을 구현하도록 강제하는 것입니다.
구성 요소:
- Abstract Class: 템플릿 메서드를 정의하고 공통 동작(선택적으로 구현)을 제공합니다.
- Concrete Class: 구체적인 작업을 구현하며, 템플릿 메서드에서 호출됩니다.
템플릿 메서드를 사용하면 중복 코드를 최소화하면서도 공통된 알고리즘 구조를 보장할 수 있습니다. 🛠️
3. 예제
C#에서 템플릿 메서드 패턴을 사용한 간단한 예제입니다. "게임 캐릭터가 특정 행동을 수행"하는 상황을 가정합니다.
using System;
// Abstract Class
abstract class GameCharacter
{
// Template Method
public void PerformAction()
{
StartAction();
ExecuteAction();
EndAction();
}
protected abstract void StartAction();
protected abstract void ExecuteAction();
protected abstract void EndAction();
}
// Concrete Class 1
class Warrior : GameCharacter
{
protected override void StartAction()
{
Console.WriteLine("전사가 무기를 준비합니다.");
}
protected override void ExecuteAction()
{
Console.WriteLine("전사가 적을 공격합니다.");
}
protected override void EndAction()
{
Console.WriteLine("전사가 무기를 정리합니다.");
}
}
// Concrete Class 2
class Mage : GameCharacter
{
protected override void StartAction()
{
Console.WriteLine("마법사가 주문을 외우기 시작합니다.");
}
protected override void ExecuteAction()
{
Console.WriteLine("마법사가 강력한 마법을 발사합니다.");
}
protected override void EndAction()
{
Console.WriteLine("마법사가 마법책을 닫습니다.");
}
}
class Program
{
static void Main(string[] args)
{
GameCharacter warrior = new Warrior();
GameCharacter mage = new Mage();
warrior.PerformAction();
Console.WriteLine();
mage.PerformAction();
}
}
출력:
전사가 무기를 준비합니다.
전사가 적을 공격합니다.
전사가 무기를 정리합니다.
마법사가 주문을 외우기 시작합니다.
마법사가 강력한 마법을 발사합니다.
마법사가 마법책을 닫습니다.
이 코드에서 PerformAction 메서드는 알고리즘의 뼈대를 정의하며, 각 단계는 하위 클래스에서 구체화됩니다. 🛠️
4. 특이점 및 주의점
특이점
- 알고리즘의 구조를 유지하면서도 각 단계의 구현을 유연하게 바꿀 수 있습니다.
- 코드 중복을 방지하고, 알고리즘의 흐름을 명확하게 표현합니다.
주의점
- 서브클래스가 너무 많아지면 관리가 어려워질 수 있습니다. 이를 방지하려면 적절한 계층 구조를 설계해야 합니다.
- 알고리즘이 너무 단순하거나 변경 가능성이 적다면 오히려 과한 설계가 될 수 있습니다. 🚩
5. 결론
템플릿 메서드 패턴은 알고리즘의 뼈대를 유지하면서도 세부적인 구현을 유연하게 변경해야 할 때 유용합니다. 특히 게임, 웹 애플리케이션 등 다양한 도메인에서 반복적인 로직을 구조화하는 데 효과적입니다.
6. 관련 링크
반응형
'Workspace > Design Pattern' 카테고리의 다른 글
상태 패턴 (State Pattern): 객체의 상태에 따라 행동을 다르게 구현하기 (2) | 2025.01.22 |
---|---|
플라이웨이트 패턴 (Flyweight Pattern): 메모리 절약을 위한 객체 재사용 설계 (0) | 2025.01.22 |
미디에이터 패턴 (Mediator Pattern): 객체 간의 복잡한 상호작용을 단순화하기 (0) | 2025.01.22 |
빌더 패턴 (Builder Pattern): 객체 생성의 유연함을 더하다 (0) | 2025.01.22 |
프록시 패턴 (Proxy Pattern): 스마트한 대리자 역할 (0) | 2025.01.22 |