본문 바로가기
Design Pattern

[Design Pattern] 템플릿 메소드 패턴(Template Method Pattern)에 대해 알아보자

by 개발자J의일상 2022. 7. 15.
반응형

Definition

템플릿 메소드 패턴(Template Method Pattern)은 알고리즘의 골격을 정의한다. 템플릿 메소드를 사용하면 알고리즘의 일부 단계를 서브클래스에서 구현할 수 있으며, 알고리즘의 구조는 그대로 유지하면서 알고리즘의 특정 단계를 서브클래스에서 재정의할 수도 있다.

Behavioral Patterns

 

Situation

- 클라이언트가 알고리즘의 특정 단계만 확장하고 전체 알고리즘이나 해당 구조는 확장하지 않도록 할때 

- 약간의 차이가 있지만 거의 동일한 알고리즘을 포함하는 여러 클래스들이 있는 경우

- 동일한 기능은 상위 클래스에서 정의하면서 확장/변화가 필요한 부분만 서브 클래스에서 구현

 

Structure

 

Pros

- 클라이언트가 대규모 알고리즘의 특정 부분만 재정의하도록 하여 알고리즘의 다른 부분에 발생하는 변경 사항의 영향을 덜 받도록 할 수 있다.

- 중복 코드를 수퍼 클래스로 가져올 수 있다.

- 전체적인 알고리즘은 상위 클래스에서 구현하면서 다른 부분은 하위 클래스에서 구현할 수 있도록 함으로써 전체적인 알고리즘 코드를 재사용하는 데 유용하도록 한다.

Cons

- 일부 클라이언트는 알고리즘의 제공된 골격에 의해 제한될 수 있다.

- 하위 클래스를 통해 기본 단계 구현을 억제하여 Liskov Substitution Principe을 위반할 수 있다.

- 템플릿 메서드는 더 많은 단계를 유지하기가 더 어려운 경향이 있다.

 

비슷한 패턴

Factory Method vs Template Method

Factory Method는 특화된 Template Method 패턴이다. 동시에 Factory Method는 큰 Template Method의 한단계 역할을 할 수 있다.

Factory Method는 파생된 클래스가 오버라이딩한 메소드를 통해 객체를 생성하는 것을 의미하는 간단한 거라면, Template Method는 부모클래스의 메소드를 통해 로직의 순서를 정하고, 그 로직에서 추상메소드를 호출하는 것이다. 파행된 클래스는 그 추상메소드의 상세 알고리즘을 구현하게 된다.

 

Strategy vs Template Method

Template Method상속을 기반으로 한다. 이 메소드를 사용하면 하위 클래스에서 해당 부분을 확장하여 알고리즘의 일부를 변경할 수 있다. Strategy구성을 기반으로 한다. 해당 동작에 해당하는 다른 전략을 제공하여 객체 동작의 일부를 변경할 수 있다. 

Template Method는 클래스 수준에서 작동하므로 정적이다. Strategy는 객체 수준에서 작동하므로 런타임에 동작을 전환할 수 있다.

전략 패턴과 템플릿 메소드 패턴은 모두 알고리즘을 캡슐화하는 패턴이지만 전략 패턴은 상속을, 템플릿 메소드 패턴은 구성을 사용한다.

 

기타

할리우드 원칙 (Hollywood Principle)

먼저 연락하지 마세요. 저희가 연락 드리겠습니다.

의존성 부패(dependency rot) 방지

 

https://refactoring.guru/design-patterns/template-method
헤드 퍼스트 디자인 패턴 개정판 - 에릭 프리먼, 엘리자베스 롭슨
https://gmlwjd9405.github.io/2018/07/13/template-method-pattern.html

 

300x250

댓글