Search
Duplicate
🧿

Template Method

개념

템플릿 메소드 패턴은 여러 클래스에서 공통으로 사용하는 메소드를 템플릿화하여 상위 클래스에서 정의한 뒤, 하위 클래스마다 구현 세부 사항을 다르게하는 패턴이다.
즉 변동 가능성이 적은 메소드를 상위 클래스에 두고 변동 가능성이 높은 기능을 하위 클래스에서 만들도록 하여 상위의 메소드 실행 동작 순서는 고정하면서 세부 실행 내용을 다양화시킬 수 있다.
템플릿 메소드 패턴은 상속이라는 기술을 극대화하여 전략적으로 런타임에 구현을 변경할 수 있는 것에 초점을 둔다.

구조

AbstractClass: 템플릿 메소드를 구현하고 템플릿 메소드에서 사용하는 추상 메소드를 선언해둔 클래스다. 이 추상 메소드는 하위 클래스들이 구현한다.
ConcreteClass: 추상 클래스를 상속하여 추상 메소드를 구현하는 클래스다. 이는 상위 클래스의 템플릿 메소드에서 실행된다.

특징

사용 시기
클라이언트가 알고리즘의 특정 단계만 확장하고, 전체 알고리즘이나 해당 구조는 확장하지 않도록 할때
동일한 기능은 상위 클래스에서 정의하면서 확장, 변화가 필요한 부분만 하위 클래스에서 구현할 때
장점
클라이언트가 대규모 알고리즘의 특정 부분만 재정의하도록 하여, 알고리즘의 다른 부분에 발생하는 변경 사항의 영향을 덜 받도록 한다.
상위 추상클래스로 로직을 공통화 하여 코드의 중복을 줄일 수 있다.
서브 클래스의 역할을 줄이고, 핵심 로직을 상위 클래스에서 관리하므로서 관리가 용이해진다
헐리우드 원칙 (Hollywood Principle) : 고수준 구성요소에서 저수준을 다루는 원칙 (추상화에 의존)
단점
알고리즘의 제공된 골격에 의해 유연성이 제한될 수 있다.
알고리즘 구조가 복잡할수록 템플릿 로직 형태를 유지하기 어려워진다.
추상 메소드가 많아지면서 클래스의 생성, 관리가 어려워질 수 있다.
상위 클래스에서 선언된 추상 메소드를 하위 클래스에서 구현할 때, 그 메소드가 어느 타이밍에서 호출되는지 클래스 로직을 이해해야 할 필요가 있다.
로직에 변화가 생겨 상위 클래스를 수정할 때, 모든 서브 클래스의 수정이 필요 할수도 있다.하위 클래스를 통해 기본 단계 구현을 억제하여 리스코프 치환 법칙을 위반할 여지가 있다.