본문 바로가기

IT/디자인 패턴

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

1. 템플릿 메소드 패턴이란?

알고리즘의 구조를 메소드에 정의하고, 하위 클래스에서 알고리즘 구조의 변경없이 알고리즘을 재정의 하는 패턴이다. 알고리즘이 단계별로 나누어 지거나, 같은 역할을 하는 메소드이지만 여러곳에서 다른형태로 사용이 필요한 경우 유용한 패턴이다. - GoF Design Patterns

참조 : https://yaboong.github.io/design-pattern/2018/09/27/template-method-pattern/
템플릿 메소드 패턴은 알고리즘의 흐름이 정해져 있지만, 특정 부분은 필요에 따라 변경해야 할 때, 사용합니다. 

 

2. 템플릿 메소드 패턴 예제

1) Template.java

public abstract class Template {

    final public void excute() {
        method1();
        //... 무언가 처리
        method2();
    }

    protected abstract void method1();

    protected abstract void method2();
}
excute 메소드에 고정된 처리 과정과 필요에 따라 처리해주어야할 메소드들(method1, method2)을 배치해줍니다.

2)  Concrete.java

public class Concrete extends Template {

    @Override
    protected void method1() {
        System.out.println("Hi !!");
    }

    @Override
    protected void method2() {
        System.out.println("Hello !!");
    }

}
method1과 method2를 오버라이딩합니다.
만약 또 다른 기능이 필요하다면, Template 추상클래스를 상속받아서 각 메소드들을 오버라이딩 해주면 됩니다.

3) Main.java

public class Main {

    public static void main(String[] args) {
        Concrete concrete = new Concrete();
        concrete.excute();

    }

}
excute 메소드를 실행하면, 정의해두었던 메소드의 흐름에 따라 처리가 진행됩니다.