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
'Java' 카테고리의 다른 글
[Java] hashcode() (feat. equals()) (1) | 2023.11.22 |
---|---|
[Java] == vs. equals() (1) | 2023.11.22 |
[Java] Java 실행 옵션에 대해서 알아보자! (feat. GC) (0) | 2023.11.21 |
[Java] System.out.println() 왜 사용하면 안돼? (0) | 2023.11.20 |
[Java] 객체(object) vs. 클래스(class) vs. 인스턴스(instance) (0) | 2023.10.08 |