코딩마을방범대

JAVA의 try-with-resources 본문

💡 백엔드/Java

JAVA의 try-with-resources

신짱구 5세 2024. 6. 25. 14:45
728x90

 

try-with-resources 란?

  • AutoCloseable 인터페이스를 사용하는 자원을 자동으로 닫아주는 시스템
  • 자바 7부터 지원하는 기능

 

AutoCloseable 인터페이스를 구현한 자원

AutoCloseable 인터페이스에는 close() 메소드가 정의되어 있으며, 
try-with-resources 구문이 종료될 때 자동으로 이 메소드가 호출된다.
파일 입출력 관련 클래스 FileInputStream, FileOutputStream, FileReader, FileWriter 등
데이터베이스 관련 클래스 Connection, Statement, ResultSet 등
네트워크 관련 클래스 Socket, ServerSocket, DatagramSocket 등
기타 리소스 관리 클래스 InputStream, OutputStream, Reader, Writer 등

 

 


 

 

 

try-with-resouces의 장점

  • 코드 간결성 향상: try-catch-finally 구문에 비해 코드가 간결해집니다.
  • 리소스 누수 방지: close() 메서드를 호출하지 않는 실수를 방지할 수 있습니다.
  • 예외 처리 용이: 예외 처리 로직이 간단해집니다.

 

 

 

 

 


 

 

 

 

 

 

try-with-resources 사용 예제

 

try-with-resources를 사용하지 않고 직접 close()를 선언하는 코드로 작성할 경우 아래와 같다.

 

try 지역 변수가 아닌 바깥에 선언하여 finally에서 종료해주는 방식이다.

이럴 경우 가시성이 떨어질 뿐 아니라, 오류가 발생할 수 있는 위험이 있다.

FileReader fr = null;
try {
    fr = new FileReader("path/to/file.txt");
    int i;
    while ((i = fr.read()) != -1) {
        System.out.print((char) i);
    }
} catch (IOException e) {
    e.printStackTrace();
} finally {
    if (fr != null) {
        try {
            fr.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

 

 

 

try-with-resources를 활용하려면 자원을 try 괄호 안에 선언해주면 된다.

여러 자원을 동시에 사용하는 경우 각 자원을 별도의 try-with-resouces 문으로 관리하는 것이 좋다.

(자원 간의 의존성으로 인한 문제를 방지할 수 있으므로)

 

try (FileReader fr = new FileReader("path/to/file.txt")) {
    int i;
    while ((i = fr.read()) != -1) {
        System.out.print((char) i);
    }
} catch (IOException e) {
    e.printStackTrace();
}

 

 

 

 

 

 


참고사이트

자바의 try-with-resources 이해하기

 

 

728x90