템플릿 메서드 패턴 ( Template Method Pattern )

템플릿 메서드 패턴은 여러 클래스에서 공통으로 사용하는 메서드를 상위 클래스에서 정의하고,

하위 클래스마다 다르게 구현해야 하는 세부적인 사항을 하위 클래스에서 구현하는 패턴을 말합니다.


코드의 중복 제거를 위해 흔히 사용하는 리팩토링 기법이죠.


상위 클래스에서 정의하는 부분은 템플릿 메서드라 하고,

템플릿 메서드에서 하위 클래스마다 다르게 작성되야 하는 일부분을 훅이라 합니다.

( 용어가 중요한 것은 아니지만.... )


웹 개발을 하다보면 HTML 문서에다가 서버로부터 받은 값을 변수에 할당하곤 하는데,

HTML을 템플릿 메서드, 템플릿 변수를 훅으로 대응할 수 있을 것 같습니다.





코드를 보면 더 쉽게 이해가 될 것습니다.

public class Parent {
// 자식에서 공통적으로 사용하는 부분( someMethod )를 템플릿 메서드라 한다.
public void someMethod(){
System.out.println("부모에서 실행되는 부분 - 상");

// 자식에서 구현해야 할 부분을 훅 메서드라 한다.
hook();

System.out.println("부모에서 실행되는 부분 - 하");
}

public void hook(){};
}
public class ChildA extends Parent {
@Override
public void hook(){
System.out.println("Child A 에서 hook 구현");
}
}
public class ChildB extends Parent{
@Override
public void hook(){
System.out.println("Child B 에서 hook 구현");
}
}
public class Client {
public static void main(String args[]){
ChildA childA = new ChildA();
childA.someMethod();

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

ChildB childB = new ChildB();
childB.someMethod();
}
}


Parent 클래스에 정의된 someMethod()는 ChildA, ChildB에서 공통으로 사용하는 부분이고,

hook() 메서드만 ChildA, ChildB에서 따로 구현해줘야 하는 부분입니다.






이상으로 템플릿 메서드 패턴이 무엇인지에 대해 알아보았습니다.


Java에서도 여러 디자인 패턴을 사용하고 있는데 템플릿 메서드 패턴을 사용하고 있는 API는 다음과 같으며, 참고하시면 좋을 것 같습니다. ( 참고링크 )


Template method

(recognizeable by behavioral methods which already have a "default" behaviour defined by an abstract type)