Java 7 버전 이전에는
다 사용하고 난 자원(resource)을 반납하기 위해서
try-catch-finally 구문을 사용했었습니다.
Java 7버전 이후에 추가된 try with resources 기능은
try 구문에 리소스를 선언하고,
리소스를 다 사용하고 나면 자동으로 반납(close) 해주는 기능입니다.
java.lang.AutoCloseable 인터페이스를 구현하는 객체가
try with resources의 resource로 사용될 수 있습니다.
try-catch-finally
리소스 생성/반납하기
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
public class ResourceClose {
public static void main(String[] args) {
Scanner scanner = null;
try {
// scanner 생성
scanner = new Scanner(new File("input.txt"));
System.out.println(scanner.nextLine());
} catch (FileNotFoundException e) {
e.printStackTrace();
} finally {
// scanner 리소스 반납
if (scanner != null) {
scanner.close();
}
}
}
}
기존(Java 7이전)에 try-catch-finally 구문을 이용하여
리소스를 생성하고, 반납하는 코드입니다.
리소스의 생성은 try 구문에서, 리소스의 반납은 finally 구문에서 하다보니,
리소스를 생성하고, 반납을 빼먹는 경우가 종종 발생했습니다.
try with resources
리소스 생성/반납하기
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
public class ResourceClose {
public static void main(String[] args) {
try (Scanner scanner = new Scanner(new File("input.txt"))) {
System.out.println(scanner.nextLine());
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
}
Java 7 이후에는 try with resources를 이용하여,
리소스를 생성하고, 자동으로 반납합니다.
위 코드는, try-catch-finally 구문으로 리소스를 생성하고 반납했던 앞의 예제와 같은 내용입니다.
try(Scanner scanner = new Scanner(new File("input.txt")))
try-catch-finally 구문과 달리
try옆에 괄호안에서 리소스를 생성합니다.
그리고, 어느 곳에서도 생성된 리소스를 반납하는 코드가 없습니다.
try with resources 구문을 사용하면 자동으로 리소스가 반납됩니다.
try with resources 구문에 사용 되는 리소스는 (try옆의 괄호 안에서 정의 될수 있는 리소스)
반드시 java.lang.AutoCloseable 인터페이스를 구현해야 합니다.
예제에 사용된, Scanner 클래스도 AutoCloseable 인터페이스가 구현되어 있습니다.
더 자세한건 밑에 링크에서 참조해주세요
[Java] Try with resources 로 자원 반납하기 - 어제 오늘 내일 (tistory.com)
[Java] Try with resources 로 자원 반납하기
Java 7 버전 이전에는 다 사용하고 난 자원(resource)을 반납하기 위해서 try-catch-finally 구문을 사용했었습니다. Java 7버전 이후에 추가된 try with resources 기능은 try 구문에 리소스를 선언하고, 리소스
hianna.tistory.com
'JAVA' 카테고리의 다른 글
instanceof를 사용하자 (0) | 2025.03.20 |
---|---|
엑셀에 이미지 넣는 방법 (0) | 2024.05.29 |
람다식 간략한 특징 (0) | 2023.07.05 |
static block의 예시 (0) | 2023.07.05 |
Iterator와 컬렉션 프레임워크 (0) | 2023.06.30 |