템플릿 메서드 패턴이란?
위키백과
동작 상의 알고리즘의 프로그램 뼈대를 정의하는 행위 디자인 패턴이다. 알고리즘의 구조를 변경하지 않고 알고리즘의 특정 단계들을 다시 정의할 수 있게 해준다.
특징
•
뼈대와 특정이라는 키워드가 중요하다.
만약 우리가 홍차와 커피를 전문으로 판매하는 카페를 운영하고 있다고 생각해보자
템플릿 메서드 패턴을 적용하기 전
일반적으로 홍차와 커피를 만드는 과정은 다음과 같이 정의할 수 있다. 그런데 생각해보면 동일한 순서를 가지고 있었던 것이었다. 하지만 다른 점도 있었다. 이 과정을 어떻게 해야 더 편하게 정의할 수 있을까?
템플릿 메서드 패턴을 적용한 후
이렇게 동일한 부분을 일반화 시켰다. 그러니 아래와 같이 홍차의 경우 (찻잎 넣기, 레몬 추가), 커피의 경우 (커피 넣기, 우유-설탕 추가)만 바뀌는 것을 찾을 수 있었다.
결론적으로 동일한 실행 과정을 거치지만 일부 과정이 다른 클래스의 실행 과정을 서브클래스로 위임하는 것이다. 이렇게 된다면 사용자 입장에서는 뜨거운 음료 레시피(홍차 or 커피) 만 넣어주면 알아서 모든 단계가 실행된다. 그런데 여기서 조금 특이한 점이 있다. 전략 패턴과 비슷하지 않은가? 하지만 다르다. 왜냐하면 전략 패턴의 경우 홍차가 뜨거운 음료 레시피 내부에 포함 되어져 있을 것이다. 템플릿 메서드 패턴의 경우는 포함 된 것이 아닌 위임이다. 아래는 동일한 홍차와 커피를 템플릿 메서드 패턴과 전략 패턴으로 만들었을 때의 그림이다.
위의 그림을 그리면서 필자가 느낀 것은 만약 알고리즘 군이 많이 존재한다면 전략 패턴을 아니라면 템플릿 메서드를 선택하는 것이 좋을 것 같다는 생각을 했다. 만약 위와 같이 2개(홍차, 커피)의 클래스만 존재하면 된다면 굳이 인터페이스를 만들어서 그걸 다시 음료라는 클래스로 옮겨 담을 필요 없이 템플릿을 만들면 되는 것이다.
템플릿 메서드 패턴 이해하기
템플릿 메서드 패턴이란?
위키백과
동작 상의 알고리즘의 프로그램 뼈대를 정의하는 행위 디자인 패턴이다. 알고리즘의 구조를 변경하지 않고 알고리즘의 특정 단계들을 다시 정의할 수 있게 해준다.
•
뼈대와 특정이라는 키워드가 중요하다.
AbstractClass.doAbsolutelyThis() - 물 끓이기 or 컵에 옮기기
ConcreteClass - 홍차 or 커피
ConcreteClass.primitiveOperation1, 2, doSomething() - 찻잎넣기, 커피넣기, 레몬추가, 우유-설탕추가