이번 포스팅도 마찬가지로 토비의 스프링 1권에서 소개하는 패턴 중 하나인 템플릿 패턴이다. 이는 3장 전체를 설명해주는 핵심 개념으로 JDBC 커넥션을 리팩토링하기 위해 소개하는 패턴이다.
상속을 통해 슈퍼클래스의 기능을 확장할 때 사용하는 가장 대표적인 방법. 변하지 않는 기능은 슈퍼클래스에 만들어두고 자주 변경되며 확장할 기능은 서브클래스에서 만들도록 한다. – 토비의 스프링 3.1
위에서 언급한 바와 같이 DB connection 은 고정하고, sql만 따로 처리하고 싶을때 활용할 수 있다.
간단한 예제를 통해 확인해보면 쉽게 이해할 수 있다. 아래는 구현하고자 하는 클래스의 UML이다.
public abstract class AbstractClass {
protected abstract void hook1();
protected abstract void hook2();
public void templateMethod() {
hook1();
hook2();
}
}
public class ConcreteClass extends AbstractClass {
@Override
protected void hook1() {
System.out.println("ABSTRACT hook1 implementation");
}
@Override
protected void hook2() {
System.out.println("ABSTRACT hook2 implementation");
}
}
위와 같이 추상클래스에서 hook1(), hook2() 메소드를 순차적으로 활용하는 templateMethod()를 구체화하고, 구체 클래스에서 각 hook1(), hook2()를 오버라이딩하여 원하는대로 동작할 수 있게 만들어주는 전략이다.