의도
알고리즘의 뼈대만 정의하고 각 단계에서 수행할 구체적 처리는 서브 클래스 쪽으로 미룬다.
서브 클래스에서 알고리즘의 각 단계를 재정의하여 구현한다.
UML
AbstractClass에서는 알고리즘의 뼈대(TemplateMethod()
)를 정의한다.
TemplateMethod()
내에는 서브 클래스에서 재정의될 메서드들 또는 AbstractClass 내에 구현된 메서드를 호출한다.
AbstractClass의 서브 클래스들은 알고리즘의 뼈대에서 호출될 메서드들을 구현한다.
사용 시기
- 알고리즘의 변하지 않는 부분을 정의한 후 다양해질 수 있는 부분을 서브 클래스에서 정의하도록 남겨둘 때
- 서브 클래스 사이에 공통적인 부분은 한 곳에 모아두고 싶을 때
장점
라이브러리에 정의할 클래스들의 공통 부분을 분리 시킴으로 코드 재사용성을 올린다.
단점
???
구현
무조건 override 해야할 메서드와 override가 가능한 메서드를 구분해야한다. 사용자가 서브 클래스를 구현할 때 모든 메서드를 override하려면 매우 피곤해지기 때문에 추상 클래스에서 어떻게 정의하고 있는지 알고 있어야 한다. 책에서는 이런 메서드를 정의할 때 이름에 규칙을 부여하여 짓도록 권장하고 있다.
추가 바람.