템플릿 메소드의 전체적인 구조는 위와 같습니다.
AbstractClass는 템플릿 메소드를 정의하며, 하위 클래스에서 알맞게 확장할 수 있는 메소드인 훅 메소드를 제공한다.
템플릿 메소드는 일반적인 메소드와 훅 메소드를 이용한다. 그리고 ConcreteClass는 물려받은 훅 메소드를 재정의하는 역할을 한다.
템플릿 메소드 패턴이란 특정 작업을 처리하는 일부분을 서브 클래스로 캡슐화하여 전체적인 구조는 바꾸지 않으면서 특정 단계에서 수행하는 내용을 바꾸는 패턴이다.
상속으로 슈퍼클래스의 기능을 확장할 때 사용하는 대표적인 방법. 변하지 않는 기능은 슈퍼클래스에 만들어두고 자주 변경되며 확장 할 기능은 서브클래스에서 만들도록 한다.
사용 한다면❓
두 개 이상의 프로그램이 기본적으로 동일한 골격하에 동작 시,
기본 골격에 해당하는 알고리즘은 일괄적으로 관리하면서
각 프로그램마다 달라지는 부분들에 대해서는 따로 만들고 싶을 때
템플릿 메소드 패턴을 사용해보자.
동일한 골격을 갖춘 추상클래스인 teacher클래스
상속받은 수학, 영어 선생님.
선생님들은 출석, 강의, 강의를 마치고 나가시는 루틴을 가졌다.
그러나 가르치는 과목은 다르기 때문에 이를 재정의해서 각자 클래스에 구현한다.
⭕장점
중복코드를 줄일 수 있다.
자식 클래스의 역할을 줄여 핵심 로직의 관리가 용이하다.
좀더 코드를 객체지향적으로 구성할 수 있다.
❌단점
추상 메소드가 많아지면서 클래스 관리가 복잡해진다.
클래스간의 관계와 코드가 꼬여버릴 염려가 있다.
- 알고리즘에서 필수적이지 않은 부분을 필요에 따라 서브클래스에서 구현하는 경우
- 템플릿 메소드(위에서는 prepareReceipe메서드)에서 앞으로 일어날일 또는 막 일어난 일에 대해 서브클래스에서 반응할 기회를 제공할 때
- 서브클래스에 수퍼클래스에서 진행되는 작업에 대한 결정을 내리는 기능을 부여하기 위한 용도
Do not call us, we call You.
헐리우드에서 오디션에 실패한 배우들이 듣던 말이라고 한다.
Template methods lead to an inverted control structure that's sometimes referred to as "the Hollywood principle," that is, "Don't call us, we'll call you". This refers to how a parent class calls the operations of a subclass and not the other way around.
템플릿 메서드는
"할리우드 원칙(Hollywood principle)"이라는 역전된 제어 구조를 끌어냅니다.
부모 클래스는 서브클래스에 정의된 연산을 호출할 수 있지만 반대 방향의 호출 X.
💨 저수준 구성요소에서 시스템에 접속할 수는 있지만 고수준 구성요소를 직접 호출할 수 없게 하라고 한다.
💨 저수준 구성요소는 프로그램에 참여만 하고 언제 어떤식으로 쓰이는지는 고수준 구성요소에서만 결정하라는 것이다.
<<<<<< 의존성 부패(dependency rot)를 방지하기 위해서 >>>>>>
의존성 부패(Dependency Rot)❓
의존성이 복잡하게 얽혀있는 것
시스템이 어떤식으로 디자인 된 것인지 알아보기가 어려워진다.