< 템플릿 메서드 패턴 >
- 상속을 통해 기능을 확장해서 사용
- 변하지 않는 부분은 슈퍼클래스에 두고 변하는 부분은 추상 메서드로 정의해둬서
서브클래스에서 오버라이드하여 새롭게 정의해 쓰도록 하는 것
< 단점 >
- DAO 로직마다 상속을 통해 새로운 클래스를 만들어야 한다.
- 메서드가 4개일 경우 4개의 서브클래스를 만들어야 한다.
그래서 나온것이 전략패턴
< 전략 패턴 >
- 개방패쇄원칙(ocp)을 잘지키면서 템플릿 메서드 패턴 보다 유연하고 확정성이 뛰어남
- 오브젝트를 아예 둘로 분리하고 클래스 레벨에서는 인터페이스를 통해서만 의존하도록 만드는 전략 패턴
- OCP관점에서 확장에 해당하는 변하는 부분을 별도의 클래스로 만들어
추상화된 인터페이스를 통해 위임하는 방식
< 템플릿/콜백 패턴 >
- 템플릿 : 어떤 목적을 위해 미리 만들어둔 모양이 있는 툴
- 템플릿 메서드 패턴 : 고정된 틀의 로직을 가진 템플릿 메서드를 슈퍼클래스에 두고
, 바뀌는 부분을 서브클래스의 메서드로 두는 구조
- 콜백 : 실행되는 것을 목적으로 다른 오브젝트의 메서드에 전달되는 오브젝트
- 여러 개의 메서드를 가진 일반적인 인터페이스를 사용할 수 있는 전략패턴의 전략과 달리
템플릿/콜백 패턴의 콜백은 보통 단일 메서드 인터페이스를 사용
템플릿/콜백 패턴의 일반적인 작업흐름
- 전략패턴과 수동 DI를 이해할 수 있어야.. 이해가 되리라.. 아직은 모르겠다
< 스프링의 JdbcTemplate >
- 스프링은 JDBC를 이용하는 DAO에서 사용할 수 있도록 준비된 다양한 템플릿과 콜백을 제공한다.
update()
queryForInt()
queryForObject()
query()
< 정리 >
- JDBC와 같은 예외가 발생할 가능성이 있으면 공유 리소스의 반환이 필요한 코드는
반드시 try/catch/finally 블록으로 관리
- 전략패턴
- 일정한 작업흐름이 반복되면서 그중 일부 기능만 바뀌는 코드가 존재하다면 적용
- 바뀌지 않는 부분은 컨텍스트로, 바뀌는 부분은 전략으로 만들고
인터페이스를 통해 유연하게 전략을 변경할 수 있다.
- 컨텍스트가 하나 이상의 클라이언트 오브젝트에서 사용된다면 클래스를 분리해서 공유하도록 한다.
- 컨텍스트는 별도의 빈으로 등록해서 DI받거나 클라이언트 클래스에서 직접 생성해서 사용한다.
- 템플릿/콜백 패턴
- 단일 전략 메서드를 갖고 전략패턴이면서 익명 내부 클래스를 사용해서 매번 전략을 새로 만들어 사용하고
, 컨텍스트 호출과 동시에 전략 DI를 수행하는 방식
- 콜백의 코드에 일정한 패턴이 반복된다면 콜백을 템플릿에 넣고 재활용하는 것이 편리
- 템플릿과 콜백의 타입이 다양하게 바뀔수 있다면 제네릭스를 이용
- 스프링은 JDBC 코드 작성을 위해 jdbcTemplate을 기반으로 하는 다양한 템플릿과 콜백을 제공
- 템플릿/콜백은 스프링이 객체지향 설계와 프로그래밍에 얼마나 가치를 두고 있는지 잘 보여주는 예
- 스프링이 제공하는 템플릿/콜백을 잘 사용해야하며, 직접 만들어 활용할 수도 있어야 한다.
'책 > 토비 스프링 2020' 카테고리의 다른 글
(토비의 스프링) 5. 서비스 추상화 (0) | 2019.12.24 |
---|---|
(토비의 스프링) 4. 예외 (0) | 2019.12.20 |
(토비의 스프링) 2. 테스트 (JUnit) (0) | 2019.12.19 |
(토비의 스프링) 1. 오브젝트와 의존관계 (IoC/DI ) (0) | 2019.12.18 |
(토비의 스프링) 1. 오브젝트와 의존관계 (DAO의 분리와 확장) (0) | 2019.12.18 |