상속을 통해 슈퍼클래스의 기능을 확장할 때 사용하는 가장 대표적인 방법.

변하지 않는 기능은 슈퍼클래스에 만들어 두고 자주 변경되며 확장할 기능은 서브클래스에서 만들도록 한다. 


슈퍼클래스에서는 미리 추상 메소드 또는 오버라이드 가능한 메소드를 정의해두고 이를 활용해 코드의 기본 알고리즘을 담고 있는 템플릿 메소드를 만든다. 


슈퍼클래스에서 디폴트 기능을 정의해두거나 비워뒀다가 서브클래스에서 선택적으로 오버라이드할 수 있도록 만들어둔 메소드를 훅(hook) 메소드라고 한다. 서브클래스에서는 추상 메소드를 구현하거나, 훅 메소드를 오버라이드하는 방법을 이용해 기능의 일부를 확장한다. 


public abstract class Super {

//기본 알고리즘 코드

hookMethod();

abstractMethod();

...

}


proteted void hookMethod(){} //선택적으로 오버라이드 가능한 훅 메소드

public abstract oid abstractethod(); //서브클래스에서 반드시 구현해야 하는 추상 메소드


public class Sub1 extends Super {

protected void hookMethod(){

...

}

public void abstractMethod(){

...

}

}

참고 - 토비의 스프링 3.0


'JAVA > 디자인 패턴' 카테고리의 다른 글

팩토리 메소드 패턴  (0) 2013.07.25
디자인 패턴  (2) 2013.07.25