일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 자바
- 새벽공부
- 배열
- 백엔드
- Java
- try-catch
- node.js
- exception
- 바이트 단위 스트림
- 예외 처리
- 졸리다
- SSR
- FileInputStream
- 코딩
- ArrayList
- 보조 스트림
- 인스턴스
- 자료형
- 개발자
- 변수
- 파이팅
- 다형성
- MPA
- 인터페이스
- 코린이
- throws
- 메서드
- 상속
- 문자 단위 스트림
- 초보개발자
- Today
- Total
SHUSTORY
09-2 템플릿 메서드 본문
추상 클래스와 템플릿 메서드
템플릿 메서드는 디자인 패턴 중 하나로, 모든 객체 지향 프로그램에서 사용하는 구현 방법이다.
템플릿 메서드는 추상 클래스를 사용하여 구현할 수 있으며 예제를 통해 살펴보도록 하자.


run( ) 메서드는 자동차가 달리는 방법을 순서대로 구현해 두었다.
시동을 켜고, 달리고, 멈추고, 시동을 끈다.
Car 클래스를 상속받으면 어떤 자동차든 모두 이 순서대로 동일한 방식으로 달리는 것이다.
추상 메서드 중 하나라도 구현하지 않는다면 추상 메서드를 포함하고 있기 때문에 추상 클래스가 된다.
Car 클래스를 상속받는 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 |