템플릿 메서드 패턴(Template Method Design Pattern)

kims·2023년 12월 30일
0

디자인패턴

목록 보기
1/1
  • SOLID 원칙 중 개방폐쇄원칙(OCP : Open/closed principle)1을 준수하는 디자인 패턴
1: 확장에 대해 열려 있어야 하고, 수정에 대해서는 닫혀 있어야 한다. 즉, 기능을 추가하거나 변경해야 할 때 이미 제대로 동작하고 있던 원래 코드를 변경하지 않아도, 기존의 코드에 새로운 코드를 추가함으로써 기능의 추가나 변경이 가능하다.
출처👉 위키백과
  • 템플릿 메소드는 알고리즘의 각 단계를 정의하며, 서브클래스에서 일부 단계를 구현할 수 있도록 유도한다.
    즉, 어떤 기능에 대해서 실행 되어야 할 각 단계에 대한 순서만을 일단 정해두고, 각 단계에 대한 세부 구현을 상황에 따라 다르게 구현할 수 있도록 하는 디자인 패턴
    출처👉 [디자인 패턴] - 03. 탬플릿 메서드(Template Method) 패턴

💡 디자인 패턴(Design Pattern)

  • 소프트웨어 개발자들이 소프트웨어 개발 과정에서 직면했던 일반적인 문제에 대해 재사용 가능한 해결책
package pattern.ex01;

public abstract class Booking {

    // 서브클래스 오버라이드 방지
    final void book() {
        chooseRoute();
        chooseDateAndTime();
        pay();
    }

    void chooseRoute() {
        System.out.println("출발지와 목적지를 선택하다.");
    }

    abstract void pay();

    // 후크(Hook)
    void chooseDateAndTime() {}

}

💡 후크(Hook)

  • 추상 클래스에서 선언되지만 기본적인 내용만 구현되어 있거나 아무 코드도 들어있지 않은 메소드
package pattern.ex01;


// Taxi.java
public class Taxi extends Booking {
    @Override
    void pay() {
        System.out.println("택시 요금을 지불하다.");
    }
}

// Train.java
public class Train extends Booking {
    @Override
    void pay() {
        System.out.println("기차표를 예매하다.");
    }

    @Override
    void chooseDateAndTime() {
        System.out.println("출발 날짜와 시간을 선택하다.");
    }
}

package pattern.ex01;

public class User {

    public static void main(String[] args) {

        Taxi taxi = new Taxi();
        taxi.book();

        System.out.println("------");

        Train train = new Train();
        train.book();
    }
}

장단점

장점

  • 공통된 코드를 부모 클래스에 정의하므로 코드 중복을 방지한다.
  • 기존 코드에 영향을 주지 않고 새로운 알고리즘을 추가할 수 있어 확장이 용이하다.

단점

  • 추상 메서드의 수가 늘어나면 추상 클래스와 구현 클래스 간의 의존성이 높아져 유지보수가 어렵다.

💡참고

profile
기술로 세상을 이롭게

0개의 댓글