Design Pattern | Template Method Pattern (템플릿 메소드 패턴)

Template Method 패턴이란?

  • 템플릿은 일정한 문자나 모형을 새겨 만든 주형이다. Template를 보면 어떤 문자를 쓸 수 있는지는 알 수 있지만, 실제로 어떤 문자가 되는지는 구체적인 필기 도구가 정해지지 않으면 모른다.
  • Template Method 패턴은, 슈퍼 클래스로 처리의 틀을 정해서 서브 클래스로 그 구체적 내용을 정하는 방식이다.
  • GoF의 디자인 패턴에서는 행위에 대한 디자인 패턴으로 분류된다.

Template Method 패턴의 예제 프로그램

몬스터의 이름, 공격력, 수비력을 표시하는 예제 프로그램이다.

Class Diagram
Iterator Pattern

1. AbstractMonster 클래스

템플릿이 되는 클래스이다.

AbstractMonster.java

package com.devkuma.designpattern.behavioral.template;

public abstract class AbstractMonster {

    public String name;

    public abstract int getAttack();

    public abstract int getDefense();

    public final void showInfo() {
        System.out.print("이름 : ");
        System.out.println(name);
        System.out.print("공격력 : ");
        System.out.println(getAttack());
        System.out.print("수비력 : ");
        System.out.println(getDefense());
        System.out.println();
    }
}

2. Slime 클래스

AbstractMonster 클래스로 정의된 메서드를 구현하는 클래스이다.

Slime.java

package com.devkuma.designpattern.behavioral.template;

public class Slime extends AbstractMonster {

    public Slime(String name) {
        this.name = name;
    }

    public int getAttack() {
        return 15;
    }

    public int getDefense() {
        return 10;
    }
}

3. Dragon 클래스

AbstractMonster 클래스로 정의된 메서드를 구현하는 클래스이다.

Dragon.java

package com.devkuma.designpattern.behavioral.template;

public class Dragon extends AbstractMonster {

    public Dragon(String name) {
        this.name = name;
    }

    public int getAttack() {
        return 60;
    }

    public int getDefense() {
        return 45;
    }
}

4. Main 클래스

메인 처리를 실행하는 클래스이다.

Main.java

package com.devkuma.designpattern.behavioral.template;

public class Main {
    public static void main(String[] args) {
        AbstractMonster slime = new Slime("슬라임");
        AbstractMonster dragon = new Dragon("드래곤");
        slime.showInfo();
        dragon.showInfo();
    }
}

5. 실행 결과

이름 : 슬라임
공격력 : 15
수비력 : 10

이름 : 드래곤
공격력 : 60
수비력 : 45

Template Method 패턴의 장점

Template Method 패턴에서는 슈퍼 클래스의 템플릿 메소드로 알고리즘이 작성되어 있으므로, 서브 클래스측에서는 알고리즘을 일일이 작성할 필요가 없어진다.
예를 들면, Template Method 패턴을 사용하지 않고, 비슷한 클래스, Class1, Class2, Class3…를 작성되어 있는 경우는 Class1에 버그가 발견되면, 그 버그를 Class2, Class3…에서도 수정해야만 한다.
Template Method 패턴으로 작성되어 있다면, 템플릿 메소드에 버그가 발견된 경우에서도 템플릿 메소드만 수정하면 된다.