본문 바로가기

자바

[디자인 패턴] 템플릿 메서드(Template Method) 패턴

템플릿 메서드(Template Method) 패턴이란?

템플릿 메서드 패턴은 수행하는 로직의 순서와 단계는 동일하지만 서브클래스에 그 세부 로직을 다르게 하는 디자인 패턴이다.

게임을 예시로 들면  종목은 다르지만 모든 게임은 initialize -> startPlay -> endPlay라는 순서가 동일한 play라는 행위를 수행하지만 어떤 게임(ex. Criket, Football)인지에 따라 그 세부 로직은 다르다.

 

abstract class Game {
    abstract void initialize();
    abstract void startPlay();
    abstract void endPlay();

    // 템플릿 메소드
    public final void play() {

        // 게임 초기화
        initialize();

        // 게임 시작
        startPlay();

        // 게임 종료
        endPlay();
    }
}

게임 종목이 달라도 모든 서브클래스는 play의 로직은 동일하게 수행하기 때문에 final로 선언된다.

 

class Cricket extends Game {

    @Override
    void initialize() {
        System.out.println("크리켓: 게임 초기화 중");
    }

    @Override
    void startPlay() {
        System.out.println("크리켓: 게임 시작!");
    }

    @Override
    void endPlay() {
        System.out.println("크리켓: 게임 종료!");
    }
}

class Football extends Game {

    @Override
    void initialize() {
        System.out.println("축구: 게임 초기화 중");
    }

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

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

 

구체적인 종목에 따라 세부로 직을 구현한다. 

public class TemplatePatternDemo {
    public static void main(String[] args) {

        Game game = new Cricket();
        game.play();
        System.out.println();

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