inblog logo
|
moohyun
    디자인패턴

    템플릿 메서드 패턴

    화낼거양'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
    Contents
    예제

    moohyun

    RSS·Powered by Inblog