3장 템플릿
토비의 스프링 1권 3장을 요약한 내용 입니다.
다시 보는 초난감 DAO
public void deleteAll() throws SQLException {
Connection c = dataSource.getConnection();
PreparedStatement ps = c.preparedStatement("delete from users");
ps.executeUpdate(); // 여기서 예외가 발생하면 바로 메소드 실행이 중단되면서 DB 커넥션이 반환되지 못한다.
ps.close();
c.close();
}예외사항에서도 리소스를 제대로 반환할 수 있도록 try/catch/finally를 적용해보자
public void deleteAll() throws SQLException {
Connection c = null;
PreparedStatement ps = null;
try {
c = dataSource.getConnection();
ps = c.prepareStatement("delete from users");
ps.executeUpdate(); // 예외가 발생할 수 있는 코드를 모두 try 블록으로 묶어준다.
} catch (SQLException e) {
throw e; // 예외가 발생했을 때 부가적인 작업을 해줄 수 있도록 catch 블록을 둔다. 아직은 예외를 메소드 밖으로 던지는 것 밖에 없다.
} finally { // finally이므로 try 블록에서 예외가 발생했을 떄나 안 했을 때나 모두 실행된다.
if (ps != null) {
try {
ps.close();
} catch (SQLException e) {} // ps.close() 메소드에서도 SQLException이 밣생할 수 있기 때문에 잡아줘야한다.
}
if (c != null) {
try {
c.close();
} catch (SQLException e) {}
}
}
}변하는 것과 변하지 않는 것
JDBC try/catch/finally 코드의 문제점
분리와 재사용을 위한 디자인 패턴 적용
메소드 추출
템플릿 메소드 패턴의 적용

전략 패턴의 적용

DI 적용을 위한 클라이언트/컨텍스트 분리

JDBC 전략 패턴의 최적화
전략과 클라이언트의 동거
로컬 클래스
익명 내부 클래스
컨텍스트와 DI

JdbcContext를 UserDao와 DI 구조로 만들면 어떤 이점이 있을까?
템플릿과 콜백
템플릿/콜백의 동작원리

편리한 콜백의 재활용
템플릿/콜백의 응용

Last updated