[Java] 템플릿 메서드
📕1. 템플릿 메서드
1-1. 템플릿 메서드란?
💡 템플릿이란 용어를 사전에서 찾아보면 틀이나, 견본을 의미한다
즉 , 틀이 있는 메서드라는 의미이다.
📢 템플릿 메서드는 추상클래스를 사용하여 구현할 수 있다.
📕2. 템플릿 메서드 예시
2-1. 템플릿메서드를 사용한 추상클래스 만들기
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();
}
}////////////////// class
-
Car 클래스를 생성하였고, 이 클래스는 drive(), stop()
추상메서드와
3개의 구현된 메서드 start(), turnOff(), run()
을 가지고 있다.
-
자동차 시동을 켜고 끄는 방법은 어느 자동차나 동일하기에 미리 코드를 구현하였다.
-
drive() 와 turnOff()
는 차 종류에 따라서 다른 방식으로 움직일 수 있기에 추상메서드로 선언하였다.
-
템플릿 메서드인 run()
메서드는 자동차가 달리는 방법을 순서대로 구현하였다.
💡 템플릿이란 용어를 사전에서 찾아보면 틀이나, 견본을 의미한다
즉 , 틀이 있는 메서드라는 의미이다.
📢 템플릿 메서드는 추상클래스를 사용하여 구현할 수 있다.
2-1. 템플릿메서드를 사용한 추상클래스 만들기
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();
}
}////////////////// class
-
Car 클래스를 생성하였고, 이 클래스는
drive(), stop()
추상메서드와
3개의 구현된 메서드start(), turnOff(), run()
을 가지고 있다. -
자동차 시동을 켜고 끄는 방법은 어느 자동차나 동일하기에 미리 코드를 구현하였다.
-
drive() 와 turnOff()
는 차 종류에 따라서 다른 방식으로 움직일 수 있기에 추상메서드로 선언하였다. -
템플릿 메서드인
run()
메서드는 자동차가 달리는 방법을 순서대로 구현하였다.
그러면 이제 Car 클래스를 상속받을 클래스를 2개 구현해보자
상속받을 클래스는 자율주행하는 AICar 클래스
와 보통자동차인ManualCar 클래스
이다.
두 클래스는 Car 클래스
를 상속받았기 때문에 구현되지 않은 추상 메서드를 마저 구현해야 한다.
2-2. AICar class 만들기
public class AICar extends Car
{
@Override
// override - car클래스의 추상메서드를 재정의 한다는 의미
public void drive()
{
System.out.println("자율 주행합니다.");
System.out.println("자동차가 알아서 방향을 전환합니다.");
}
@Override
// override - car클래스의 추상메서드를 재정의 한다는 의미
public void stop()
{
System.out.println("스스로 멈춥니다.");
}
}////////////////// class
-
AICar 클래스
는Car 클래스
를 상속받았고drive() , stop()
추상 메서드를 구현 하였다. -
AICar 클래스
는 자율주행을 하고 방향도 알아서 바꾼다.
2-3. ManualCar class 만들기
public class ManualCar extends Car
{
@Override
// override - car클래스의 추상메서드를 재정의 한다는 의미
public void drive()
{
System.out.println("사람이 운전합니다.");
System.out.println("사람이 핸들을 조작합니다.");
}
@Override
// override - car클래스의 추상메서드를 재정의 한다는 의미
public void stop()
{
System.out.println("브레이크로 정지합니다.");
}
}////////////////// class
-
ManualCar 클래스
도AICar 클래스
와 마찬가지로Car 클래스
를 상속받았다. -
그리고 추상메서드
drive() 와 stop()
을 구현했다. -
ManualCar 클래스
는 직접 핸들을 조작하면서 달리고 정지를 하려면 브레이크를 밟으면 된다.
그러면 이제 테스트 프로그램을 만들어 이 두 자동차가 어떻게 움직이는지 확인해 보자
2-4. 테스트 프로그램 만들기
AICar 클래스
와 ManualCar 클래스
를 이용하여 테스트 프로그램 만들기
public class CarTest
{
public static void main(String[] args)
{
System.out.println("=== 자율 주행하는 자동차 ===");
// Car 클래스 형태로 AICar 객체생성
Car myCar = new AICar();
myCar.run();
System.out.println("=== 사람이 운전하는 자동차 ===");
// Car 클래스 형태로 ManualCar 객체생성
Car hisCar = new ManualCar();
hisCar.run();
}
}////////////////// class
💡 출력 화면
=== 자율 주행하는 자동차 ===
시동을 켭니다.
자율 주행합니다.
자동차가 알아서 방향을 전환합니다.
스스로 멈춥니다.
시동을 끕니다.
=== 사람이 운전하는 자동차 ===
시동을 켭니다.
사람이 운전합니다.
사람이 핸들을 조작합니다.
브레이크로 정지합니다.
시동을 끕니다.
2-5. 템플릿 메서드의 역할
💡 메서드 실행순서와 시나리오를 정희하는 것이다.
- 템플릿 메서드에서 호출하는 메서드는 추상 메서드가 가능하지만
템플릿 메서드 자체는 추상메서드가 아니기 때문에 하위 클래스에서 재정의가 불가하다.
- 따라서 템플릿 메서드는
final
이라는 예약어를 사용해야한다.
Author And Source
이 문제에 관하여([Java] 템플릿 메서드), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@xnfxnf97/Java-템플릿-메서드저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)