[디자인 패턴] 템플릿 메소드 패턴
템플릿 메소드 패턴(Template Method Pattern)
알고리즘의 골격을 정의한다. 즉 일련의 단계로 알고리즘을 정의한 것이다.
AbstractClass는 템플릿 메소드 들어가 있고, abstract 메소드로 구체적인 구현을 서브클래스에게 요구한다.
ConcreteClass는 여러개가 있을 수 있고, 구체적인 구현을 제공해야 한다.
템플릿 메소드는 위 메소드로 알고리즘을 구성한다.
공통적으로 제공해야 하는 구상 메소드는 final로 AbstractClass에서 제공한다.
여러 클래스들에서 공통적으로 제공해야하는 알고리즘이 생기면 코드는 중복될 수 있다.
알고리즘이 바뀌면 모든 클래스의 코드를 변경해야 하고, 공통적인 알고리즘을 제공하는 새로운 클래스를 추가하려면 많은 작업을 해야 한다.
AbstractClass에서 알고리즘을 독점하기 때문에 한 부분만 고치면 된다. 다른 클래스를 추가할 때 프레임 워크를 제공해 주고
몇 가지 메소드만 추가하면 된다.
후크(Hook)
아무것도 하지 않는 구상 메소드를 정의하고, 서브 클래스에서 해당 메소드를 구현하게 한다.
템플릿에서 추상 메소드를 사용할 때와 후크를 사용할 때의 차이는 추상메소드는 특정 알고리즘을 서브 클래스에서 구현해야 하는 경우 사용할 수 있고, 후크는 특정 알고리즘 단계가 선택적으로 적용되는 경우 사용할 수 있다.
템플릿 메서드 패턴에서 앞으로 일어날 일이나 막 일어난 일에 서브클래스가 반응할 수 있도록 기회를 제공하는 용도로 사용될 수 있다.
예를 들어, 목록을 재정렬하고 특정 서브 클래스는 화면에 내용을 다시 띄워주어야 하는 경우 후크를 사용할 수 있다.
할리우드 원칙(Hollywood Principle)
“먼저 연락하지 마세요, 저희가 연락드리겠습니다.”
고수준 구성요소에서 저수준 구성요소에 의존하고, 저수준 요소에서 고수준 구성요소에 의존하면 의존성 부패가 발생한다.
어떤 식으로 시스템이 디자인되어있는지 보기 어렵고 유지보수는 어려워진다.
그래서 고수준 구성요소는 언제, 어떻게 쓰일지를 결정하고 저수준 구성 요소는 메소드 구현만을 구현한다.
저수준 구성 요소에서 고수준 구성 요소를 직접 호출할 수 없다.
저수준 구성요소는 고수준 구성요소를 호출하기 전까지 직접 호출하지 않는다.
✅ 디자인 패턴 구현 깃허브 주소
Reference.
1. 헤드 퍼스트 디자인 패턴