템플릿 매소드 패턴이란:
- 상위 클래스에서 알고리즘의 구조를 정의하고, 그 알고리즘의 일부 단계를 하위 클래스에서 구현할 수 있도록 하는 패턴
구현법
- 고리즘의 공통적인 부분은 상위 클래스에 두고, 변해야 할 부분은 하위 클래스에서 재정의
특징
- 알고리즘의 구조 변경 없이 세부 동작을 하위 클래스에서 재정의 하여 사용
- 코드의 재사용성과 유연성을 높인다.
AbstractApplicationContext 내 refresh()를 참고하여 탐구
- GenericWebApplicationContext() 내에 refresh()라는 스프링 빈을 생성해주는 매소드가 있는데 이게 전형적인 템플릿 매소드 패턴이 적용된 사례
상속구조

아래부분은 catch구문임
- 이처럼 매소드를 모두 분리한 뒤 호출만 하는 형태로 refresh 매소드는 일종의 템플릿이 됨
GenericWebApplicationContext.java


- AbstractApplicationContext.java에서 try 내에 호출되는 매소드를 재정의하여 사용중인 것을 볼 수 있음
GenericApplicationContext.java
- 반면 GenericApplicationContext에서는 refresh() 매소드의 catch문 내에서 호출하는 cancelRefresh()만 재정의 되어있다.
정리
- refresh 매소드는 스프링 빈을 생성하는 알고리즘은 동일하지만 내부 구현 단계를 상속받는 클래스에서 재정의하여 사용하는 방식으로 구현되어있다.