Spring 템플릿 활용하기
개 요
템플릿이란, 코드 중에서 변경이 거의 일어나지않고 일정한 패턴이 유지되는 특성을 가진 부분을 독립시켜 재사용 할 수있게 해주는것 입니다.
보통 개발을 하다보면 공통적으로 변하지 않는 부분들이 존재합니다.
예를들어, DAO에서 커넥션을 맺고 쿼리를 수행하고 예외처리로 커넥션을 닫아 준다고 하였을때, 공통적으로 변하지않는 부분은 커넥션맺는것과 예외처리로 커넥션을 닫아 주는 부분이고 변하는부분은 쿼리를 수행하는 부분입니다.
커넥션맺고 예외처리로 커넥션을 닫는 부분을 공통화하게되면 휴먼에러도 적어지고 개발속도도 증가되며, 공통기능 변경 시 하나하나 변경하는 것이 아니라 한부분만 수정하여 유지보수에 매우 유리하게 활용할수있습니다.
이렇게 공통화하는 것을 템플릿이라고 하며, 이 글에서는 템플릿을 하는 방법에 대해서 알아보겠습니다.
디자인패턴을 적용한 분리방법
첫째, 메소드추출.
가장간단한 방법으로 변하는 부분만 메소드로 빼는것입니다.
둘째, 템플릿 메소드 패턴 적용.
변하지않는부분은 슈퍼클래스에 두고 변하는부분은 추상메소드로 정의하여
서브클래스에서 오버라이드하여 새롭게 정의해서 쓰는 방법.
셋째, 전략패턴 적용
변하지않는부분은 컨텍스트에서 관리하고, 변하는부분은 전략의 인터페이스를 만들어 구현체를 통해 기능을 구현하는 방식.
클라이언트/컨텍스트 분리
일반적으로 전략패턴에서는 컨텍스트가 어떤전략을 사용할지를 클라이언트에서 결정한다.
컨텍스트 앞단에 클라이언트를 두고 전략 객체를 생성하여 컨텍스트로 전달하여 사용한다.
전략패턴의 최적화
전략패턴의 문제점으로 클라이언트에서 새로운기능 추가 시 구현클래스가 추가된다는점과 부가적인 정보가 있는경우 객체를 전달받을 수있는 생성자와 이를 저장할 인스턴스 변수를 번거롭게 생성해야하는점이 있다.
이부분을 해결하기위해 로컬클래스 및 익명 내부클래스로 구현하여 구현 클래스파일을 따로만들지 않고 클라이언트에서 중첩클래스로 구현이 가능하다.
넷째, 템플릿콜백 패턴 적용
application 내에서 변하는 부분이 동시에 여러개 존재하는 경우 사용