템플릿 메서드 패턴
핵심 기능과 부가 기능을 분리해야함
중복되는 부가 기능 (ex 로깅, 트랜잭션 등) 은 abstract class로
서브 클래스를 여러개 만들지 않고 익명 내부 클래스를 사용하여 효율적으로 구현가능
좋은 설계란?
변경이 일어날때 드러남
SRP를 지켜 변경 지점을 하나로 설정
참고. 디자인 패턴 책 - GoF 디자인 패턴
템플릿 메서드 정의
작업에서 알고리즘의 골격을 정의하고 일부 단계를 하위 클래스로 연기함 템플릿 메서드를 사용하면 하위 클래스가 알고리즘의 구조를 변경하지 않고도 알고리즘의 특정 단계를 재정의할 수 있음
그러나,
추상 클래스를 상속받는 하위 클래스는 컴파일 단계부터 강결합 상태임
자식 클래스는 부모 클래스의 코드를 사용하지 않는데, 알아야함
이러한 상속의 단점을 제거하는 디자인 패턴이 전략 패턴이다
전략 패턴
상속이 아닌 비즈니스 로직은 위임
부가 기능은 context에서 따로 처리
템플릿 콜백 패턴
자바 8부터 함수객체 람다를 파라미터로 넘길 수 있음
전략 패턴의 구현 방법중 하나이지만 템플릿과 콜백의 기능을 강조
스프링에서 많이 사용함 (xxxTemplate)