티스토리 뷰

템플릿 메소드란

템플릿 메소드는 필수 처리절차를 정의한 일련의 과정을 메소드로 정의하고 final로 변경을 제한합니다

템플릿 메소드의 안의 메소드중 하나 이상이 추상메소드로 정의되며, 그 추상 메소드는 서브클래스에서 구현됩니다.

이렇게 하면 서브클래스에서 일부분을 구현할 수 있도록 하면서도 구조는 바꾸지 않아도 됩니다

 

후크 메소드란

후크메소드는 추상 클래스에서 선언되는 메소드이긴 하지만 기본적인 내용만 구현되어 있거나 아무 코드도 들어있지 않은 메소드 입니다.

이렇게 하면 서브클래스에서는 재정의를 할수 있고, 그냥 무시하고 넘어 갈 수도 있습니다.

//template 메소드
final void prepareRecipe() {
    // 기본적인 커피 or 차 만드는 프로세스
    boilWater(); // 물을 끓이기
    brew(); //  우려내기
    pourInCup(); // 컵에 따르고

    if(customerWantsCondiments() == true) {
        addCodiments(); // 첨가할 것들 첨가하기
    }
}
//hook 메소드
public boolean customerWantsCondiments() {
      return true;
}

 

"자바8 이상부터 인터페이스 디폴트 메소드로 템플릿 메소드 패턴 구현이 가능하지 않나요?"

인터페이스 같은경우 디폴트 메소드는 final로 정의를 할수없어 재정의를 가능하게 되고

모든 메소드는 public abstract 이므로 인터페이스로 구현할 경우, 템플릿 메소드 내부에서만 호출되어야 할 메소드들이public 제어자에 의해 의도치 않은 사용처에서 호출될 위험이 있어 템플릿 메소드 패턴을 만들수 없습니다.

'DesignPattern' 카테고리의 다른 글

[Design Pattern] 전략(Strategy) 패턴이란?  (0) 2020.12.21
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Today
Yesterday
링크
«   2024/05   »
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
글 보관함