티스토리 뷰

프로그래밍/JAVA

try-catch-resources

Geun AkaGeun 2018.04.11 08:30

1. try-catch-resources

 - try (...) 안에 선언된 입출력 스트림 등의 리소스 객체의 'close()' 메소드를 호출해줌. 자원관리를 잘 해줌.

 - java 7 에서 추가된 기능.


2. 소스 비교

 1) 1.6 이전

FileInputStream fs = null;
try {
fs = new FileInputStream("file.txt");

} catch (IOException e) {
System.out.println(e.getMessage());
} finally {
if (fs != null) {
try {
fs.close();
} catch (IOException e1) {
System.out.println(e1.getMessage());
}
}
}

 2) 1.7 이상

  - 단, 인터페이스인 java.lang.AutoCloseable를 구현해야 사용가능함.

  - 귀찮은 finally 안에 소스를 안만들어도 된다. 

try (FileInputStream fs = new FileInputStream("file.txt");) {

} catch (IOException e) {
System.out.println(e.getMessage());
}

 - 커스텀하게 구현할 수도 있다.

public class CustomFileInputStream implements AutoCloseable {

@Override
public void close() throws Exception {

}
}

3. Close 동작 확인

 1) 정상 동작시에 Close 메소드 호출 여부 확인

(1) 샘플 소스 확인

 - 실행 시킬 Main Class

public class Sample {

public static void main(String[] args) throws Exception {

try (CustomFileInputStream cfs = new CustomFileInputStream()) {
System.out.println("Try 안에 호출 잘 됩니다.");

} catch (Exception e) {
System.out.println("에외가 발생했습니다.");

}

System.out.println("완료!");
}

}


 - Custom한 Class

/**
* Custom 메소드
*
* @author akageun
*/
public class CustomFileInputStream implements AutoCloseable {

@Override
public void close() throws Exception {
System.out.println("Close 메소드가 호출 되었습니다.");
}
}

(2) 결과



 2) 예외가 발생 했을 때 Close 메소드 호출 여부 확인

(1) 샘플 소스 확인

 - 실행 시킬 Main Class

public class Sample {

public static void main(String[] args) throws Exception {

try (CustomFileInputStream cfs = new CustomFileInputStream()) {
System.out.println("Try 안에 호출 잘 됩니다.");
throw new RuntimeException("테스트 예외 호출 ");


} catch (Exception e) {
System.out.println("에외가 발생했습니다. " + e.getMessage());

}

System.out.println("완료!");
}

}

 - Custom한 Class는 위에 Class와 동일한걸로 사용

(2) 결과

 

댓글
댓글쓰기 폼
공지사항
최근에 달린 댓글
Total
14,254
Today
16
Yesterday
14
«   2018/04   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30          
글 보관함