템플릿 메서드
- 추상 메스드나 구현된 메서드를 활용하여 코드의 흐름(시나리오)를 정의하는 메서드
- final로 선언하여 하위 클래스에서 재정의 할 수 없게 함
- 프레임워크에서 많이 사용되는 설계 패턴
- 추상 클래스로 선언된 상위 클래스에서 템플릿 메서드를 활용하여 전체적인 흐름은 정의하고 하위 클래스에서 다르게 구현되어야 하는 부분은 추상 메서드로 선언하여 하위 클래스에서 구현 하도록 함
템플릿 메서드 구현
상위클래스인 Car에서 추상메서드를 정의하고 템플릿 메소드를 공통적인 부분을 구현을 한다.
예를들면 모든 차들은 시동을 걸고 드라이브를 하고 멈추고 시동을 끄는 공통적인 부분이 있다.
하지만 일반 차와 ai 차는 drive, stop이 다룰 수 밖에 없다. 그래서 drive, stop 메서드를 추상메서드로 정의 하고 하위 클래스로 구현을 해야한다.
템플릿 메서드 정의
final public void run() {
startCar();
drive();
stop();
turnOff();
}
- final로 정의해서 하위 클래스에서는 재정의 할 수 없게 해야한다.
추상메소드로 정의해서 하위 클래스로 구현 해야한다.
public abstract void drive();
public abstract void stop();
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("시동을 끕니다.");
}
final public void run() {
startCar();
drive();
stop();
turnOff();
}
}
AiCar.java
public class AICar extends Car {
@Override
public void drive() {
System.out.println("자율 주행을 합니다.");
System.out.println("자동차가 스스로 방향을 바꿉니다.");
}
@Override
public void stop() {
System.out.println("장애물 앞에서 스스로 멈췄습니다.");
}
}
- 상위클래스에서 추상메서드 정의한 drive 와 stop을 구현 한다.
ManualCar.java
public class ManualCar extends Car {
@Override
public void drive() {
System.out.println("사람이 운전합니다.");
System.out.println("사람이 핸들을 조작합ㄴ디ㅏ.");
}
@Override
public void stop() {
System.out.println("장애물 앞에서 브레이크를 밟아서 정지합니다.");
}
}
- 상위클래스에서 추상메서드 정의한 drive 와 stop을 구현 한다.
참고 :
Fastcampus
'JAVA' 카테고리의 다른 글
| [JAVA] 인터페이스의 여러가지 요소 (1) | 2023.08.07 |
|---|---|
| [JAVA] 구현 코드가 없는 인터페이스 (0) | 2023.08.01 |
| [JAVA] 추상 클래스의 의미와 구현하는 방법 (0) | 2023.07.30 |
| [JAVA] instanceof 연산자 와 업캐스팅,다운캐스팅 (0) | 2023.07.28 |
| [JAVA] 다형성과 다형성을 사용하는 이유 (2) | 2023.07.26 |