Template Method Pattern Class 정리본

Template Method Pattern Class란?
상위 클래스쪽에 템플릿에 해당하는 메서드가 정의 되어 있고, 그 메서드의 정의 안에는 추상메서드가 사용되고있다.(순수가상함수)
상위 클래스만 보면 추상 메서드를 '어떻게 호출하고 있는지' 알 수 있지만, '어떤 처리가 수행되는지'는 알 수 없다.

추상 메서드를 실제로 구현하는 것은 하위메서드 이다.
서로 다른 하위 클래스에서 서로 다른 구현을 실행하면 서로 다른 처리가 실행된다.(다형성 느낌이랄까?)
하위 클래스가 어떤 구현을 하더라도, 처리의 큰 흐름은 상위 클래스에서 결정한대로.
즉, 상위 클래스에서 처리의 뼈대 결정하고, 하위 클래스에서 구체적인 내용을 결정하는 디자인 패턴.

AbstractClass( 추상 클래스 )
ConcreteClass( 구현 클래스 ) ( 보통 복수 )



Template Method 사용의 장점과 주의점

1. 로직을 공통화 할 수 있다.
  - 만약 AbstractClass 없이 ConcreteClass1, ConcreteClass2, ConcreteClass3 등으로 구현 클래스만 제작해서 사용하다가,공통된 부분에서 버그가 발견되면, ConcreteClass 1~3 까지 모두 방문하며 변경을 해야 한다.
    AbstractClass 를 사용할 경우 공통된 부분이 AbstractClass 에 존재하기 때문에 AbstractClass만 신경쓰고 수정하면 된다.

2. 상위 클래스와 하위 클래스의 연계
  - 상위 클래스가 하위 클래스의 method 를 호출하고 있기 때문에, 상위 클래스가 "어떻게" 호출하는지를 알아야
   하위 클래스를 제대로 만들 수 있다. ( 경우에 따라서 불가능할 수도 있다. )

3. 하위 클래스를 상위 클래스와 동일시한다.
 - AbstractClass 형태의 변수에 ConcreteClass 들의 instance 를 박아 넣을 수 있어서,
   instanceof 등의 operation 없이 바로 프로그램을 작동 가능하게 할 수 있고,
   runtime 에 concrete class 를 바꿔치기 하여, 경우에 따라 필요한 동작을 하도록 할 수 있다.


보충 학습
- Template method 를 사용하면, 하위 클래스에서 메소드가 구현되길 기대하고,
 다른 말로, 하위 클래스에 대해서 그 메소드의 구현을 요청하는 꼴이 됩니다. 
 이것을 subclass responsibility ( 하위 클래스 책임 )이라 부릅니다.

- 상위 클래스와 하위 클래스의 협조.
  상위 클래스에서 기술을 많이 하면, 하위 클래스에서는 기술할 내용이 적어져서 편하지만,
  하위 클래스의 자유는 줄어들게 된다.
  반대로 상위 클래스에서 기술을 적게 하면 하위 클래스의 기술이 어렵지만 자유도는 높아진다.
  하지만 하위 클래스간의 중복이 생기기 쉽다.
 ( Trade off 를 잘 고려해서 설계해야 함. )

첨부: http://schwein7.tistory.com/259 

이 글을 공유하기

댓글

Designed by JB FACTORY