본문 바로가기

프로그래밍 강의 메모/코딩으로 학습하는 GoF의 디자인 패턴_백기선

행동 관련 디자인 패턴 > 템플릿 메서드 패턴(Template Method Pattern)

https://inf.run/6Shr

 

코딩으로 학습하는 GoF의 디자인 패턴 - 인프런 | 강의

디자인 패턴을 알고 있다면 스프링 뿐 아니라 여러 다양한 기술 및 프로그래밍 언어도 보다 쉽게 학습할 수 있습니다. 또한, 보다 유연하고 재사용성이 뛰어난 객체 지향 소프트웨어를 개발할

www.inflearn.com

 

 

템플릿 메서드 패턴

  • 행동 관련 디자인 패턴.
  • 알고리듬 구조를 서브 클래스가 확장할 수 있도록 템플릿으로 제공하는 방법.
  • 추상 클래스는 템플릿을 제공하고 하위 클래스는 구체적인 알고리듬을 제공한다.

 

 

읽어오고 처리하고 출력하는 등의 알고리듬 구조를 템플릿으로 제공하는 패턴.

템플릿을 상속받는 서브클래스가 구체적인 로직을 구현한다.

이 패턴은 상속을 사용한다.

 

 

 

템플릿 메서드 패턴의 클래스 다이어그램

 

 

 

AbstractClass 역할이 중요하다.

 

여기서 반드시 templateMethod() 역할을 하는 메서드를 포함하고 있어야 한다.

 

templateMethod()알고리듬의 구조를 표현한 메서드라고 볼 수 있다.

 

추상화하고 싶은 로직이 있으면 특정 단계를 하위 클래스에서 재정의할 수 있게 그 부분을 추상 메서드로 빼내서 templateMethod() 안에서 호출하는 식으로 구조를 제공해준다.

 

ConcreteClass에서는 추상화된 부분만 구현하여 전체적인 로직은 상위 클래스의 templateMethod()에서 정의하고 구체적인 로직은 하위 클래스에서 제공해준다.

 

하위 클래스에서 제공한 이 코드가 상위 클래스에서 정의된 흐름 그대로 호출되기 때문에 제어권이 역전되었다고 볼 수 있다.

 

 

 

 

 

 

 

 

 

템플릿 메서드 패턴 적용하기

기존 코드에 문제점은 많은 로직이 중복된다는 점이다.

중간에 몇 라인만 다르고 비슷한 코드가 사방에 나눠져 있는 경우가 흔하게 발생한다.

이럴 때 적용하기 좋은 패턴이다.

 

 

템플릿 메서드 패턴의 장점

1. 템플릿 코드를 재사용하고 중복된 코드를 줄일 수 있다.

2. 템플릿 코드를 변경하지 않고 상속을 받아서 구체적인 알고리듬만 변경할 수 있다.

 

템플릿 메서드 패턴의 단점

1. 리스코프 치환 원칙을 위반할 수도 있다.

리스코프 치환 원칙상속 구조에서 상위 클래스 타입으로 사용하는 코드를 상위 타입을 상속받는 클래스로 치환하였을 때 코드가 의도했던 대로 동작해야 한다는 원칙이다.

2. 알고리듬 구조가 복잡할수록 템플릿을 유지하기 어려워진다.

 

 

 

 

 

 

https://refactoring.guru/ko/design-patterns/template-method

 

Template Method

Problem Imagine that you're creating a data mining application that analyzes corporate documents. Users feed the app documents in various formats (PDF, DOC, CSV), and it tries to extract meaningful data from these docs in a uniform format. The first versio

refactoring.guru