템플릿 메서드 template method 패턴 - 타입스크립트 예시
요약
디자인 패턴 중 템플릿 메서드 template method 패턴을 타입스크립트 코드와 함께 알아봅니다.
템플릿 메서드 (Template Method) 패턴 요약
| 패턴 종류 | 핵심 키워드 |
|---|---|
| 템플릿 메서드 (Template Method) | 변하지 않는 부분은 상위 클래스, 변하는 부분은 하위 클래스에서 재정의(override) |

템플릿 메서드 (Template Method) 패턴
템플릿 메서드 패턴은 알고리즘의 골격(뼈대)은 상위 클래스에서 정의하고, 알고리즘의 특정 단계들은 하위 클래스에서 재정의(override)할 수 있도록 하는 패턴입니다. 즉, 전체적인 로직의 흐름(템플릿)은 부모가 통제하되, 세부적인 내용은 자식에게 위임하는 방식입니다.
앞서 비유로 들었던 '라면 끓이기' 가 바로 이 패턴의 완벽한 예시입니다. 라면을 끓이는 과정은 대체로 정해져 있습니다.
- 물을 끓인다.
- 면과 스프를 넣는다.
- (선택) 계란, 치즈, 만두 등 추가 재료를 넣는다.
- 그릇에 담아낸다.
이 전체 과정이 템플릿 메서드입니다. 여기서 '물을 끓인다'나 '면과 스프를 넣는다' 같은 단계는 모든 라면에서 동일하지만, '추가 재료를 넣는다'는 단계는 어떤 라면을 끓이느냐에 따라 달라집니다. 템플릿 메서드 패턴은 이처럼 변하지 않는 부분은 상위 클래스에 두고, 변하는 부분만 하위 클래스에서 구현하도록 하여 코드의 중복을 줄이고 일관된 구조를 유지하게 해줍니다.
기본 구조
- AbstractClass: 템플릿 메서드를 정의하는 추상 클래스입니다. 템플릿 메서드는 알고리즘의 각 단계를 나타내는 여러 메서드를 순서대로 호출합니다. 이 중 일부는 하위 클래스에서 구현해야 하는 추상 메서드(
abstract method)이거나, 선택적으로 재정의할 수 있는hook메서드일 수 있습니다. - ConcreteClass:
AbstractClass를 상속받아, 알고리즘의 특정 단계를 실제로 구현하는 하위 클래스입니다.
예시: 세상의 모든 라면 만들기
다양한 종류의 라면을 만드는 과정을 템플릿 메서드 패턴으로 구현해 보겠습니다.
먼저, 라면 제조의 전체적인 흐름을 정의하는 AbstractClass인 RamenRecipe를 만듭니다.
이제 RamenRecipe를 상속받아 구체적인 라면 레시피를 만드는 ConcreteClass인 CheeseRamen과 DumplingRamen을 구현합니다.
cook()이라는 템플릿 메서드 덕분에 어떤 라면이든 일관된 순서로 만들어집니다. 개발자는 addExtraIngredients()처럼 달라지는 부분에만 집중하면 됩니다. 만약 '계란 라면'을 추가하고 싶다면, addExtraIngredients()에서 계란을 추가하는 EggRamen 클래스를 새로 만들기만 하면 됩니다.
템플릿 메서드 패턴 중요 키워드
- 알고리즘의 골격을 상위 클래스에서 정의합니다.
- 상속을 통해 동작을 확장합니다. (전략 패턴은 위임을 사용)
- 코드 중복을 제거하고 일관된 구조를 강제할 수 있습니다.
- 상위 작업의 구조를 바꾸지 않으면서 서브 클래스로 작업 일부분을 수행할 수 있습니다.