본문 바로가기
Java

[Java] try-with-resources 를 사용해보자!

by 왕타오 2023. 11. 20.

Try-with-resources

try 구문에 리소스를 선언하고, 리소스를 다 사용하고 나면 자동으로 반납(close) 해주는 기능이다.

Java 7 버전 이후에 추가되었다고 한다.

 

 

아래의 코드는 try-catch-finally 구문을 일반적으로 그리고 습관적으로 작성한 예제이다.

FileWriter 라는 자원을 생성하고, 자원을 다 사용하고 나면 catch 블록 혹은 finally 블록 에서 해당 자원을 해제(반납)한다.

 

선언해야할 자원이 더 많아진다면? 

해제해야할 자원도 많아지고, catch 문도 많아지고, 코드가 너무 길어진다....

 

자원을 해제하지 못하고 예외가 발생한다면? 

자원 해제가 안된채로 남는다...

이 때문에 보통 finally 블록에 자원 해제 코드를 작성한다. 

IDE 의 warning(?) recommend(?)을 보니 'try' with resources 로 변경하라고 나오네? 

 

 

Try-with-resources 로 변경하였더니 아래의 코드와 같이 finally 블록 혹은 try 블록 안에서 자원을 해제할 필요가 없어졌다.
try 구문에 자원을 선언, 전달하면, try 코드 블록이 끝나면 자동으로 자원을 종료해준다.

 

Try-with-resources 를 사용하면

하나의 메소드 안에 여러 자원을 사용하고, 자원을 해제하지 않는 실수를 막아줄 수 있을거 같다!

 

근데 try 구문에 여러개의 자원도 선언, 전달할 수 있을까?

 

리소스가 여러개인 경우에는 try 구문에서 ;(세미콜론)으로 구분하여 선언할 수 있다!

 

해당 리소스들이 해제(반납)되는 순서는 선언의 역순이다!

 

선언된 모든 자원은 다 자동 해제 해줄까?

모든 자원을 무조건 해제해주는것은 아니고 AutoCloseable 인터페이스로 구현된 객체들만 자원이 해제된다.

* AutoCloseable 인터페이스를 구현하여, 사용자가 직접 리소스 클래스를 생성한다면,

해당 자원도 try-with-resources 기능을 통해 자동 해제가 된다.

 

 

AutoCloseable 이 궁금하다면 아래 링크를 참고하자!

 

참고

* https://frontbackend.com/java/closeable-vs-autocloseable

 

Closeable vs AutoCloseable

1. Introduction In this article, we are going to present how Closeable and AutoCloseable interfaces work in Java. 2. Implementing AutoCloseable inter...

frontbackend.com

* https://www.geeksforgeeks.org/closeable-interface-in-java/

 

Closeable Interface in Java - GeeksforGeeks

A Computer Science portal for geeks. It contains well written, well thought and well explained computer science and programming articles, quizzes and practice/competitive programming/company interview Questions.

www.geeksforgeeks.org