Programming/Design Pattern

템플릿 메소드 패턴

부풍 2009. 9. 18. 14:57

템플릿 메소드 패턴에서는 메소드에서 알고리즘의 골격을 정의한다. 알고리즘의 여러 단계중 일부는 서브클래스에서 구현할 수 있다. 템플릿 메소드를 이용하면 알고리즘의 구조는 그대로 유지하면서 서브클래스에서 특정 단계를 재정의 할 수 있다.

* 후크(hook)
: 추상 클래스에서 선언되는 메소드긴 하지만 기본적인 내용만 구현되어 있거나 아무 코드도 들어있지 않은 메소드.
  후크가 있으면 그 메소드를 오버라이드 할 수도 있고 그냥 넘어갈 수도 있다.


        패턴                                                                     설명
---------------------------------------------------------------------------------------------------------
템플릿 메소드 패턴                   알고리즘의 일부 단계를 구현한는 것을 서브클래스에서 처리.
스트래티지 메소드 패턴             바꿔 쓸 수 있는 행동을 캡슐화하고, 어떤 행동을 사용할지는 서브클래스에 맡김.
팩토리 메소드 패턴                   어떤 구상 클래스를 생성할지를 서브클래스에서 결정.


<정리>

■ 템플릿 메소드 패턴은 코드 재사용에 크게 도움이 된다.
■ 템플릿 메소드가 들어있는 추상 클래스에서는 구상 메소드, 추상 메소드, 후크를 정의할 수 있다.
■ 추상 메소드는 서브클래스에서 구현
■ 서브클래스에서 템플릿 메소드에 들어있는 알고리즘을 함부로 바꾸지 못하게 하고 싶다면 템플릿 메소드를 final로 선언.
■ 헐리우드 원칙에 의하면, 저수준 모듈을 언제 어떻게 호출할지는 고수준 모듈에서 결정하는 것이 좋다.
■ 스트래티지 패턴과 템클릿 메소드 패턴은 모두 알고리즘을 캡슐화하는 패턴이지만 전자에서는 상속을, 후자에서는 구성을 이용.