Cute Happy Ghost
본문 바로가기
JAVA/Java

자원관리 시 conn.close()와 try-with-resources 구문의 차이점

by JENN_tech7 2023. 10. 31.
728x90
SMALL

conn.close()와 try-with-resources 구문은 자원 관리에 사용된다

하지만 작동 방식에 차이가 있다고한다

 

  • conn.close()
    conn.close()는 명시적으로 데이터베이스 연결과 같은 자원을 해제하는 데 사용된다
    이건 개발자가 직접 자원을 해제하는 책임을 지게한다... 책임지기 싫어....
    그리고 주로 finally 블록 내에서 호출된다
    장점이라는 것은 딱히 없고 finally 블록이 없거나 예외 처리가 잘못되면 자원이 제대로 해제되지 않을 수 있어 리소스 누수가 발생할 가능성이 있다는 단점만이 존재...
Connection conn = null;
try {
    conn = dataSource.getConnection();
    // 연결
} catch (SQLException e) {
    // 예외처리
} finally {
    if (conn != null) {
        try {
            conn.close();
        } catch (SQLException e) {
            // close 예외처리
        }
    }
}

 

 

 

  • try-with-resources 구문 사용
    try-with-resources 구문은 Java 7부터 도입된 구문이라고하고, AutoCloseable 인터페이스를 구현한 객체들을 자동으로 관리한다고 한다. 
    이 구문을 사용하면 try 블록이 종료될 때 자동으로 자원을 해제하는 혁명을 가져온다
    그래서 위에 썼던 것처럼 finally 블록을 작성할 필요가 없고, 자원 해제 코드를 작성할 필요가 없어진다
    자원의 해제가 보장되므로 코드가 더 간결하고, 리소스 누수를 방지할 수 있다!
try (Connection conn = dataSource.getConnection()) {
    // 연결
} catch (SQLException e) {
    // 에러처리
}
// finally block이 필요 없고 자동으로 닫힌다

 

 

 

앞으로는 자동으로 자원을 해제해주는 try-with-resources구문을 쓰는 것이 좋을 것 같다

728x90
LIST

댓글