CH8. 행동 디자인 패턴

8.1 옵서버 패턴

8.1.7 EventBus 프레임워크를 처음부터 구현하기

<aside> 📚 ◾️ 코드는 책 p.384 ~ 387 참고 ◾️ 실제 Google Guava EventBus 소스 코드를 한번 직접 읽어보는 것을 추천

</aside>


8.2 템플릿 메서드 패턴 (1)

8.2.1 템플릿 메서드 패턴의 정의와 구현

8.2.2,3 템플릿 메서드 패턴의 역할: 재사용 / 확장

abstract class AbstractTemplate {
		// < 재사용 효과 >
    // 템플릿 메소드 : 메서드 앞에 final 키워드를 붙이면 자식 클래스에서 오버라이딩이 불가능함
  	// 자식 클래스에서 상위 템플릿을 오버라이딩해서 자기마음대로 바꾸도록 하는 행위를 원천 봉쇄
    public final void templateMethod() {
        // 상속하여 구현되면 실행될 메소드들
        step1();
        step2();
        if(hook()) { ... } // 안의 로직을 실행하거나 실행하지 않음
        step3();
    }

    // 상속하여 사용할 것이기 때문에 protected 접근제어자 설정
    protected abstract void step1();
    protected abstract void step2();
    protected abstract void step3();
    
    // < 확장 효과 >
    // 필요한 경우 @Override 하여 사용
    boolean hook() { return true; }
}
class ImplementationA extends AbstractTemplate {
    @Override
    protected void step1() {}

    @Override
    protected void step2() {}

    @Override
    protected void step3() {}
}

class ImplementationB extends AbstractTemplate 
    @Override
    protected void step1() {}

    @Override
    protected void step2() {}

    @Override
    protected void step3() {}
    
    // hook 메소드를 오버라이드 해서 false 를 return 하도록 함
    // 템플릿에서 if 문이 실행되지 않게 된다
    @Override
    protected boolean hook() {
        return false;
    }
}
...
class Client {
   public static void main(String[] args) {
       AbstractTemplate templateA = new ImplementationA();  // 1. 템플릿 메서드가 실행할 구현화한 하위 알고리즘 클래스 생성
       templateA.templateMethod(); // 2. 템플릿 실행
   }
}