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


  • 템플릿 메서드

    • 추상메서드나 구현된 메서드를 활용하여 코드의 흐름(시나리오)를 정의하는 메서드

    • final로 선언 > 하위 클래스에서 재정의할 수 없도록 (중요한 시나리오를 갖고 있는거니까!)

    • 프레임워크에서 많이 사용되는 설계 패턴

      • 추상 클래스로 선언된 상위 클래스에서 템플릿 메서드 활용, 전체적인 흐름 정의
      • 하위 클래스에서 다르게 구현되어야 하는 부분은 추상메서드로 선언, 하위클래스에서 구현하도록 함
  • ex)

    • Car.java (추상클래스)

        public abstract class Car {
                  
            public abstract void drive();
            public abstract void stop();
            //구현부가 없는 추상 메서드
                  
            public void startCar() {
                System.out.println("시동을 겁니다");
            }
                  
            public void turnOff() {
                System.out.println("시동을 끕니다");
            }
                  
            public void wiper() {}
            //구현 내용이 없는 메서드 > 추상 메서드 X
            //필요한 경우 재정의하여 사용
                  
            final public void run() {
                startCar();
                drive();
                wiper();
                stop();
                turnOff();	
            }
      
        }
      
    • ManualCar.java (Car.java 상속)

        public class ManualCar extends Car {
      
            @Override
            public void drive() {
                System.out.println("사람이 운전합니다");
            }
      
            @Override
            public void stop() {
                System.out.println("브레이크를 밟아 멈춥니다");
            }
      
        }
      
    • AICar.java (Car.java 상속)

        public class AICar extends Car {
      
            @Override
            public void drive() {
                System.out.println("자율 주행을 합니다");
            }
      
            @Override
            public void stop() {
                System.out.println("자율 주행을 멈춥니다");
            }
                  
            @Override
            public void wiper() {
                System.out.println("와이퍼를 작동합니다");
            }
      
        }
      
    • Main.java

        public class Main {
      
            public static void main(String[] args) {
                      
                Car aiCar = new AICar();
                aiCar.run();
                      
                System.out.println();
                      
                Car mCar = new ManualCar();
                mCar.run();
      
            }
      
        }
      
    • 출력결과

        시동을 겁니다
        자율 주행을 합니다
        와이퍼를 작동합니다
        자율 주행을 멈춥니다
        시동을 끕니다
      
        시동을 겁니다
        사람이 운전합니다
        브레이크를 밟아 멈춥니다
        시동을 끕니다
      

Categories:

Java