1. 템플릿 메서드 패턴이란?
템플릿 메서드 패턴(Template Method Pattern)은 객체지향 설계에서 상위 클래스에서 알고리즘의 구조를 정의하고, 그 알고리즘의 특정 단계는 하위 클래스에서 구현하도록 하는 행동 패턴입니다. 이 패턴을 사용하면 알고리즘의 구조를 유지하면서, 알고리즘의 특정 단계에서의 행동을 서브클래스에서 변경할 수 있습니다.
2. 템플릿 메서드 패턴 예제
다음 예제와 같이 여러 과목의 선생님이 있다.
각각 입장, 출석, 강의, 퇴장 메서드가 존재한다.
public class HTMLTeacher{
public void 입장하기(){
System.out.println("입장하기");
}
public void 출석부르기(){
System.out.println("출석부르기");
}
public void HTML강의하기(){
System.out.println("HTML강의하기");
};
public void 퇴장하기(){
System.out.println("퇴장하기");
}
}
public class JavaTeacher{
public void 입장하기(){
System.out.println("입장하기");
}
public void 출석부르기(){
System.out.println("출석부르기");
}
public void 자바강의하기(){
System.out.println("자바강의하기");
};
public void 퇴장하기(){
System.out.println("퇴장하기");
}
}
public class PythonTeacher{
public void 입장하기(){
System.out.println("입장하기");
}
public void 출석부르기(){
System.out.println("출석부르기");
}
public void 파이썬강의하기(){
System.out.println("파이썬강의하기");
};
public void 퇴장하기(){
System.out.println("퇴장하기");
}
}이처럼 입장하기, 출석부르기, 퇴장하기 메서드의 경우 동일하지만
강의하기의 경우는 과목명이 다르다.
현재는 3명의 선생님이 계시지만 100명, 200명이 넘어간다면 이를 하나하나 코드를 칠 순 없다.
이를 간편하게 코드를 찍어내기 위해 템플릿 메서드 패턴을 이용하는 것이다.
다음 코드를 통해 템플릿을 만들어 선생님을 추상화시킨다.
public abstract class Teacher {
public void 수업하기(){
입장하기();
출석부르기();
강의하기();
퇴장하기();
}
public void 입장하기(){
System.out.println("입장하기");
}
public void 출석부르기(){
System.out.println("출석부르기");
}
public abstract void 강의하기();
public void 퇴장하기(){
System.out.println("퇴장하기");
}
}강의하기 외의 메서드는 직접 지정해줘 자식 클래스에서 굳이 코드를 칠 필요가 없어졌다.
하지만 강의하기는 과목명이 각각 다르기 때문에 자식 클래스에서 코드를 완성 시킬 수 있도록 비워 놓는다.
그리고 예시로 JavaTeacher의 코드를 확인해보자
public class JavaTeacher extends Teacher{
@Override
public void 강의하기() {
System.out.println("자바 강의하기");
}
}이렇게 Teacher를 extends 하고 강의하기만 오버라이딩 하여 강의하기를 마저 완성시킨다.
Share article