< 템플릿 메서드 패턴 >

- 상속을 통해 기능을 확장해서 사용

- 변하지 않는 부분은 슈퍼클래스에 두고 변하는 부분은 추상 메서드로 정의해둬서

서브클래스에서 오버라이드하여 새롭게 정의해 쓰도록 하는 것


단점 >

- DAO 로직마다 상속을 통해 새로운 클래스를 만들어야 한다.

- 메서드가 4개일 경우 4개의 서브클래스를 만들어야 한다.


그래서 나온것이 전략패턴

                                                                               


< 전략 패턴 >

- 개방패쇄원칙(ocp)을 잘지키면서 템플릿 메서드 패턴 보다 유연하고 확정성이 뛰어남

- 오브젝트를 아예 둘로 분리하고 클래스 레벨에서는 인터페이스를 통해서만 의존하도록 만드는 전략 패턴

- OCP관점에서 확장에 해당하는 변하는 부분을 별도의 클래스로 만들어 

 추상화된 인터페이스를 통해 위임하는 방식



< 템플릿/콜백 패턴 >

- 템플릿 : 어떤 목적을 위해 미리 만들어둔 모양이 있는 툴

- 템플릿 메서드 패턴 : 고정된 틀의 로직을 가진 템플릿 메서드를 슈퍼클래스에 두고

, 바뀌는 부분을 서브클래스의 메서드로 두는 구조

- 콜백 : 실행되는 것을 목적으로 다른 오브젝트의 메서드에 전달되는 오브젝트


- 여러 개의 메서드를 가진 일반적인 인터페이스를 사용할 수 있는 전략패턴의 전략과 달리 

 템플릿/콜백 패턴의 콜백은 보통 단일 메서드 인터페이스를 사용


템플릿/콜백 패턴의 일반적인 작업흐름



- 전략패턴과 수동 DI를 이해할 수 있어야.. 이해가 되리라.. 아직은 모르겠다



< 스프링의 JdbcTemplate >

- 스프링은 JDBC를 이용하는 DAO에서 사용할 수 있도록 준비된 다양한 템플릿과 콜백을 제공한다. 


update()

queryForInt()

queryForObject()

query()



< 정리 >

- JDBC와 같은 예외가 발생할 가능성이 있으면 공유 리소스의 반환이 필요한 코드는 

 반드시 try/catch/finally 블록으로 관리

- 전략패턴

일정한 작업흐름이 반복되면서 그중 일부 기능만 바뀌는 코드가 존재하다면 적용

바뀌지 않는 부분은 컨텍스트로, 바뀌는 부분은 전략으로 만들고 

  인터페이스를 통해 유연하게 전략을 변경할 수 있다.

- 컨텍스트가 하나 이상의 클라이언트 오브젝트에서 사용된다면 클래스를 분리해서 공유하도록 한다.

- 컨텍스트는 별도의 빈으로 등록해서 DI받거나 클라이언트 클래스에서 직접 생성해서 사용한다.

- 템플릿/콜백 패턴

- 단일 전략 메서드를 갖고 전략패턴이면서 익명 내부 클래스를 사용해서 매번 전략을 새로 만들어 사용하고

    , 컨텍스트 호출과 동시에 전략 DI를 수행하는 방식

- 콜백의 코드에 일정한 패턴이 반복된다면 콜백을 템플릿에 넣고 재활용하는 것이 편리

- 템플릿과 콜백의 타입이 다양하게 바뀔수 있다면 제네릭스를 이용

- 스프링은 JDBC 코드 작성을 위해 jdbcTemplate을 기반으로 하는 다양한 템플릿과 콜백을 제공

- 템플릿/콜백은 스프링이 객체지향 설계와 프로그래밍에 얼마나 가치를 두고 있는지 잘 보여주는 예

- 스프링이 제공하는 템플릿/콜백을 잘 사용해야하며, 직접 만들어 활용할 수도 있어야 한다.

+ Recent posts