#편리한 콜백의 재활용
콜백의 분리와 재활용
복잡한 익명 내부 클래스의 사용을 최소화할 수 있는 방법을 찾아보자.
deleteAll()메소드의 내용을 통틀어서 바뀔 수 있는 것은
오직 "truncate users"라는 문자열 뿐이다.
그렇다면 SQL 문장만 파라미터로 받아서 바꿀 수 있게하고
메소드 내용 전체를 분리해 별도의 메소드로 만들어보자.
deleteAll()메서드를 다음과 같이 분리하였다.
private void executeSql(String query) throws SQLException {
this.jdbcContext.workWithStatementStrategy(
new StatementStrategy() {
@Override
public PreparedStatement makePreparedStatement(Connection c) throws SQLException {
return c.prepareStatement(query);
}
});
}
// ... 생략
public void deleteAll() throws SQLException {
executeSql("truncate users");
}
콜백과 템플릿의 결합
executeSql()메소드는 재사용 가능한 콜백을 담고 있는 메소드이므로
DAO가 공유할 수 있는 템플릿 클래스로 옮겨도 된다.
JdbcContext클래스 안으로 executeSql()메소들 옮겨보자.
public class JdbcContext {
// ... 생략
// 접근 제어자를 public으로 변경한다.
public void executeSql(String query) throws SQLException {
workWithStatementStrategy(
new StatementStrategy() {
@Override
public PreparedStatement makePreparedStatement(Connection c) throws SQLException {
return c.prepareStatement(query);
}
});
}
}
UserDao클래스도 수정한다.
public void deleteAll() throws SQLException {
this.jdbcContext.executeSql("truncate users");
}
테스트를 수행하여 확인한다.
[5.1] 사용자 레벨 관리 기능 추가 (0) | 2020.10.30 |
---|---|
[3.6] 스프링의 JdbcTemplate (0) | 2020.10.29 |
[3.4] 컨텍스트와 DI (0) | 2020.10.29 |
[3.3] JDBC 전략 패턴의 최적화 (0) | 2020.10.28 |
[3.2] 변하는 것과 변하지 않는 것 (0) | 2020.10.28 |
댓글 영역