TemplateMethod

상속을 이용한 대표적인 디자인 패턴은 무엇인가요?

템플릿 메서드 패턴에 대해 설명해 주세요.

  • 템플릿 메서드 패턴여러 클래스에서 공통으로 사용하는 메서드를 템플릿화하여 상위 클래스에서 정의하고, 하위 클래스마다 세부 동작 사항을 다르게 구현하는 패턴이다.

  • 변하지 않는 기능(템플릿)은 상위 클래스에 만들어두고, 자주 변경되며 확장할 기능은 하위 클래스에서 만들도록하여, 상위의 메서드 실행 동작 순서는 고정하면서, 세부 실행 내용은 다양화 될 수 있는 경우에 사용된다.

  • 전체적으로는 동일하면서 부분적으로는 다른 구문으로 구성된 메서드의 코드 중복을 최소화할 때 유용하다.

디자인 패턴에서의 템플릿은 변하지 않는 것을 의미한다.

img.png
  • 추상 클래스는 알고리즘의 단계들의 역할을 하는 메서드들을 선언하며, 이러한 메서드를 특정 순서로 호출하는 실제 템플릿 메서드도 선언한다. 단계들은 abstract로 선언되거나 일부 디폴트 구현을 갖는다.

  • 구상 클래스들은 모든 단계들을 오버라이드 할 수 있지만, 템플릿 메서드 자체는 오버라이드 할 수 없다.

  • [장점]

    • 상위 클래스로 로직을 공통화하여 중복 코드를 줄일 수 있다.

    • 자식 클래스의 역할을 줄여 핵심 로직의 관리가 용이하다.

    • 코드를 객체지향적으로 설계할 수 있다.

  • [단점]

    • 추상 메서드가 많아지면서 클래스 관리가 어려워질 수 있다.

    • 로직에 변화가 생겨 상위 클래스를 수정할 때, 모든 서브 클래스의 수정이 필요할 수도 있다.

    • 하위 클래스를 통해 디폴트 단계 구현을 억제하여 리스코프 치환 법칙을 위반할 수 있다.

참고

Last updated