일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- Atomicity
- kotlin 리팩터링
- 소프트웨어의 품격
- 동적파라미터
- open-session-in-view
- 스프링 포매터
- 기능적 요구사항
- IOC
- Spring
- 정적팩토리메서드
- 스프링di
- java predicate
- 생성자주입
- jpa no session
- 비기능적 요구사항
- ioc컨테이너
- 토비의 스프링
- kotlin ::
- spring formatter
- 수정자주입
- 스프링부트 도커
- 자바 필터
- jpa lazy
- 스프링
- 그래프큐엘
- 도커 이미지 빌드
- fetch join
- 스프링 시큐리티 설정
- method refetence
- 스프링시큐리티
Archives
- Today
- Total
공부기록
1022 템플릿메서드 본문
반응형
템플릿
- 틀이나 견본을 의미.
템플릿 메서드
- 추상메서드나 구현된 메서드를 활용하여 프로그램 전체의 흐름(시나리오) 를 정의해놓은 메서드. final로 선언하여 재정의 할 수 없게 함.
템플릿 메서드 패턴
- 디자인패턴의 일종.
- 프레임 워크에서 많이 사용되는 설계패턴.
- 추상클래스로 선언된 상위 클래스에서 추상메서드를 이용하여 전체 구현의 흐름을 정의하고 구체적인 각 메서드 구현은 하위 클래스에 위임함.
Car.java (추상클래스)
public abstract class Car {
public void startCar() {
System.out.println("엔진시동을 겁니다.");
}
public void turnOff() {
System.out.println("엔진시동을 끕니다.");
}
public abstract void drive();
public abstract void stop();
/**
* 템플릿 메서드.
* 추상메서드나 구현된 메서드를 활용하여 프로그램 전체의 흐름(시나리오) 를 정의해놓은 메서드. final로 선언하여 재정의 할 수 없게 함.
*/
final public void run() {
startCar();
drive();
stop();
turnOff();
}
}
AiCar.java (컨크리트 클래스)
public class AiCar extends Car {
@Override
public void drive() {
System.out.println("인공지능 자동차가 자율 주행합니다");
}
@Override
public void stop() {
System.out.println("인공지능 자동차가 스스로 멈춥니다.");
}
}
ManualCar.java (컨크리트 클래스)
package me.grace.template;
public class ManualCar extends Car {
@Override
public void drive() {
System.out.println("사람이 운전합니다.");
}
@Override
public void stop() {
System.out.println("사람이 브레이크를 밟습니다.");
}
}
App.java (클라이언트 역할)
public class App {
public static void main(String[] args) {
Car aiCar = new AiCar();
aiCar.run();
Car manualCar = new ManualCar();
manualCar.run();
}
}
반응형
'JAVA' 카테고리의 다른 글
아이템4. 인스턴스화를 막으려거든 private 생성자를 사용하라. (0) | 2019.11.26 |
---|---|
아이템3. private생성자나 열거타입으로 싱글턴임을 보증하라 (0) | 2019.11.26 |
아이템2. 생성자에 매개변수가 많다면 빌더를 고려하라 (0) | 2019.11.26 |
아이템1. 생성자 대신 정적 팩터리 메서드를 고려하라. (2) | 2019.11.26 |
[JUnit5] gradle에 junit5 끼얹기 (0) | 2019.08.11 |