예외 발생 여부와 상관없이 사용했던 리소스 객체의 close() 메소드를 호출하여 안전하게 리소스를 닫아준다.
try-with-resources를 사용하기 위해서, 리소스 객체는 java.lang.AutoCloseable 인터페이스를 구현하고 있어야 한다.
AutoCloseable에는 close() 메소드가 정의되어 있고, try-with-resources가 바로 이 close() 메소드를 자동 호출한다.
public class FileInputStream implements AutoCloseable {
// AutoCloseable의 구현 클래스
// 리소스 객체는 반드시 AutoCloseable 인터페이스를 구현하고 있어야
// close() 메소드 호출이 가능하다.
private String file;
public FileInputStream(String file) {
this.file = file;
}
public void read() {
System.out.println(file + "을 읽습니다.");
}
@Override
public void close() throws Exception {
System.out.println(file + "을 닫습니다.");
}
}
try 블록이 정상적으로 실행을 종료하거나 예외가 발생하게 되면 즉시 자동으로 close() 메소드가 호출된다.
public class TryWithRecourcesExample {
public static void main(String[] args) {
// 자동 리소스 닫기
// 예외 없이 try문이 실행되면 실행문이 끝나는 동시에 close() 메소드 자동 호출
// 예외가 발생하면 발생 즉시 close() 메소드 호출
try(FileInputStream fis = new FileInputStream("file.txt")) {
fis.read();
throw new Exception(); // 강제 예외 발생
} catch(Exception e) {
System.out.println("예외 처리 코드가 실행 되었습니다.");
}
}
}
'개발 공부 > JAVA' 카테고리의 다른 글
사용자 정의 예외와 예외 발생 (0) | 2021.06.18 |
---|---|
예외 떠넘기기 (throws) (0) | 2021.06.18 |
다중 catch / 멀티 catch (0) | 2021.06.18 |
예외 처리 코드(try-catch-finally 블록) (0) | 2021.06.18 |
실행 예외 (RuntimeException) 종류 (0) | 2021.06.18 |