추상 클래스 응용 - Template Method pattern

Codren·2021년 6월 2일
0
post-custom-banner

Section 1. Template Method pattern

1. Template Method pattern

알고리즘의 처리 과정(시나리오)만 정의하고 수행할 구체적 처리는 하위클래스에서 정의하는 기법

  • 프레임워크에서 많이 사용되는 설계 패턴
    - 개발자가 해당 프레임워크가 지정한 시나리오에 맞게 설계해야함 (⟷ 라이브러리)

  • 추상 클래스인 상위 클래스에서 전체적인 흐름을 정의하는 템플릿 메서드를 정의하고
    다르게 구현되어야 하는 부분은 추상 메서드로 선언하여 하위 클래스에게 넘김




2. 템플릿 메서드 (Template Method)

처리 로직의 전체적인 흐름 (시나리오)을 정의하는 메서드

  • final 키워드를 지정하여 하위 클래스에서 재정의 할 수 없게 함 (정해진 시나리오로 수행되어야함)




3. 템플릿 메서드 패턴 구현


  • 처리 흐름을 지정한 run 메서드 (템플릿 메서드) 존재
  • drive, stop 추상 메서드는 하위 클래스에서 정의
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 washCar(){}		# 추상 메서드 X, 하위 클래스에서 선택적으로 사용
   
	final public void run() {	# 템플릿 메서드
		startCar();
		drive();
		stop();
		turnOff();
       		washCar();
	}
}

  • run 메서드에 따라 drive, stop 메서드 구현
public class ManualCar extends Car{

	@Override
	public void drive() {
		System.out.println("사람이 운전합니다.");
		System.out.println("사람이 핸들을 조작합니다.");		
	}

	@Override
	public void stop() {
		System.out.println("브레이크를 밟아서 정지합니다.");		
	}

}

  • run 메서드에 따라 drive, stop 메서드 구현
public class AICar extends Car{

	@Override
	public void drive() {
		System.out.println("자율 주행합니다.");
		System.out.println("자동차가 스스로 방향을 바꿉니다.");
	}

	@Override
	public void stop() {
		System.out.println("스스로 멈춥니다.");		
	}
}
post-custom-banner

0개의 댓글