태터데스크 관리자

도움말
닫기
적용하기   첫페이지 만들기

태터데스크 메시지

저장하였습니다.

디자인패턴 - TemplateMethod

TemplateMethod 패턴은 끝이 Method 로 끝난다고 해서 종종 FactoryMethod 와 비교하기도 한다.
하지만 엄연히 이 둘은 성격이 다르다.
FactoryMethod 패턴은 객체 생성에 대해 관여하지만, TemplateMethod 패턴은 객체의 생성과는 무관하다.

TemplateMethod 패턴은 메소드에서 알고리즘의 골격을 정의하고 단계의 일부를 서브클래스에서 구현한다라는 정의를 가지고 있다.

사실 TemplateMethod 는 아주 간단한 패턴이다.
모듈화라는 단계를 거치는 개발자라면 충분히 스스로 시도했었을 수도 있는 패턴이기 때문에 예제까지도 필요 없을 듯 하다.


사용자 삽입 이미지

위의 다이어그램에서 AbstractClass 는 templateMethod()라는 메소드를 가지고 있고,
이 메소드안에서 단계적으로 operation1(), operation2(), operation3() 을 차례로 실행한다.
operation1(), operation2() 는 추상(abstract) 메소드이지만, operation1() 은 추상 메소드가 아니다.
서브 클래스인 ConcreteClass1 은 operation1(), operation2() 를 구현함으로써 templateMethod() 가 동작이 가능하게 할 수 있다.
ConcreteClass2 는 operation1(), operation2() 를 구현하고 operation3() 를 override 했다.
AbstractClass 의 operation3() 을 무시하고 서브클래스의 operation3() 이 동작하게 했다는 의미인데
이것을 보통 hooking 이라고 표현하곤 한다.

이렇게 어떠한 일의 처리의 일부분을 분리해서 서브클래스에서 다양성을 갖출수 있는 것이 TemplateMethod 이다.

간단한 패턴이기때문에 별다른 예도 별로 필요치 않을 것 같다.
하지만 TemplateMethod 패턴이 가지는 의미는 중요한데...
객체의 생성이라던지 하는 구조적인 측면의 패턴들과는 달리 로직의 분리를 취한다는 점 때문이다.

HttpServlet 은 URL에 대해 GET, POST, HEAD 등의 방법으로 HTTP 요청이 들어오면 동작한다.
이 때 HttpServlet 의 service 메소드가 먼저 실행된다.
이 안에서 WAS 는 어떠한 각자의 나름대로의 처리를 하고,
요청 방법에 따라 doGet, doPost 등의 메소드로 다시 분기를 하게 된다.
HttpServlet 은 위의 다이어그램에서
AbstractClass 를 HttpServlet 으로, templateMethod 를 service 로,
그리고 operation1, operation2 를 각각 doGet, doPost 으로
바로 대치가 되는 전형적인 TemplateMethod 패턴이다.

TemplateMethod 패턴을 너무 남용하여 operation 을 너무 잘게 썰어 놓는다면,
서브 클래스에서 이 로직이 어떻게 흘러가는지를 알 수 없게 되어 버리는 단점이 생긴다.
유지 보수의 입장에서 소스를 봐도 잘 이해가 되지 않고 여기 저기 소스를 쫒아다니다 지쳐버리는 일이 생긴다.

TemplateMethod 가 과유불급이 되지 않도록 패턴을 구성하기 앞서 많이 생각해 봐야 할 것이다.

'develop > java patterns' 카테고리의 다른 글

디자인패턴 연습 6  (0) 2008/06/25
디자인패턴 - Command  (6) 2008/06/24
디자인패턴 - TemplateMethod  (0) 2008/06/24
디자인패턴 연습 5  (0) 2008/06/18
디자인패턴 - Flyweight  (3) 2008/06/18
디자인패턴 - Singleton  (1) 2008/06/17
Trackback 0 Comment 0
prev 1 ... 126 127 128 129 130 131 132 133 134 ... 244 next