기존 코드 - try-catch-finally 사용
1Connection connection = null;
2Statement statement = null;
3ResultSet resultSet = null;
4
5try {
6 connection = DriverManager.getConnection(/* SECRET */);
7 statement = connection.createStatement();
8
9 resultSet = statement.executeQuery("select * from customers");
10
11 while (resultSet.next()) {
12 var name = resultSet.getString("name");
13 var customerId = UUID.nameUUIDFromBytes(resultSet.getBytes("customer_id"));
14 logger.info("Customer id:{}, name: {}", customerId, name);
15 }
16} catch (SQLException e) {
17 logger.error("Error while connecting to DB", e);
18 throw e;
19}
20finally {
21 try {
22 if (connection != null) connection.close();
23 if (statement != null) statement.close();
24 if (resultSet != null) resultSet.close();
25 } catch (SQLException e) {
26 logger.error("Error while closing connection", e);
27 }
28}
개선 코드 - try with resource 사용
1try (
2 var connection = DriverManager.getConnection(/* SECRET */);
3 var statement = connection.createStatement();
4 var resultSet = statement.executeQuery("select * from customers");
5) {
6 while (resultSet.next()) {
7 var name = resultSet.getString("name");
8 var customerId = UUID.nameUUIDFromBytes(resultSet.getBytes("customer_id"));
9 logger.info("Customer id:{}, name: {}", customerId, name);
10 }
11} catch (SQLException e) {
12 logger.error("Error while connecting to DB", e);
13 throw e;
14}
- 위 코드는 JDBC를 이용해 DB와 연결해서 데이터를 가져오는 코드이다.
- 기존 코드보다 훨씬 간결해진 것을 확인할 수 있다.
Try with resources
- 사용법
1try (/* 자원 생성 */) { 2 /* 자원 사용 */ 3} catch (...) { 4 ... 5} 6/* 자원 자동 반납 */
- 조건
try with resources문에서 사용되는 자원은 반드시 AutoCloseble interface를 구현해야한다.