1. 템플릿 메서드 패턴이란?
1-1. 정의
객체지향 프로그래밍에서 사용되는 디자인 패턴 중 하나이다. 이 패턴은 알고리즘의 구조를 정의하고, 그 알고리즘의 일부 단계를 서브클래스에서 구현하도록 하는 데 사용된다. 쉽게 말해, 알고리즘의 골격을 템플릿 메서드가 정의하고, 구체적인 구현은 서브클래스에 맡기는 방식.
1-2. 폭포수 모델
폭포수 모델은 위에서 만들어 놓은 형태 그대로 개발을 하는 것.
설계를 단계별로 쪼갠다.(10단계 → 5단계)
1단계의 핵심 로직만 빼
2단계의 핵심 로직 ..
이걸로 프로토타입을 만듬, 일주일동안 프로토타입을 개발
이 모델의 장점 : 핵심 기능만 넣었기 때문에 피드백을 빨리 받을 수 있음
1-3. 캡슐화
아래는 템플릿 메서드 패턴 아니고 캡슐화^^
JavaTeacher 클래스의 ‘입장하기’, ‘출석부르기’, ‘자바강의하기’, ‘퇴장하기’ 를 ‘수업하기()’ 라는 하나의 메서드 안에 넣어 통으로 만든다.
구체적인 것을 추상적인 것으로 때리는 것(?)이다.
package ex05.teacher;
public class JavaTeacher {
public void 수업하기() {
입장하기();
출석부르기();
자바강의하기();
퇴장하기();
}
public void 입장하기() {
System.out.println("입장하기");
}
public void 출석부르기() {
System.out.println("출석부르기");
}
public void 자바강의하기() {
System.out.println("자바강의하기");
}
public void 퇴장하기() {
System.out.println("퇴장하기");
}
}
package ex05;
import ex05.teacher.JavaTeacher;
public class App {
public static void main(String[] args) {
JavaTeacher jt = new JavaTeacher();
jt.수업하기();
}
}
하지만, 선생님이 감당할 수 없을 만큼 늘어난다면..?
강의하는 과목만 다를 뿐, ‘입장하기’, ‘출석부르기’, ‘퇴장하기’ 는 반복되는 것을 알 수 있다.
이 때, 템플릿 메서드 패턴을 사용해보자.

2. 적용
템플릿 메서드 패턴은 자식들이 공통적으로 쓰고 있는 것을 끌어올리는 것이다.
세 teacher 에서 뭐가 공통적인지 본다.

부모를 만들고 계속해서 자식을 만드는 게 맞지만, 일반적으로는 구체적인 것을 만들고 공통적으로 끌어올린다.
위의 예시에서 강의하기를 제외하고는 전부 공통적인 것을 알 수 있다.
추상클래스는 추상메서드와 바디{ } 가 있는 일반메서드도 만들 수 있으니,
Teacher 라는 추상클래스를 부모로 만들어놓고, 다른 내용의 강의하기() 만 오버라이드해서 사용한다.
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("퇴장하기");
}
}
package ex05.teacher;
public class JavaTeacher extends Teacher{
@Override
public void 강의하기() {
System.out.println("자바 강의하기");
}
}
package ex05.teacher;
public class PythonTeacher extends Teacher{
@Override
public void 강의하기() {
System.out.println("Python 강의하기");
}
}
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.수업하기();
}
}
Teacher 는 도장 같은 것이다. 찍어내는 것.
모두가 같은데 딱 강의하기만 다르기 때문에 템플릿 메서드 패턴을 사용한 것.

Share article