관리 메뉴

Rootable의 개발일기

try-with-resources 본문

Java

try-with-resources

dev-rootable 2023. 9. 13. 14:40

Java 7에 추가된 구문으로, try-catch-finally 문을 통한 자원 해제 코드가 길어지고 지저분해졌던 점을 개선했다.

 

자바에서 외부자원에 접근하는 경우, 외부자원을 사용한 뒤 반드시 닫아줘야 한다. try-catch-finally문은 아래와 같이
해제한다.

 

FileOutputStream out = null;
try {
    out = new FileOutputStream("exFile.txt");
    ...
} catch (FileNotFoundException e) {
    e.printStackTrace();
} finally {
    if (out != null) {
        try {
            out.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

 

try 문에서 자원을 사용한 뒤, finally 문에서 자원을 해제했다. 이렇게 해제하는 코드를 별도로 담아야 하기 때문에 코드가 복잡하고 가독성이 떨어진다. 그래서 아래처럼 try-with-resources 문을 통해 깔끔하게 만들 수 있다.

 

try (FileOutputStream out = new FileOutputStream("exFile.txt")) {
    ...
} catch (IOException e) {
    e.printStackTrace();
}

 

단, try-with-resources를 사용하기 위해서는 close 메서드를 정의하기 위한 AutoCloseable 인터페이스를 구현해야
한다.
따라서, try에 전달할 수 있는 자원은 AutoCloseable 인터페이스의 구현체로 한정된다.

 

/**
 * @author Josh Bloch
 * @since 1.7
 */
public interface AutoCloseable {
    void close() throws Exception;
}

 

결과적으로 try(...)에 자원 객체를 전달하면 try 코드 블록이 끝나고 자동으로 자원을 해제하는 것이다. 즉, finally문이나 모든 catch 문에서 종료 처리를 하지 않아도 된다.

 

참고로 아래와 같이 try() 안에 복수의 자원 객체를 전달할 수 있다.

 

try(Something1 s1 = new Something1();
    Something2 s2 = new Something2()) {
 
} catch(...) {
    ...
}

 

Reference:

https://dev-coco.tistory.com/20

 

[Java] try - with - resources로 자원해제 처리

자바에서 외부 자원에 접근하는 경우 주의해야할 점은 외부자원을 사용한 뒤 제대로 자원을 닫아줘야 한다. 자원을 닫을 때 try - catch - finally 구문 대신 try - with - resources 구문을 사용하면 코드의

dev-coco.tistory.com

 

 

 

'Java' 카테고리의 다른 글

추상 클래스와 인터페이스  (0) 2023.09.13
final 키워드  (0) 2023.09.13
자바 리플렉션 API  (0) 2023.09.12
자바언어의 특징  (0) 2023.09.09
Java 컴파일 과정과 JVM  (0) 2023.09.09