템플릿 메서드 패턴

화낼거양's avatar
Nov 13, 2024
템플릿 메서드 패턴
Contents
예제
 
💡
템플릿 메서드 패턴(Template Method Pattern)은 알고리즘의 구조를 정의하면서 서브클래스가 알고리즘의 특정 단계를 구체적으로 구현할 수 있도록 허용합니다. 이를 통해 알고리즘의 뼈대는 고정되지만, 특정 단계의 구현은 서브클래스에서 다양하게 변경할 수 있습니다.
 
구성 요소 :
  • 템플릿 메서드(Template Method): 알고리즘의 구조를 정의하는 메서드. 일반적으로 상위 클래스에서 구현되며, 서브클래스에서 오버라이드할 수 있는 여러 추상 메서드나 훅 메서드를 호출합니다.
  • 추상 메서드(Abstract Methods): 서브클래스에서 구체적으로 구현해야 하는 메서드.
  • 훅 메서드(Hook Methods): 서브클래스에서 필요에 따라 오버라이드할 수 있는 메서드. 기본 구현이 제공될 수도 있습니다.
 
 

예제

 
public abstract class Teacher implements TeacherAble { protected void 입장하기() { System.out.println("입장하기"); } protected void 출석부르기() { System.out.println("출석부르기"); } protected abstract void 강의하기(); protected void 퇴장하기() { System.out.println("퇴장하기"); } public void 수업하기() { 입장하기(); 출석부르기(); 강의하기(); 퇴장하기(); } }
 
 

템플릿 메서드 (Template Method)

  • public void 수업하기()
    • 알고리즘의 구조를 정의하는 메서드. 수업하기 메서드가 바로 템플릿 메서드로, 입장하기, 출석부르기, 강의하기, 퇴장하기라는 일련의 단계를 정의합니다. 이 메서드를 통해 전체적인 작업 흐름이 고정됩니다.

추상 메서드 (Abstract Method)

  • protected abstract void 강의하기()
    • 서브클래스가 반드시 구현해야 하는 메서드. 강의하기 메서드는 Teacher 클래스에서 구체적으로 구현되지 않고, 서브클래스에서 구체적인 행동을 정의해야 합니다. 이를 통해 서브클래스가 각기 다른 강의 방식을 구현할 수 있게 됩니다.

훅 메서드 (Hook Method)

  • protected void 입장하기(), protected void 출석부르기(), protected void 퇴장하기()
    • 기본 구현을 제공하면서도 필요에 따라 서브클래스에서 오버라이드할 수 있는 메서드. 입장하기, 출석부르기, 퇴장하기 메서드는 기본 동작을 제공하고 있으며, 서브클래스에서 필요에 따라 이 메서드들을 오버라이드하여 다른 행동을 정의할 수 있습니다.
 
 
 
위의 예제처럼 추상 클래스를 작성하였다면 (과목명) Teacher 클래스를 여러개 작성할 때 추상클래스(Teacher)를 상속만 한다면, 훨씬 빠르고 간편하게 작성할 수 있습니다.
 
 

JavaTeacher 라는 클래스를 만든다고 가정하였을 때 :

public class JavaTeacher extends Teacher { @Override protected void 강의하기() { System.out.println("자바 강의하기"); } }
클래스 내용은 추상 메서드만 재정의 하였으며,
JavaTeacher 객체의 수업하기() 메서드를 메인 메서드에서 실행한다면 >>
 

public void 수업하기() { 입장하기(); 출석부르기(); 강의하기(); 퇴장하기(); }

 
위 과정대로 시스템 콘솔창에 정상 출력되는 것을 확인할 수 있습니다.
강의하기() 라는 추상메서드는 해당 메서드를 구현한 구현체의 내용에 따라 달라질 수 있습니다.
 

출력 이미지

notion image
 
 
Share article

moohyun