일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- Spring MVC Interceptor
- Spring 커맨드 객체
- Servlet cookie
- properties 파일
- Spring message
- Spring MVC5 기본 세팅
- 스프링 파라미터 추출
- DDL DROP
- 코드로 배우는 스프링 웹 프로젝트
- properties 파일 주입
- 자바
- 자바 List
- JSR - 380
- Dependency Injection
- properties 변수
- 스프링 인터셉터
- 오라클 DROP
- ddl alter
- Mybatis 오류
- 자바스크립트
- DDL TRUNCATE
- 오라클 CREATE
- 오라클 TRUNCATE
- Spring 객체로 주입받기
- annotation
- JSR - 303
- collection framework
- Spring
- Spring Cookie
- 자바오류
- Today
- Total
개발이좋아
[Java] 템플릿 메서드 (Template Method) 본문
템플릿 메서드는 객체지향 프로그래밍 디자인 패턴 중 하나로 같은 객체지향 프로그래밍인 c++에서도 동일하게 적용할 수 있으며 템플릿 메서드의 역할은 메서드 실행 순서와 시나리오를 정의하는 것이다. 즉 로직의 흐름을 정의한다.
템플릿 메서드는 추상 클래스를 이용하여 구현하며 로직의 흐름을 정의해 놓은 메서드이기 때문에 final 예약어를 사용해 추상 클래스를 상속받는 하위 클래스에서 재정의 하지 못하게 해야 한다.
템플릿 메서드 구현
위 사진은 Car 추상 클래스를 선언하고 추상 메서드인 drive( ), stop( ) 그리고 구현된 메서드인 startCar( ), turnOff( ), run( )을 구현하고 있으며 이 중 final 예약어가 붙은 run( ) 메서드가 템플릿 메서드이다.
템플릿 메서드 run ( )은 Car 추상 클래스의 로직을 순서대로 실행하는 구현부를 가지고 있는 것을 확인할 수 있다.
시동을 걸고 주행하고 멈추고 시동을 끄는 흐름을 가진 로직이다.
이제 Car 클래스를 구현하는 다른 클래스를 만들도록 한다.
위 사진은 Car 클래스의 추상 메서드를 구현하고 있는 AICar이다.
위 사진도 Car 클래스의 추상 메서드를 구현하고 있다.
메인 메서드가 있는 클래스에서 각 클래스의 인스턴스를 생성하고 템플릿 메서드 run( )을 호출하고 있다.
두 인스턴스 모두 Car 자료형으로 선언했지만 자바의 특징 중 하나인 가상 메서드에 의해 각 각 클래스가 가진 run( ) 메서드가 호출된다.
myCar.run( )은 AICar의 run( ) 메서드를 hisCar는 ManualCar( )의 run( ) 메서드를 호출한다.
위 메인 메서드를 실행하고 콘솔에 찍힌 로그이다.
run( )의 내용이 Car에서 구현한 메서든 서로 같지만 구현하지 않고 내버려둔 추상 메서드의 내용은 서로 다른 것을 확인할 수 있다.
이렇듯 템플릿 메서드는 로직의 시나리오를 정해놓은 메서드로 하위 메서드에서 재정의할 수 없도록 final 예약어를 꼭 붙여주도록 한다.
본 포스팅은 필자가 공부한 것을 정리해놓은 것으로 오류가 존재할 수 있습니다.
참고: Do it! 자바 프로그래밍 입문
위 소스코드는 Do it! 자바 프로그래밍 입문에서 발췌한 내용으로 추후 문제가 생길 시 삭제할 수 있습니다.
'Java' 카테고리의 다른 글
[Java] Wrapper 클래스, 오토박싱과 언박싱 (0) | 2019.12.10 |
---|---|
[Java] toString( ) 메서드와 equals(Object obj) 메서드 (0) | 2019.12.09 |
[Java] 단락 회로 평가 (Short Circuit Evaluation; SCE) (0) | 2019.12.05 |
[Java]생성자 Constructor (0) | 2019.12.04 |
[Java] 상속(inheritance) (0) | 2019.12.03 |