추상 클래스의 응용 - 템플릿 메서드 패턴

0

Java 공부

목록 보기
8/18
post-custom-banner

템플릿 메서드

  • 추상 메서드나 구현 된 메서드를 활용하여 코드의 흐름(시나리오)를 정의하는 메서드
  • final로 선언하여 하위 클래스에서 재정의 할 수 없게 한다.
public abstract class Car {
	public abstract void drive();// abstract 를 추가하면 하위 클래스에서도 추가해줘야한다.
	public abstract void stop();
	public abstract void wiper(); 
	public void startCar() {
		System.out.println("시동을 겁니다.");
	}
	public void turnOff() {
		System.out.println("시동을 끕니다.");
	}
	public void washCar() { // abstract없이 작성되면 하위 클래스에서 추가없어도 에러없음!
		// 새차기능은 필수 기능이 아니다! AiCar에서만 재정의!!
	}
	final public void run() { // final 하위클래스에서 재정의 할 수 없게 함
		startCar();
		drive();
		stop();
		wiper();
		turnOff();
		washCar();
	}
}
  • 추상 클래스로 선언된 상위 클래스에서 템플릿 메서드를 활용하여 전체적인 흐름을 정의 하고 하위 클래스에서 다르게 구현되어야 하는 부분은 추상 메서드로 선언하여 하위 클래스에서 구현 하도록 한다.

ManualCar

public class ManualCar extends Car {
	@Override
	public void drive() {
		System.out.println("사람이 운전합니다.");
		System.out.println("사람이 핸들을 조작합니다.");
	}
	@Override
	public void stop() {
		System.out.println("브레이크를 밟아서 정지합니다.");
	}
	@Override
	public void wiper() {}
}

AiCar

public class AiCar extends Car {
	@Override
	public void drive() {
		System.out.println("자율주행 합니다.");
		System.out.println("자동차가 스스로 조향합니다.");
	}
	@Override
	public void stop() {
		System.out.println("스스로 정지합니다.");
	}
	@Override
	public void wiper() {}
	@Override
	public void washCar() {
		System.out.println("자동 세차 합니다.");
	}
}

CarTest

public class CarTest {
	public static void main(String[] args) {
		Car aiCar = new AiCar();
		aiCar.run();
		System.out.println(".....................................");
		Car mcar = new ManualCar();
		mcar.run();
	}
}

시동을 겁니다.
자율주행 합니다.
자동차가 스스로 조향합니다.
스스로 정지합니다.
시동을 끕니다.
자동 세차 합니다.
.....................................
시동을 겁니다.
사람이 운전합니다.
사람이 핸들을 조작합니다.
브레이크를 밟아서 정지합니다.
시동을 끕니다.

post-custom-banner

0개의 댓글