템플릿 메서드 패턴(Template Method Pattern)
02 Sep 2021 -
1 minute read
-
템플릿 메서드
-
추상메서드나 구현된 메서드를 활용하여 코드의 흐름(시나리오)를 정의하는 메서드
-
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(); } }
-
출력결과
시동을 겁니다 자율 주행을 합니다 와이퍼를 작동합니다 자율 주행을 멈춥니다 시동을 끕니다 시동을 겁니다 사람이 운전합니다 브레이크를 밟아 멈춥니다 시동을 끕니다
-