@참고)
- 인프런 김영한 - 스프링-핵심-원리-고급편
Jdbc 조회 기능의 예회처리
public int getCount() throws SQLException { Connection c = null; PreparedStatement ps = null; ResultSet rs = n try{ c = dataSource.getConnection(); ps = c.prepareStatement("select count(*) from users"); rs = ps.executeQuery(); rs.next(); return rs.getInt(1); } catch(SQLException e){ throw e; } finally{ JdbcUtils.closeResultSet(rs); JdbcUtils.closeStatement(ps); JdbcUtils.closeConnection(c); } }
위 메서드를 보기만 해도 숨이 턱턱 막힌다.
끔찍한 try catch 구문으로 감까져 있기 때문에 실제 쿼리를 날리는 부분과 jdbc 자원을 관리하는 부분을 메서드로만 분리하는것은 큰 의미가 없다.
디자인 패턴을 적용해 보면 어떨까?
템플릿 메소드 패턴의 적용
- 템플릿 메소드 패턴은 상속을 통해 기능을 확장해서 사용하는 것!
- 변하지 않는 부분은 슈퍼클래스에 두고
- 변하는 부분은 추상 메서드로 정의해 서브클래스에서 재정의해 쓰도록 하는것!
전략 패턴의 적용
- 전략패턴은 변하는 부분을 별도의 클래스로 두어 추상화된 인터페이스를 통해 컨텍스트에서 사용하도록 하는것
- 컨텍스트는 구체 전략이 무엇인지 관심을 가지지 않는다.
템플릿 콜백 패턴
- 전략 패턴의 기본 구조에 익명 내부 클래스를 활용한 방식
- 이런 방식을 스프링 에서는 템플릿/콜백 패턴이라고 부른다.
- 전략 패턴의 컨텍스트를 템플릿이라 부르고, 익명 내부 클래스로 만들어지는 오브젝트를 콜백이라고 부른다.
- 최근에는 주로 람다로 이루어진다
- 보통 템플릿 메서드에 인자로 넘겨서 사용