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

KangHo Lee's avatar
Nov 13, 2024
[디자인 패턴] 템플릿 메서드 패턴(Template Method Pattern)
💡
상위 클래스에서 알고리즘의 뼈대를 정의하고 하위 클래스에서 그 뼈대의 세부 사항을 구현하는 방식

1. 주요 개념

  • 알고리즘의 뼈대를 정의하는 메서드입니다.
  • 템플릿 메서드(Template Method)
    • 일반적으로 상위 클래스에서 정의되며, 알고리즘의 각 단계는 하위 클래스에서 구현됩니다.
  • 추상 메서드(Abstract Methods)
    • 하위 클래스에서 반드시 구현해야 하는 메서드들입니다.

2. 소스 코드 예시

public interface TeacherAble { // public abstract 생략 void 수업하기(); } public abstract class Teacher implements TeacherAble { protected void 입장하기() { System.out.println("입장하기"); } protected void 출석부르기() { System.out.println("출석부르기"); } protected void 퇴장하기() { System.out.println("퇴장하기"); } protected abstract void 강의하기(); public void 수업하기() { 입장하기(); 출석부르기(); 강의하기(); 퇴장하기(); } } public class JavaTeacher extends Teacher { @Override protected void 강의하기() { System.out.println("자바 강의하기"); } } public class PythonTeacher extends Teacher { @Override protected void 강의하기() { System.out.println("파이썬 강의하기"); } } public class HTMLTeacher extends Teacher { @Override protected void 강의하기() { System.out.println("HTML 강의하기"); } } // main public class App { public static void main(String[] args) { JavaTeacher t1 = new JavaTeacher(); t1.수업하기(); PythonTeacher t2 = new PythonTeacher(); t2.수업하기(); HTMLTeacher t3 = new HTMLTeacher(); t3.수업하기(); } }
  1. TeacherAble 인터페이스
      • 인터페이스를 선언할 때 메서드들은 자동으로 public과 abstract 키워드를 가집니다.
  1. Teacher 클래스
      • 템플릿 메서드를 포함
      • public void 수업하기() 메서드는 인터페이스에서 내려온 메서드 이므로 무조건 public이어야 한다. (protected 사용 불가)
  1. JavaTeacher, PythonTeacher, HTMLTeacher
      • Teacher 클래스를 상속하고 있습니다.
      • Teacher 클래스에 정의된 추상메서드 강의하기() 는 반드시 오버라이드해야 합니다.
 
Share article

devleekangho