본문 바로가기

설계/디자인 패턴

템플릿 메소드 패턴

개요

템플릿 메소드 (TEMPLETE METHOD) 패턴은 비지니스 로직이나 알고리즘과 같이 공통으로 반복해서 사용 되는 부분을 세부 구현으로 부터 분리하는 패턴 입니다.

이것은 스트래티지 (STRATEGY) 패턴과 접근 방식과 내용이 유사하지만 차이점은 템플릿 메소드 패턴의 경우 상속을 이용한다는 점과 스트래티지 패턴은 인터페이스를 이용한다는 점에서 차이가 있습니다.

 


설명

템플릿 메소드 패턴은 비지니스 로직에 해당하는 공통 부분을 미리 구현해 놓고 세부 구현 부분을 비워 두는 형태로 구성 됩니다.

템플릿 메소드가 정의된 클래스를 상속하는 하위 클래스에서 구현을 강제하기 위해 주로 추상 클래스 형태가 사용 되지만 빈 함수로 구성된 일반 클래스로 구성이 되어도 상관 없습니다.

하지만 이와 같이 템플릿 메소드 패턴은 상속을 이용하기 때문에 비지니스 로직과 세부 구현이 강하게 결합이 되는 형태여서 향후 코드의 변경이 어렵다는 문제를 가지고 있습니다.

위에 클래스 다이어그램을 살펴 보겠습니다. 먼저 Grinder 추상 클래스에 doGrind() 함수에 필요한 기능을 미리 구현해 놓았다고 가정 하겠습니다.

그리고 Grinder 의 fill, on, off 함수를 각각 abstract 추상 함수로 정의해 놓았습니다. Grinder 를 상속 하는 하위 클래스는 각각 fill, on, off 함수를 강제로 구현해야 되는 것 입니다.

여기에서는 예시로 CoffeeBeanGrinder, SnowConeMaker 를 선언 했습니다. 둘다 상속 받은 Grinder 의 doGrind() 함수를 이용해 공통적인 비지니스 로직을 서로 사용 할 수 있습니다.

 


정리

  • 템플릿 메소드 패턴은 비지니스 로직을 세부 구현으로 부터 분리하는 패턴 입니다.
  • 대체로 템플릿 메소드 패턴이 적용된 클래스는 추상 클래스로 구성 됩니다. 즉 주요 로직만 미리 만들어 두고 세부 구현은 상속을 받는 하위 클래스에게 맡기는 형태 입니다.
  • 상속에 의해 템플릿 메소드 패턴이 정의된 클래스의 비지니스 로직이 하위 클래스에서 사용되기 때문에 세부 구현과 강하게 결합되는 문제가 있습니다.

'설계 > 디자인 패턴' 카테고리의 다른 글

모노스테이트 패턴  (0) 2020.08.22
싱글톤 패턴  (0) 2020.08.20
파사드 패턴  (0) 2020.08.20
스트래티지 패턴  (0) 2020.08.18
템플릿 메소드 패턴  (0) 2020.08.18
커맨드 패턴  (0) 2020.08.17