템플릿 메소드(template method) 패턴이란?

템플릿 메소드 패턴

  • 상속을 통해 슈퍼클래스의 기능을 확장할 때 사용하는 가장 대표적인 방법이다.

  • 변하지 않는 기능은 슈퍼클래스에 만들어두고
    자주 변경되며 확장할 기능은 서브클래스에서 만들도록 한다.

  • 슈퍼클래스에서는 미리 추상 메소드 또는 오버라이드 가능한 메소드를 정의해두고
    이를 활용해 코드의 기본 알고리즘을 담고 있는 템플릿 메소드를 만든다.

  • 슈퍼클래스에서 디폴트 기능을 정의해두거나 비워뒀다가
    서브클래스에서 선택적으로 오버라이드 할 수 있도록 만들어둔 메소드를 훅(hook) 메소드라고 한다.

  • 서브클래스에서는 추상 메소드를 구현하거나,
    훅 메소드를 오버라이드하는 방법을 이용해 기능의 일부를 확장한다.


package com.navercorp.linepay.centralapi.controller.v3.pay;

public abstract class Super {
    public void templateMethod() {
        /*
        기본 알고리즘 골격을 담은 메소드를 템플릿 메소드라 부른다.
        템플릿 메소드는 서브 클래스에서 오버라이드하거나 구현할 메소드를 사용한다.
         */
        // Default Algorithm
        hookMethod();
        abstractMethod();
    }
    protected void hookMethod() { } // 선택적으로 오버라이드 가능한 훅 메소드
    public abstract void abstractMethod(); // 서브 클래스에서 반드시 구현해야하 하는 추상 메소드
}
public class Sub1 extends Super {
    /*
    슈퍼클래스의 메소드를 오버라이드하거나 구현해서 기능을 확장한다.
    다양한 확장 클래스를 만들 수 있다.
     */
    protected void hookMethod() {

    }

    public void abstractMethod() {

    }
}