Contents
Template MethodTemplate Method
- 반복되는 메서드들을 사용하는 객체들이 있을 경우, 전체 다 구현하지 않고 필요한 부분만 구현
- 동일한 메서드들을 추상화하고 캡슐화하여 사용자가 구현 및 사용이 편리하게 함
Q. 선생님이 강의하는 수업 방식이 똑같은데 구현 시 생략할 방법?
- 각 과목 선생님들이 수업을 하는 순서
- 교실 입장 (입장하기)
- 출석 부르기
- 수업하기
- 교실 퇴장 (퇴장하기)
- 이때, 선생님마다 다른 메서드는 3번의 수업하기 말고는 없음
- 1, 2, 4번 메서드는 계속 반복됨

A : 추상화와 캡슐화를 활용한 템플릿 메서드를 제작
- 추상화 (Abstraction) : 구체적인 메서드들에서 핵심적인 기능만 간추리는 것
- 캡슐화 (Encapsulation) : 외부 클래스에서 내부 멤버 및 메서드의 접근을 제한하도록 감싸는 것
- 입장하기, 출석 부르기, 퇴장하기는 모든 선생님이 공통으로 쓰시기에 구현해둠
- 수업하기는 각 선생님들마다 내용이 다르므로 추상화 : 상속 클래스에서 직접 구현
- 인터페이스 내에 lecture만 작성 → 외부에 lecture만 노출할 것임
- lecture 내부 메서드들도 구조는 동일하므로 Teacher에서 바로 구현
- 각 메서드들은 해당 클래스 및 상속받는 클래스들에게만 공유되어 호출되지 않도록 접근 제어자 protected 사용
public interface Teachable { // 인터페이스만 노출 (캡슐화)
void lecture();
}
public abstract class Teacher implements Teachable {
// Encapsulation (필요한 것만 노출)
public void lecture() {
entry();
check();
teach();
exit();
}
protected void entry() {
System.out.println("입장하기");
}
protected void check() {
System.out.println("출석부르기");
}
protected abstract void teach();
protected void exit() {
System.out.println("퇴장하기");
}
}
public class App {
public static void main(String[] args) {
Teacher jt = new JavaTeacher();
Teacher pt = new PythonTeacher();
Teacher ht = new HTMLTeacher();
Teacher st = new SpringTeacher();
jt.lecture();
pt.lecture();
ht.lecture();
st.lecture();
}
}
Share article