[디자인패턴] 6 템플릿 매서드 패턴 (Template Method Pattern)

김호정's avatar
Aug 14, 2024
[디자인패턴] 6 템플릿 매서드 패턴 (Template Method Pattern)
 

6-1. 템플릿 메서드 장점

💡
추상클래스에서 템플릿 메서드를 구현해 상위 추상클래스로 로직을 공통화하여 코드의 중복을 줄일 수 있다.
 
출처 )

6-2. 예시 코드

teacher 패키지를 만들어서 각 과목별 선생님을 먼저 만들어준다.
notion image
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

keepgoing