SHUSTORY

09-2 템플릿 메서드 본문

프로그래밍/JAVA

09-2 템플릿 메서드

어서오시우 2023. 3. 2. 15:37
728x90

추상 클래스와 템플릿 메서드

템플릿 메서드는 디자인 패턴 중 하나로, 모든 객체 지향 프로그램에서 사용하는 구현 방법이다.

템플릿 메서드는 추상 클래스를 사용하여 구현할 수 있으며 예제를 통해 살펴보도록 하자.

 

 

예제01

 

run( ) 메서드는 자동차가 달리는 방법을 순서대로 구현해 두었다.

시동을 켜고, 달리고, 멈추고, 시동을 끈다.

Car 클래스를 상속받으면 어떤 자동차든 모두 이 순서대로 동일한 방식으로 달리는 것이다.

 

추상 메서드 중 하나라도 구현하지 않는다면 추상 메서드를 포함하고 있기 때문에 추상 클래스가 된다.

Car 클래스를 상속받는 AICar 클래스와 ManualCar 클래스는 구현되지 않은 추상 메서드를 마저 구현하여 작성하자.

 

AICar 클래스
ManualCar 클래스

 

이제 테스트 프로그램을 만들어 각 차가 어떻게 움직이는지 확인해보자.

 

테스트 프로그램

 

템플릿 메서드의 역할

템플릿 메서드의 역할은 위 예제의 run( ) 메서드와 같이 메서드 실행 순서와 시나리오를 정의하는 것이다.

위 예제와 관련지어 설명하자면, 템플릿 메서드에서 호출하는 메서드가 추상 메서드라면 AICar와 Manual Car 작동 방식의 일부가 다른 것처럼 차종에 따라 구현 내용이 바뀔 수는 있다.

하지만 시동을 켜고, 달리고, 멈추고, 시동을 끄는 시나리오는 변하지 않는다.

이런 메서드를 바뀔 수 없는 템플릿 메서드로 정의하는 것이다.

 

상위 클래스를 상속받은 하위 클래스에서 템플릿 메서드를 재정의 할 수는 없기 때문에 final 예약어를 사용해 선언한다.

템플릿 메서드는 로직 흐름이 이미 정해져 있는 프레임워크에서 많이 사용하는 기본 구현 방법이다.

 

정리하자면 추상 클래스는 하위 클래스에서도 사용할 수 있는 코드를 구현한다.

추가 기능이 필요하다면 이미 구현된 메서드( start( ), turnOff와 같은 메서드 )도 하위 클래스에서 재정의해 사용할 수 있다.

하지만 템플릿 메서드는 로직 흐름을 정의하는 역할로,

이 흐름은 모든 하위 클래스가 공통으로 사용하고 코드를 변경하면 안되기 때문에 final로 선언하는 것이다.

'프로그래밍 > JAVA' 카테고리의 다른 글

09-4 final 예약어  (0) 2023.03.04
09-3 템플릿 메서드 응용하기  (0) 2023.03.04
09-1 추상 클래스  (0) 2023.03.02
08-6 다운 캐스팅과 instanceof  (0) 2023.03.02
08-5 다형성 활용하기  (0) 2023.02.25