최대 1 분 소요

7.2.1 요구사항

  • JDBC에 대한 공통 라이브러리를 만들어 개발자가 SQL 쿼리, 쿼리에 전달할 인자, 조회한 데이터를 추출하는 3가지 구현에만 집중
  • SQL Exception을 런타임 Exception으로 변환해 try/catch 절로 가독성을 해치지 않도록 해야함

7.2.2 요구 사항 분리 및 힌트

  • 더 이상 JdbcTemplate은 특정 DAO 클래스에 종속적이지 않다. 이와 똑같은 방법으로 SelectJdbcTemplate을 생성해 반복 코드를 분리한다.
  • JdbcTemplate과 SelectTemplate을 보니 중복 코드가 보인다. 또한 굳이 2개의 클래스를 제공하고 싶지 않다. JdbcTempate과 같은 한 개의 클래스만을 제공하도록 리팩토링 해본다.
  • 위와 같이 SelectJdbcTemplate 클래스로 통합했을 때의 문제점을 찾아보고 이를 해결하기 위한 방법을 찾아본다.
  • SQL Exception을 런타임 Exception으로 변환해 throw 하도록 한다.
  • Connection, PreparedStatement 자원 반납을 close() 메소드를 사용하지 말고 try-with-resources 구문을 적용해 해결한다.
  • SELECT 문의 경우 조회한 데이터를 캐스팅 하는 부분이 있다. 캐스팅하지 않고 구현하도록 개선 한다.
  • 각 쿼리에 전달할 인자를 PreparedStatementSetter를 통해 전달할 수도 있지만 자바의 가변인자를 통해 전달할 수 있는 메소드를 추가한다
  • UserDao에서 PreparedStatementSetter, RowMapper 인터페이스를 구현하는 부분을 JDK8에서 추가한 람다 표현식을 활용하도록 리팩토링 한다.