6-1. 템플릿 메서드 장점
추상클래스에서 템플릿 메서드를 구현해
상위 추상클래스로 로직을 공통화하여 코드의 중복을 줄일 수 있다.
출처 )
6-2. 예시 코드
teacher 패키지를 만들어서 각 과목별 선생님을 먼저 만들어준다.

package ex05.teacher;
public class HTMLTeacher extends Teacher{
public void 강의하기(){
System.out.println("HTML 강의하기");
}
}
package ex05.teacher;
public class JavaTeacher extends Teacher{
public void 강의하기(){
System.out.println("자바강의하기");
}
}
package ex05.teacher;
public class PythonTeacher extends Teacher{
public void 강의하기(){
System.out.println("파이썬 강의하기");
}
}
package ex05.teacher;
// 템플릿
public abstract class Teacher {
public void 수업하기(){
입장하기();
출석부르기();
강의하기();
퇴장하기();
}
public void 입장하기(){
System.out.println("입장하기");
}
public void 출석부르기(){
System.out.println("출석부르기");
}
public abstract void 강의하기(); // 자식은 강의하기만 재정의 하면 된다.
public void 퇴장하기(){
System.out.println("퇴장하기");
}
}
위 코드는 템플릿 매서드 패턴을 적용한 teacher 추상 클래스다.
강의하기 매서드만 abstract 매서드로 만들어서 teacher 추상 클래스를 상속받은
자식 클래스들이 강의하기 매서드만 재정의 하도록 할 수 있다.
(→ 자바선생님은 강의하기 매서드를 자바 강의하기로 만들 수 있고,
파이썬선생님은 강의하기 매서드를 파이썬 강의하기로 만들 수 있고,
HTML선생님은 강의하기 매서드를 HTML 강의하기로 만들 수 있다.)
package ex05;
import ex05.teacher.HTMLTeacher;
import ex05.teacher.JavaTeacher;
import ex05.teacher.PythonTeacher;
/**
* 템플릿 : 반복적인 작업을 간편하게 하기 위해 미리 정의된 틀이나 형식
*/
public class App {
public static void main(String[] args) {
// 캡슐화를 통해서 너한테 필요한 것만 노출시킨다.
JavaTeacher jt = new JavaTeacher(); // 메모리에 띄움
jt.수업하기(); // 처음부터 이렇게 짤 수 없다. 노가다 하다보면 이렇게 해야지! 할때가 온다
PythonTeacher pt = new PythonTeacher();
pt.수업하기();
HTMLTeacher ht = new HTMLTeacher();
ht.수업하기();
}
}
그럼 이렇게 App에서는 캡슐화를 이용해서 수업하기 매서드만 사용해서 수업 시간 동안의
전 매서드를 호출 할 수 있다. 물론 템플릿 매서드를 Teacher에 적용했기 때문에,
공통되는 매서드는 작성할 필요없이 필요한 강의하기 매서드만 재정의해두면 된다.
Share article