럿고의 개발 노트

템플릿 메소드 패턴(Template Method Pattern) 본문

Java Note

템플릿 메소드 패턴(Template Method Pattern)

KimSeYun 2019. 12. 26. 16:14

템플릿 메소드 패턴(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 : 반드시 구현할 필요 없이, 선택적으로 오버라이드 가능
      // 추상 클래스에서 선언하지만 기본적인 내용만 구현되어 있거나 내용이 비어있는 메소드
  • 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