최대 1 분 소요

7.2.2 요구 사항 분리 및 힌트

  • SQL Exception을 런타임 Exception으로 변환해 throw 하도록 한다.
  • Connection, PreparedStatement 자원 반납을 close() 메소드를 사용하지 말고 try-with-resources 구문을 적용해 해결한다.
  • SELECT 문의 경우 조회한 데이터를 캐스팅 하는 부분이 있다. 캐스팅하지 않고 구현하도록 개선 한다.
  • 각 쿼리에 전달할 인자를 PreparedStatementSetter를 통해 전달할 수도 있지만 자바의 가변인자를 통해 전달할 수 있는 메소드를 추가한다
  • UserDao에서 PreparedStatementSetter, RowMapper 인터페이스를 구현하는 부분을 JDK8에서 추가한 람다 표현식을 활용하도록 리팩토링 한다.

7.3.3 동영상을 활용한 DAO 리팩토링 실습

  • 리팩토링할 때는 가능한 컴파일이 되지 않는 상태가 되지 않도록한다.
  • 이후 테스트 코드를 통과해야한다.
  • 아래 영상은 DAO를 리팩토링하는 과정이다

DAO 리팩토링 1 insert, update, delete 중복 제거

DAO 리팩토링 2 select 문 중복 제거

DAO 리팩토링 3 JdbcTemplate과 SelectJdbcTemplate 통합

DAO 리팩토링 4 라이브러리 리팩토링 및 목록 기능 추가

- YouTube

  • 왜 없지..?

DAO 리팩토링 6 람다 표현식을 사용하도록 리팩토링

7.4 DAO 리팩토링 및 설명

7.4.1 메소드 분리

  • 중복 코드 제거의 시작은 메서드 추출이다. (Extract Method)
  • 한 가지 작업만 처리하도록 분리하다보면 중복 코드가 명확히 보인다.
  • 다른 기준으로 보면 변화가 발생하는 부분과 변화가 발생하지 않는 부분을 분리하는 것이다.

  • 콜백 인터페이스를 활용
    • 함수를 메소드의 인자로 전달하여 코드가 유연해짐
  • 리팩토링을 최대한 안전하게 진행
    • 테스트를 통해서 기능이 정상적으로 동작하는지 반드시 확인 필요
    • 리팩토링과 테스트 주기가 짧아야 한다.