안녕하세요 알통몬입니다. 공감 및 댓글은 포스팅 하는데 아주아주 큰 힘이 됩니다!! 포스팅 내용이 찾아주신 분들께 도움이 되길 바라며 더 깔끔하고 좋은 포스팅을 만들어 나가겠습니다^^
|
try - with - resources 를 사용하면 예외 발생 여부와 상관없이 사용했던
리소스 객체( 각종 입출력 스트림, 서버 소켓, 소켓, 각종 채널) 의
close() 메서드를 호출해서 안전하게 리소스를 닫아 줍니다.
리소스 : 예외 처리 부분에서는 데이터를 읽고 쓰는 객체.
예를 들어서 파일의 데이터를 읽는 FileInputStream 객체와 파일에 쓰는 FileOutputStream 은
리소스 객체라고 보면 됩니다.
자바 7에서 추가된 try - with - resources 는 아래와 같이 사용합니다.
try(FileInputStream fis = new FileInputStream("file.txt")) {
...
} catch(IOException e) {
...
}
try 블록이 정상적으로 실행을 완료했거나 도중에 예외가 발생하게 되면
자동으로 FileOutputStream의 close() 메서드가 호출됩니다.
try { } 에서 예외가 발생하면 우선 close() 리소소를 닫고 catch 블록을 실행합니다.
만약 여러 개의 리소스를 사용해야한다면 아래와 같이 작성할 수 있습니다.
try(
FileInputStream fis = new FileInputStream("file.txt");
FileIOututStream fos = new FileOutputStream("file2.txt")
) {
...
} catch(IOException e) {
...
}
* try - with - resources 를 사용하기 위해서는 한가지 조건이 있습니다.
리소스 객체는 java.lang.AutoCloseable 인터페이스를 구현하고 있어야 합니다.
AutoCloseable 에는 close()메서드가 정의되어 있는데
try - with - resources는 바로 이 close() 메서드를 자동 호출합니다.
API 도큐먼트에서 AutoCloseable 인터페이스를 찾아 "All Known Implementing Classes"를 보면
try - with - resources와 함께 사용할 수 있는 리소스가 어떤 것이 있는지 알 수 있습니다.
아래 예제는 AutoCloseable을 구현해서 FileInputStream 클래스를 작성합니다. main() 메서드에서
try - with - resources를 사용하면 예외가 발생하는 즉시
자동으로 FileInputStream의 close()메서드가 호출되는 것을 볼 수 있습니다.
예제)
구현 클래스
public class FileInputStream implements AutoCloseable {
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 + "을 닫습니다.");
}
}
실행 클래스
public class TryWithResourceExample {
public static void main(String[] args) {
try (FileInputStream fis = new FileInputStream("file.txt")) {
fis.read();
throw new Exception();
} catch(Exception e) {
System.out.println("예외 처리 코드가 실행되었습니다.");
}
}
}
'자바' 카테고리의 다른 글
JAVA 자바 예외처리 : 사용자 정의 예외와 예외 발생 (0) | 2017.03.13 |
---|---|
JAVA 자바 예외처리 : 예외 떠넘기기 (0) | 2017.03.13 |
JAVA 자바 예외처리 : 다중 catch 와 catch 순서 그리고 멀티 catch (0) | 2017.03.13 |
JAVA 자바 예외처리: 예외 처리 코드 (0) | 2017.03.13 |
JAVA 자바 예외처리 : 실행 예외 - ClassCastException (0) | 2017.03.13 |