템플릿 메서드 패턴
- 행동 관련 디자인 패턴.
- 알고리듬 구조를 서브 클래스가 확장할 수 있도록 템플릿으로 제공하는 방법.
- 추상 클래스는 템플릿을 제공하고 하위 클래스는 구체적인 알고리듬을 제공한다.
읽어오고 처리하고 출력하는 등의 알고리듬 구조를 템플릿으로 제공하는 패턴.
템플릿을 상속받는 서브클래스가 구체적인 로직을 구현한다.
이 패턴은 상속을 사용한다.
템플릿 메서드 패턴의 클래스 다이어그램
AbstractClass 역할이 중요하다.
여기서 반드시 templateMethod() 역할을 하는 메서드를 포함하고 있어야 한다.
templateMethod()는 알고리듬의 구조를 표현한 메서드라고 볼 수 있다.
추상화하고 싶은 로직이 있으면 특정 단계를 하위 클래스에서 재정의할 수 있게 그 부분을 추상 메서드로 빼내서 templateMethod() 안에서 호출하는 식으로 구조를 제공해준다.
ConcreteClass에서는 추상화된 부분만 구현하여 전체적인 로직은 상위 클래스의 templateMethod()에서 정의하고 구체적인 로직은 하위 클래스에서 제공해준다.
하위 클래스에서 제공한 이 코드가 상위 클래스에서 정의된 흐름 그대로 호출되기 때문에 제어권이 역전되었다고 볼 수 있다.
템플릿 메서드 패턴 적용하기
기존 코드에 문제점은 많은 로직이 중복된다는 점이다.
중간에 몇 라인만 다르고 비슷한 코드가 사방에 나눠져 있는 경우가 흔하게 발생한다.
이럴 때 적용하기 좋은 패턴이다.
템플릿 메서드 패턴의 장점
1. 템플릿 코드를 재사용하고 중복된 코드를 줄일 수 있다.
2. 템플릿 코드를 변경하지 않고 상속을 받아서 구체적인 알고리듬만 변경할 수 있다.
템플릿 메서드 패턴의 단점
1. 리스코프 치환 원칙을 위반할 수도 있다.
리스코프 치환 원칙은 상속 구조에서 상위 클래스 타입으로 사용하는 코드를 상위 타입을 상속받는 클래스로 치환하였을 때 코드가 의도했던 대로 동작해야 한다는 원칙이다.
2. 알고리듬 구조가 복잡할수록 템플릿을 유지하기 어려워진다.
https://refactoring.guru/ko/design-patterns/template-method
'프로그래밍 강의 메모 > 코딩으로 학습하는 GoF의 디자인 패턴_백기선' 카테고리의 다른 글
행동 관련 디자인 패턴 > 비지터 패턴(Visitor Pattern) (0) | 2022.05.27 |
---|---|
행동 관련 디자인 패턴 > 템플릿 콜백 패턴(Template Callback Pattern) (0) | 2022.05.27 |
행동 관련 디자인 패턴 > 전략 패턴(Strategy Pattern) (0) | 2022.05.27 |
행동 관련 디자인 패턴 > 상태 패턴(State Pattern) (0) | 2022.05.27 |
행동 관련 디자인 패턴 > 옵저버 패턴(Observer Pattern) (0) | 2022.05.26 |