try-with-resources
- try(..)에 선언된 객체에 대해서 try 문이 종료될 때 자동으로 자원을 해제해주는 기능이다.
- try 내의 객체가 AutoCloseable을 구현했다면 try 문을 벗어날 때 객체의 close()를 호출한다.
- 만약 try 내의 객체가 AutoCloseable을 구현하지 않았다면, 객체의 close()가 호출되지 않는다.
- try 문 외에 catch, finally 문도 사용할 수 있다.
Pros
- 코드를 짧고 간결하게 만든다. 👉 코드를 읽기 쉽고 유지보수하기 쉽게 만든다.
- try-catch-finally처럼 명시적으로 close()를 호출하려면 많은 if 문과 try-catch 문을 사용해야 한다.
- 실수로 close()를 깜빡하는 경우가 생길 수 있다.
- try-with-resources를 사용하면 이런 자잘한 버그가 발생할 가능성이 적어진다.
Code
- try(..)에 Connection, PreparedStatement 객체들을 선언 및 할당한다.
- try(..)에서 선언한 변수들은 try 내에서 사용할 수 있다.
- try 문을 벗어나면 try(..)에서 선언된 객체들의 close()를 호출한다.
- 따라서, finally에서 명시적으로 close()를 호출할 필요가 없다.
1
2
3
4
5
6
7
8
try (
Connection connection = getConnection();
PreparedStatement pstm = connection.prepareStatement(query)
) {
pstm.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}