커넥션, 입출력 스트림과 같은 자원을 사용한 후에는 자원을 해제하여 성능 문제, 메모리 누수 등을 방지해야 한다.
try-with-resource는 이러한 자원들 자동으로 해제하는 기능으로, java7부터 도입되었다.
정상적으로 동작하려면 AutoCloseable인터페이스를 구현한 객체를 사용해야 한다.
try()괄호 내에서 변수를 선언해야 한다.
try(BufferedReader br = new BufferedReader(new FileReader("path"))) {
return br.readLine());
} catch (IOException e) {
return null;
}
Q. try-catch-finally대신 try-with-resource를 사용해야 하는 이유는 무엇인가요?
try-catch-finally는 finally블록에서 close()를 명시적으로 호출해야 한다. 하지만 close()호출을 누락하거나 이 과정에서 또 다른 예외가 발생하면 예외처리가 복잡해지는 문제가 있다.
또한 여러 개의 자원을 다룰 경우, 먼저 close()를 호출한 자원에서 에러가 발생하면 다음 close()호출한 자원은 해제되지 않는다. 이를 해결하려면 추가적인 try-catch-finally가 필요하기 때문에 가독성이 떨어지고, 실수한 가능성이 높다.
try-with-resource를 사용하면 try블록이 종료될 때 close()를 자동으로 호출해서 자원을 해제한다.
finally블록 없이도 자원을 안전하게 정리하기 때문에 코드가 간결해진다.
try문에서 여러 자원을 선언하면, 선언된 반대 순서로 자동 해제된다.
Q. Suppressed Exception(억제된 예외)란?
예외가 발생했지만 무시되는 예외를 의미한다. try-with-resource는 close()과정에서 발생한 예외를 억제된 예외로 관리한다.
'cs(with 매일메일)' 카테고리의 다른 글
| [260121수] String객체는 가변일까요, 불변일까요? 그렇게 생각하신 이유도 함께 설명해주세요. (0) | 2026.01.26 |
|---|---|
| [260120화] 네트워크에서 회선 교환 방식과 패킷 교환 방식은 어떤 차이점 있나요? (0) | 2026.01.26 |
| [260116금] Micrometer가 무엇인지 설명해주세요. (0) | 2026.01.23 |
| [260115목] 시간복잡도와 공간복잡도의 차이점은 무엇인가요? (0) | 2026.01.23 |
| [260114수] CDN이란 무엇인가요? (0) | 2026.01.23 |