Writing /volume1/Web/Public/dokuwiki/data/log/deprecated/2024-11-15.log failed

文書の過去の版を表示しています。


Writing /volume1/Web/Public/dokuwiki/data/log/deprecated/2024-11-15.log failed

the Definition of Template Method Pattern

템플릿 메소드 패턴의 정의는 다음과 같습니다.

 템플릿 메소드 패턴에서는 메소드에서 알고리즘의 골격을 정의합니다.
 알고리즘의 여러 단계 중 일부는 서브클래스에서 구현할 수 있습니다.
 템플릿 메소드를 이용하면 알고리즘의 구조는 구대로 유지하면서 서브
 클래스에서 특정단계를 재정의할 수 있습니다.

이 패턴은 간단하게 말하자면 알고리즘의 틀을 만들기 위한 것입니다. 틀(템플릿)이란 무엇을 뜻할까요?
그냥 메소드에 불과합니다. 조금 더 구체적으로 얘기하자면, 일련의 단계들로 알고리즘을 정의한 메소드입니다.
여러 단계 가운데 하나 이상이 추상 메소드로 정의되며, 그 추상 메소드는 서브클래스에서 구현됩니다.
이렇게 하면 서브클래스에서 일부분을 구현할 수 있도록 하면서도 알고리즘의 구조는 바꾸지 않아도 되도록 할 수 있습니다.

클래스 다이어그램을 한번 살펴봅시다.

Template Method

snippet of AbstractClass

이번에는 추상 클래스에 들어갈 수 있는 메소드의 형식에 대해 조금 더 자세하게 살펴봅시다.

abstract class AbstractClass{
    final void templateMethod(){
         primativeOperation1();
         primativeOperation2();
         concreteOperation();
    }
 
    abstract void primitiveOperation1();
 
    abstract void primitiveOperation2();
 
    final void concreteOperation(){
       //concreteOperation() 코드
    }
 
    void hook() {}
}

여기서 구상단계는 추상 클래스내에서 정의됩니다. 이 메소드는 final로 선언되어 있기 때문에 서브 클래스에서 오버라이드 할 수 없겠죠.
이 메소드는 템플릿 메소드에서 직접 호출할 수도 있고, 서브클래스에서 호출해서 사용할 수도 있습니다.
hook()는 아무것도 하지 않지만, 유연성을 제공하도록 위해 정의 되었습니다. 이런 메소드는 “후크(hook)“라고 부릅니다.
서브클래스에서 오버라이드 할 수 있지만, 반드시 그래야 하는 건 아니죠. 이 메소드를 어떤 식으로 활용하는지는 밑에서 살표보도록 하겠습니다.


QR Code
QR Code study:java:design_pattern:template_method (generated for current page)