[디자인패턴] 6. Template Method

문정준's avatar
Jul 22, 2025
[디자인패턴] 6. Template Method

Template Method

  • 반복되는 메서드들을 사용하는 객체들이 있을 경우, 전체 다 구현하지 않고 필요한 부분만 구현
  • 동일한 메서드들을 추상화하고 캡슐화하여 사용자가 구현 및 사용이 편리하게 함
 

Q. 선생님이 강의하는 수업 방식이 똑같은데 구현 시 생략할 방법?

  • 각 과목 선생님들이 수업을 하는 순서
      1. 교실 입장 (입장하기)
      1. 출석 부르기
      1. 수업하기
      1. 교실 퇴장 (퇴장하기)
    • 이때, 선생님마다 다른 메서드는 3번의 수업하기 말고는 없음
    • 1, 2, 4번 메서드는 계속 반복됨
notion image

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

sxias