bong-u/til

Try with resources로 간결하게 반납하기

수정일 : 2024-11-15

기존 코드 - 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를 구현해야한다.