본문 바로가기

이해를 위한 메모 공간

13-1.템플릿 메소드

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

추상 클래스를 활용한 예로 템플릿 메소드를 알아보겠습니다. '템플릿(template)'이란 용어를 사전에서 찾아보면, 틀이나 견본을 뜻합니다. 틀이 있는 메소드라는 의미입니다. 템플릿 메소드는 추상클래스를 사용하여 구현할 수 있습니다.

 

Car 추상클래스와 템플릿 메소드의 선언

Car 클래스를 생성했습니다. 이 클래스는 drive()와 stop()추상 메소드와 3개의 구현된 메소드 startCar(), turnOff(), run()을 가지고 있습니다. 자동차 시동을 켜고 끄는 것은 어느 차나 동일하기 때문에 startCar()와 turnOff()는 미리 코드를 구현해 두었습니다. drive()와 stop()은 차종에 따라 다른 방식으로 움직일 수 있습니다. 그래서 추상 메소드로 선언했습니다. 이 중 15~20행에 구현된 템플릿 메소드인 run()메소드를 살펴보면 이 메소드는 자동차가 달리는 방법을 순서대로 구현해 두었습니다. 만약 Car클래스를 상속받으면 어떤 자동차든 모두 이 순서대로 동일한 방식으로 달리는 것입니다.

 

구현할 클래스를 다이어그램으로 기릴줄 알아야한다.

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

 

자율주행 AICar의 생성

AICar 클래스는 Car 클래스를 상속받았고 drive()와 stop()추상 메소드를 구현했습니다.

AICar는 자율 주행을 하고 방향도 알아서 바꿉니다. 사람은 시동ㅇ르 켜고 끄는 일만 하면 됩니다.

 

인력 ManualCar 클래스의 생성

ManualCar 클래스도 AICar 클래스와 마찬가지로 Car클래스를 상속받았습니다. 그리고 추상 메소드 drive()와 stop()을 구현했습니다. 코드 내용을 살펴보면 사람이 직접 핸들을 조작하면서 달리고 있습니다. 정지를하려면 브레크를 밟으면 됩니다.

 

두 자동차의 실행을 테스트하는 프로그램

템플릿 메소드의 역할

CarTest에서 두 개의 인스턴스(myCar, hisCar)를 생성했습니다. 그리고 run()을 호출했습니다. run()은 Car 클래스에 이미 구현된 메소드입니다. 차가 어떻게 달려야 하는지를 구현해 놓았습니다. 작동 순서는 어느 차나 동일하기 때문에 이렇게 템플릿 메소드로 메소드의 실행 순서와 시나리오를 정의 하는 것입니다.

템플릿 메소드에서 호출하는 메소드가 추상메소드라면 차종에 따라 구현 내용이 바뀔 수는 있습니다.

하지만 시동을 켜고, 달리고, 멈추고, 시동을 끄는 시나리오는 변하지 않습니다. 이런 메소드를 템플릿 메소드로 정의 하게 됩니다.

 

 

 

 

 

 

 

 

 

 

'이해를 위한 메모 공간' 카테고리의 다른 글

14.final 예약어  (0) 2020.03.31
13-2.템플릿 메소드를 응용한 간단 실습  (0) 2020.03.31
13.추상 클래스  (0) 2020.03.31
12.다형성 활용 및 다운 캐스팅  (0) 2020.03.31
11.상속  (0) 2020.03.30