try-with-resources

java로 작업이 되어 있는 오픈소스를 분석하던 도중 신기한 코드를 보았습니다.

바로 try문 안에 소괄호가 있는 것인데요!

제가 알고 있는 try문은 바로 실행문으로 넘어가는 것인데, 이것이 바로 try-with-resources라고 하네요.

이는 무엇인지 궁금하여, 알아보게 되었습니다.

 


1. try-with-resources

try-with-resource 구문은 Java 7에서 도입된 기능으로, 리소스를 명시적으로 닫아주는 것이 아니라, 자동으로 닫아주는 구조를 제공한다고 합니다.

이를 통해 코드가 더 간결하고 안전해지며, 리소스를 제대로 해제하지 않아 발생할 수 있는 메모리 누수 or 다른 문제를 방지할 수 있습니다.

 


2. 기본 문법

그러면 직접 사용해 보기 전에, 문법이 어떻게 이루어져 있는지 확인해 봅시다.

이 구문은 AutoCloseable 인터페이스를 구현하는 객체를 사용합니다.

이 객체는 try 블록이 끝나면, 자동으로 닫힙니다.

    ※ 이 때, ResourceTypeAutoCloseable을 구현하는 리소스 클래스입니다.

try (ResourceType resource = new ResourceType()) {
    // resource를 사용한 코드
} catch (ExceptionType e) {
    // 예외 처리 코드
}

 


3. 예시

저는 이 구문을 텍스트를 읽어주는 BufferedReader 기능에 대입하였습니다!

다음과 같이 입력하여 사용했습니다.

try (BufferedReader reader = new BufferedReader(new FileReader("test.txt"))) {
    String line;
    while ((line = reader.readLine()) != null) {
        System.out.println(line);
    }
} catch (Exception e) {
    log.error({}, e.toString);
}

이렇게 하면, try 코드 블록이 끝난 후, 자동으로 close()메서드가 호출되어 자원이 해제 되기에 불피요한 메모리 누수 or 파일 핸들 누수를 피할 수 있습니다.

 


4. 장점 및 주의점

try-with-resource의 가장 큰 장점은 자원을 자동으로 안전하게 닫아주기 때문에, 자원을 직접 닫는 코드를 작성할 필요가 없어 코드의 안정성을 높일 수 있어요.

또한, 예외 처리를 간소화하여 코드의 복잡성을 줄이고, 개발자가 실제 로직에 집중할 수 있게 해줍니다.

 

하지만, 이 구문은 AutoCloseable 인터페이스를 구현한 자원에만 사용할 수 있으며, 여러 자원을 동시에 사용할 경우, 각 자원을 별도의 try-with-resource 문으로 관리하는 것이 좋아요.

 


5. 정리하며

지금까지 try-with-resources에 대해 알아보았습니다.

자원을 자동으로 관리하고 싶다면, 이 구문을 사용하는 것이 좋을 것 같아요!

 

참고

F-Lab 님의 자바의 try-with-resources 이해하기

망나니개발자 님의 [Java] try-with-resources란? try-with-resources 사용법 예시와 try-with-resources를 사용해야 하는 이유