템플릿 메소드 패턴이란?
템플릿 메서드(Template Method) 패턴은 여러 클래스에서 공통으로 사용하는 메서드를 템플릿화 하여 상위 클래스에서 정의하고, 하위 클래스마다 세부 동작 사항을 다르게 구현하는 패턴이다.
즉, 변하지 않는 기능(템플릿)은 상위 클래스에 만들어두고 자주 변경되며 확장할 기능은 하위 클래스에서 만들도록 하여, 상위의 메소드 실행 동작 순서는 고정하면서 세부 실행 내용은 다양화 될 수 있는 경우에 사용된다.
템플릿 메소드 패턴은 상속이라는 기술을 극대화하여, 알고리즘의 뼈대를 맞추는 것에 초점을 둔다. 이미 수많은 프레임워크에서 많은 부분에 템플릿 메소드 패턴 코드가 우리도 모르게 적용되어 있다.
템플릿 메소드 구조

템플릿 메서드를 정의하는 클래스
하위 클래스에 공통 알고리즘을 정의하고 하위 클래스에서 구현될 기능을 primitive 메서드 또는 hook 메서드로 정의하는 클래스
물려받은 primitive 메서드 또는 hook 메서드를 구현하는 클래스
상위 클래스에 구현된 템플릿 메서드의 일반적인 알고리즘에서 하위 클래스에 적합하게 primitive 메서드나 hook 메서드를 오버라이드하는 클래스
템플릿 메소드 코드
//추상 클래스 선생님
abstract class Teacher{
public void start_class() {
inside();
attendance();
teach();
outside();
}
// 공통 메서드
public void inside() {
System.out.println("선생님이 강의실로 들어옵니다.");
}
public void attendance() {
System.out.println("선생님이 출석을 부릅니다.");
}
public void outside() {
System.out.println("선생님이 강의실을 나갑니다.");
}
// 추상 메서드
abstract void teach();
}
// 국어 선생님
class Korean_Teacher extends Teacher{
@Override
public void teach() {
System.out.println("선생님이 국어를 수업합니다.");
}
}
//수학 선생님
class Math_Teacher extends Teacher{
@Override
public void teach() {
System.out.println("선생님이 수학을 수업합니다.");
}
}
//영어 선생님
class English_Teacher extends Teacher{
@Override
public void teach() {
System.out.println("선생님이 영어를 수업합니다.");
}
}
public class Main {
public static void main(String[] args) {
Korean_Teacher kr = new Korean_Teacher(); //국어
Math_Teacher mt = new Math_Teacher(); //수학
English_Teacher en = new English_Teacher(); //영어
kr.start_class();
System.out.println("----------------------------");
mt.start_class();
System.out.println("----------------------------");
en.start_class();
}
}

[Design Pattern] 템플릿 메서드 패턴이란
💠 템플릿 메소드(Template Method) 패턴 - 완벽 마스터하기