개념
•
템플릿 메소드 패턴은 여러 클래스에서 공통으로 사용하는 메소드를 템플릿화하여 상위 클래스에서 정의한 뒤, 하위 클래스마다 구현 세부 사항을 다르게하는 패턴이다.
•
즉 변동 가능성이 적은 메소드를 상위 클래스에 두고 변동 가능성이 높은 기능을 하위 클래스에서 만들도록 하여 상위의 메소드 실행 동작 순서는 고정하면서 세부 실행 내용을 다양화시킬 수 있다.
•
템플릿 메소드 패턴은 상속이라는 기술을 극대화하여 전략적으로 런타임에 구현을 변경할 수 있는 것에 초점을 둔다.
구조
•
AbstractClass: 템플릿 메소드를 구현하고 템플릿 메소드에서 사용하는 추상 메소드를 선언해둔 클래스다. 이 추상 메소드는 하위 클래스들이 구현한다.
•
ConcreteClass: 추상 클래스를 상속하여 추상 메소드를 구현하는 클래스다. 이는 상위 클래스의 템플릿 메소드에서 실행된다.
특징
•
사용 시기
◦
클라이언트가 알고리즘의 특정 단계만 확장하고, 전체 알고리즘이나 해당 구조는 확장하지 않도록 할때
◦
동일한 기능은 상위 클래스에서 정의하면서 확장, 변화가 필요한 부분만 하위 클래스에서 구현할 때
•
장점
◦
클라이언트가 대규모 알고리즘의 특정 부분만 재정의하도록 하여, 알고리즘의 다른 부분에 발생하는 변경 사항의 영향을 덜 받도록 한다.
◦
상위 추상클래스로 로직을 공통화 하여 코드의 중복을 줄일 수 있다.
◦
서브 클래스의 역할을 줄이고, 핵심 로직을 상위 클래스에서 관리하므로서 관리가 용이해진다
▪
헐리우드 원칙 (Hollywood Principle) : 고수준 구성요소에서 저수준을 다루는 원칙 (추상화에 의존)
•
단점
◦
알고리즘의 제공된 골격에 의해 유연성이 제한될 수 있다.
◦
알고리즘 구조가 복잡할수록 템플릿 로직 형태를 유지하기 어려워진다.
◦
추상 메소드가 많아지면서 클래스의 생성, 관리가 어려워질 수 있다.
◦
상위 클래스에서 선언된 추상 메소드를 하위 클래스에서 구현할 때, 그 메소드가 어느 타이밍에서 호출되는지 클래스 로직을 이해해야 할 필요가 있다.
◦
로직에 변화가 생겨 상위 클래스를 수정할 때, 모든 서브 클래스의 수정이 필요 할수도 있다.하위 클래스를 통해 기본 단계 구현을 억제하여 리스코프 치환 법칙을 위반할 여지가 있다.