Hello

[디자인 패턴] - Template Method

by 볼빵빵오춘기

Template Method

상위 클래스(추상 클래스)에서 알고리즘의 뼈대(템플릿)를 정의하고, 일부 구체적인 동작은 하위 클래스에서 구현(재정의) 하도록 만드는 패턴이다.

즉, 공통된 처리 흐름은 그대로 두고, 세부적인 구현은 서브클래스에서 다르게 정의할 수 있게 해주는 구조다.

 

예시 코드

// 템플릿 추상 클래스
abstract class Game {
    public final void play() {
        initialize();     // 공통 흐름
        startPlay();      // 서브클래스가 구현
        endPlay();        // 서브클래스가 구현
    }

    abstract void initialize();
    abstract void startPlay();
    abstract void endPlay();
}

// 구체적인 서브클래스
class Soccer extends Game {
    void initialize() {
        System.out.println("축구 게임 초기화 중...");
    }

    void startPlay() {
        System.out.println("축구 게임 시작!");
    }

    void endPlay() {
        System.out.println("축구 게임 종료.");
    }
}

class Basketball extends Game {
    void initialize() {
        System.out.println("농구 게임 준비 완료!");
    }

    void startPlay() {
        System.out.println("농구 게임 시작!");
    }

    void endPlay() {
        System.out.println("농구 게임 종료!");
    }
}

// 사용
public class TemplateMethodExample {
    public static void main(String[] args) {
        Game game = new Soccer();
        game.play();

        System.out.println("---");

        game = new Basketball();
        game.play();
    }
}

 

Template Method 패턴의 장점

코드 재사용 증가

알고리즘의 공통 구조를 상위 클래스에 두어 중복 코드 제거 가능하다.

 

변경에 유연

알고리즘 구조를 바꾸지 않고도 하위 클래스에서 세부 동작만 변경 가능하다.

 

알고리즘 구조 통제

전체 흐름은 고정된 틀로 유지하며 일부만 커스터마이징 가능하다.

 

OCP(개방-폐쇄 원칙)

알고리즘 확장이 하위 클래스 오버라이드로 가능하므로 기존 코드에 영향 없다.

 

Template Method 패턴의 단점

상속에 의존

클래스 간 강한 결합이 생겨 유연성이 떨어질 수 있다. (인터페이스 기반보다 제약 많음)

 

추상 클래스 남용 가능성

모든 상황에서 추상 클래스가 적절한 건 아니다.

 

알고리즘 흐름 이해 필요

템플릿 전체 흐름을 잘 알아야 유지보수에 실수 방지 가능하다.

 

Template Method 패턴은언제 사용하나?

알고리즘 구조는 동일하지만, 일부 단계만 다를 때

ex) 문서 출력 시 텍스트/이미지/표 처리 방식이 다를 때

 

공통된 로직이 있고, 그 흐름을 재사용하고 싶을 때

ex)  게임 로직의 초기화 → 실행 → 종료 구조

 

전체 알고리즘은 고정, 세부 동작은 커스터마이징해야 할 때

ex)  웹 프레임워크의 컨트롤러 요청 처리 흐름 등

 

정리하자면

알고리즘의 틀은 상위 클래스에 정의하고, f변화되는 부분만 하위 클래스에서 오버라이딩 하도록 하는 패턴이다.

블로그의 정보

Hello 춘기's world

볼빵빵오춘기

활동하기