럿고의 개발 노트
템플릿 메소드 패턴(Template Method Pattern) 본문
템플릿 메소드 패턴(Template Method Pattern)
공통 추상 클래스
public abstract class Person {
void readyToBattle() {
startBodyTraining();
prepareWeapon();
prepareArmor();
if (isUsingPrepareOther()) {
prepareOther();
}
}
final void startBodyTraining() {
System.out.println("체력 단련!");
}
abstract void prepareWeapon();
abstract void prepareArmor();
boolean isUsingPrepareOther() {
return false;
}
void prepareOther() {
}
}
readyToBattle() : 전투를 준비하며, 모든 메소드들이 실행
startBodyTraining() : 수정 불가(final) / 모두 체력 단련을 하기 때문에
prepareWeapon() : 추상메소드 / 자식 클래스에서 Override
prepareArmor() : 추상메소드 / 자식 클래스에서 Override
isUsingPrepareOther() : boolean값을 리턴 / 후킹(Hooking) 용도
- hook method : 반드시 구현할 필요 없이, 선택적으로 오버라이드 가능
// 추상 클래스에서 선언하지만 기본적인 내용만 구현되어 있거나 내용이 비어있는 메소드
- hook method : 반드시 구현할 필요 없이, 선택적으로 오버라이드 가능
prepareOther() : isUsingPrepareOther()의 return에 따라 실행 여부 결정
자식 클래스
public class Warrior extends Person {
@Override
void prepareWeapon() {
System.out.println("검");
}
@Override
void prepareArmor() {
System.out.println("갑옷");
}
}
- 추상 메소드만 Override
public class Archer extends Person {
@Override
void prepareWeapon() {
System.out.println("활");
}
@Override
void prepareArmor() {
}
@Override
boolean isUsingPrepareOther() {
return true;
}
@Override
void prepareOther() {
System.out.println("화살");
}
}
- Hook method를 이용하여 Hooking 구현
Main Class
public class TemplateMain {
public static void main(String[] args) {
Warrior warrior = new Warrior();
warrior.readyToBattle();
Archer archer = new Archer();
archer.readyToBattle();
}
}
체력 단련!
검
갑옷
체력 단련!
활
화살
사용 이유
전체적인 레이아웃을 통일시키면서, 유연성을 주기위해 사용
추상 메소드와 훅 메소드를 적절히 사용하는 것이 특징!
출처
'Java Note' 카테고리의 다른 글
JVM, JDK, JRE (0) | 2020.01.25 |
---|---|
자바(Java)란? (0) | 2020.01.23 |
Spring과 Spring Boot (0) | 2019.12.25 |
Tomcat 다운 및 설치 하기 (0) | 2019.11.27 |
이클립스(Eclipse) 인코딩 설정하기 (0) | 2019.11.27 |
Comments