Computer >> 컴퓨터 >  >> 프로그래밍 >> Java

Java 9의 try-with-resources 문에서 여러 리소스를 선언하는 방법

try-with-resources 문은 Java 9에서 크게 개선되었습니다. 이미 final 변수이거나 사실상 final(effectively final)인 리소스가 있다면, try-with-resources 문 내부에서 새 변수를 다시 선언하지 않고도 기존 변수를 그대로 사용할 수 있습니다.

try 블록에서는 여러 개의 리소스를 동시에 선언할 수 있습니다. 각 리소스는 세미콜론(;)으로 구분하며, 초기화 부분에는 null 또는 non-null이 되는 리소스를 원하는 만큼 자유롭게 나열할 수 있습니다.

try 블록이 정상적으로 종료되거나 예외가 발생하면, JVM은 선언된 순서의 역순으로 각 리소스를 자동으로 닫아줍니다. 따라서 개발자가 finally 블록에서 일일이 close() 메서드를 호출할 필요가 없어 코드가 훨씬 간결하고 안전해집니다.

아래 예제를 통해 try-with-resources 문에서 여러 리소스를 선언하고 사용하는 방법을 확인할 수 있습니다.

예제 코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.Reader;
import java.io.StringReader;

public class MultipleResourcesTest {
    public static void main(String args[]) throws IOException {
        System.out.println(readData("test"));
    }
    static String readData(String message) throws IOException {
        try(Reader inputString = new StringReader(message);
            BufferedReader br = new BufferedReader(inputString)) {
            return br.readLine();
        }
    }
}

위 코드에서는 try 괄호 안에 StringReaderBufferedReader 두 개의 리소스를 선언했습니다. 이때 BufferedReader는 앞서 선언한 inputString 변수를 활용해 생성됩니다.

실행 결과

test

프로그램이 종료되면 두 리소스는 선언된 역순(BufferedReaderStringReader)으로 자동 반납되므로, 별도의 종료 처리 없이도 리소스 누수를 방지할 수 있습니다.