Contents
예제 템플릿 메서드 패턴(Template Method Pattern)은 알고리즘의 구조를 정의하면서 서브클래스가 알고리즘의 특정 단계를 구체적으로 구현할 수 있도록 허용합니다. 이를 통해 알고리즘의 뼈대는 고정되지만, 특정 단계의 구현은 서브클래스에서 다양하게 변경할 수 있습니다.
구성 요소 :
- 템플릿 메서드(Template Method): 알고리즘의 구조를 정의하는 메서드. 일반적으로 상위 클래스에서 구현되며, 서브클래스에서 오버라이드할 수 있는 여러 추상 메서드나 훅 메서드를 호출합니다.
- 추상 메서드(Abstract Methods): 서브클래스에서 구체적으로 구현해야 하는 메서드.
- 훅 메서드(Hook Methods): 서브클래스에서 필요에 따라 오버라이드할 수 있는 메서드. 기본 구현이 제공될 수도 있습니다.
예제
public abstract class Teacher implements TeacherAble {
protected void 입장하기() {
System.out.println("입장하기");
}
protected void 출석부르기() {
System.out.println("출석부르기");
}
protected abstract void 강의하기();
protected void 퇴장하기() {
System.out.println("퇴장하기");
}
public void 수업하기() {
입장하기();
출석부르기();
강의하기();
퇴장하기();
}
}
템플릿 메서드 (Template Method)
public void 수업하기()
- 알고리즘의 구조를 정의하는 메서드.
수업하기
메서드가 바로 템플릿 메서드로,입장하기
,출석부르기
,강의하기
,퇴장하기
라는 일련의 단계를 정의합니다. 이 메서드를 통해 전체적인 작업 흐름이 고정됩니다.
추상 메서드 (Abstract Method)
protected abstract void 강의하기()
- 서브클래스가 반드시 구현해야 하는 메서드.
강의하기
메서드는Teacher
클래스에서 구체적으로 구현되지 않고, 서브클래스에서 구체적인 행동을 정의해야 합니다. 이를 통해 서브클래스가 각기 다른 강의 방식을 구현할 수 있게 됩니다.
훅 메서드 (Hook Method)
protected void 입장하기()
,protected void 출석부르기()
,protected void 퇴장하기()
- 기본 구현을 제공하면서도 필요에 따라 서브클래스에서 오버라이드할 수 있는 메서드.
입장하기
,출석부르기
,퇴장하기
메서드는 기본 동작을 제공하고 있으며, 서브클래스에서 필요에 따라 이 메서드들을 오버라이드하여 다른 행동을 정의할 수 있습니다.
위의 예제처럼 추상 클래스를 작성하였다면 (과목명) Teacher 클래스를 여러개 작성할 때 추상클래스(Teacher)를 상속만 한다면, 훨씬 빠르고 간편하게 작성할 수 있습니다.
JavaTeacher 라는 클래스를 만든다고 가정하였을 때 :
public class JavaTeacher extends Teacher {
@Override
protected void 강의하기() {
System.out.println("자바 강의하기");
}
}
클래스 내용은 추상 메서드만 재정의 하였으며,
JavaTeacher 객체의 수업하기() 메서드를 메인 메서드에서 실행한다면 >>
public void 수업하기() {
입장하기();
출석부르기();
강의하기();
퇴장하기();
}
위 과정대로 시스템 콘솔창에 정상 출력되는 것을 확인할 수 있습니다.
강의하기() 라는 추상메서드는 해당 메서드를 구현한 구현체의 내용에 따라 달라질 수 있습니다.
출력 이미지

Share article