어떤 작업을 처리하는 일부분을 서브 클래스로 캡슐화해 전체 일을 수행하는 구조는 바꾸지 않으면서 특정 단계에서 수행하는 내역을 바꾸는 패턴 전체적으로는 동일하면서 부분적으로 다른 구문으로 구성된 메소드의 코드 중복을 최소화 할 때 유용하다. 구조 예제 // AbstractClass.java public abstract class AbstractClass { protected abstract void hook1(); protected abstract void hook2(); public void templateMethod() { hook1(); hook2(); } } // ConcreteClass.java public class ConcreteClass extends AbstractClass { @Over..