Template Method
템플릿 메소드는 부모 클래스에서 알고리즘 뼈대를 정의하고, 자식 클래스에서 구조를 변경하지 않고 특정 단계를 재정의하는 행위 디자인 패턴입니다.
이미지에서 볼 수 있듯이 세 개의 DataMiner의 mine 메소드는 알고리즘 뼈대가 동일합니다.
그러나 각각 따로 구현하여 코드의 중복이 매우 많고 추가될 클래스에도 중복된 코드를 작성하게 되므로 유지보수성이 떨어집니다.
DataMiner라는 인터페이스 또는 추상 클래스를 정의하고 mine 메소드 내부 로직에서 호출하는 메소드만 자식 클래스가 재정의하게 된다면 어떻게 될까요?
보이는 것과 같이 다형성도 살릴 뿐 아니라 유지보수가 매우 간단해집니다.
정형화된 패턴을 UML 클래스 다이어그램으로 표현하면 아래와 같습니다.
장점
- 알고리즘 뼈대를 부모 클래스(인터페이스)로 가져와 코드의 중복을 줄일 수 있습니다.
- 전체적인 알고리즘 구조(핵심 로직)에서 일부만 수정하도록 하여 클라이언트의 수정으로 인한 영향을 줄일 수 있습니다.
단점
- 알고리즘 구조가 복잡하고 제한적인 상태에서 자식 클래스에서 재정의할 단계가 많을수록 유지하기 어려울 수 있습니다.
- 추상 또는 자식 클래스를 잘 못 설계/구현하면 리스코프 치환 원칙(LSP)을 위반할 수 있습니다.
참조
'개발 > Design Pattern' 카테고리의 다른 글
[Design Pattern] 추상 팩토리 패턴 (Abstract Factory) (0) | 2022.10.26 |
---|---|
[Design Pattern] 팩토리 메서드 패턴 (Factory Method) (0) | 2022.10.25 |
[Design Pattern] 어댑터 패턴 (Adapter) (0) | 2022.10.24 |
[Design Pattern] 데코레이터 패턴 (Decorator) (0) | 2022.10.24 |
[Design Pattern] 프록시 패턴 (Proxy) (0) | 2022.10.20 |