개발이좋아

[Java] 템플릿 메서드 (Template Method) 본문

Java

[Java] 템플릿 메서드 (Template Method)

noobdev 2019. 12. 8. 20:30

템플릿 메서드는 객체지향 프로그래밍 디자인 패턴 중 하나로 같은 객체지향 프로그래밍인 c++에서도 동일하게 적용할 수 있으며 템플릿 메서드의 역할은 메서드 실행 순서와 시나리오를 정의하는 것이다. 즉 로직의 흐름을 정의한다.

템플릿 메서드는 추상 클래스를 이용하여 구현하며 로직의 흐름을 정의해 놓은 메서드이기 때문에 final 예약어를 사용해 추상 클래스를 상속받는 하위 클래스에서 재정의 하지 못하게 해야 한다.

 


템플릿 메서드 구현

위 사진은 Car 추상 클래스를 선언하고 추상 메서드인 drive( ), stop( ) 그리고 구현된 메서드인 startCar( ), turnOff( ), run(  )을 구현하고 있으며 이 중 final 예약어가 붙은 run( ) 메서드가 템플릿 메서드이다. 

템플릿 메서드 run ( )은 Car 추상 클래스의 로직을 순서대로 실행하는 구현부를 가지고 있는 것을 확인할 수 있다.

시동을 걸고 주행하고 멈추고 시동을 끄는 흐름을 가진 로직이다.

 

이제 Car 클래스를 구현하는 다른 클래스를 만들도록 한다.

 

Car 클래스를 구현한 AICar

위 사진은 Car 클래스의 추상 메서드를 구현하고 있는 AICar이다.

 

Car 클래스를 구현한 ManualCar

위 사진도 Car 클래스의 추상 메서드를 구현하고 있다.

 

 

메인 메서드가 있는 클래스에서 각 클래스의 인스턴스를 생성하고 템플릿 메서드 run( )을 호출하고 있다.

두 인스턴스 모두 Car 자료형으로 선언했지만 자바의 특징 중 하나인 가상 메서드에 의해 각 각 클래스가 가진  run( ) 메서드가 호출된다.

myCar.run( )은 AICar의 run( ) 메서드를 hisCar는 ManualCar( )의 run( ) 메서드를 호출한다.

 

 

위 메인 메서드를 실행하고 콘솔에 찍힌 로그이다. 

run( )의 내용이 Car에서 구현한 메서든 서로 같지만 구현하지 않고 내버려둔 추상 메서드의 내용은 서로 다른 것을 확인할 수 있다.

 

이렇듯 템플릿 메서드는 로직의 시나리오를 정해놓은 메서드로 하위 메서드에서 재정의할 수 없도록 final 예약어를 꼭 붙여주도록 한다.

 

 

 

본 포스팅은 필자가 공부한 것을 정리해놓은 것으로 오류가 존재할 수 있습니다.

참고: Do it! 자바 프로그래밍 입문 

위 소스코드는 Do it! 자바 프로그래밍 입문에서 발췌한 내용으로 추후 문제가 생길 시 삭제할 수 있습니다.

Comments