예외 처리를 할때 보통 try~ catch~ finally 블록을 많이 사용하는데
fileInputStream의 경우 매번 finally 블록에 close를 해야되는 번거로움이 있습니다.
이것을 해결해 주는 것이 resources문인데
FFileInputStream에 있는 AutoCloseable 인터페이스를 통해 편리하게 구현할 수 있습니다.
리소스를 자동으로 해제 하도록 제공해주는 구문
해당 리소스가 AutoCloseable을 구현한 경우 close()를 명시적으로 호출하지 않아도
try{} 블록에서 오픈 된 리소스는 정산 적인 경우나 예외가 발생한 경우 모두 자동으로 close()가 호출 됨
자바 7부터 제공 됨
FileInputStream 의 경우 AutoCloseable을 구현 하고 있음
package com.java.test;
public class AutocloseObj implements AutoCloseable{
@Override
public void close() throws Exception {
System.out.println("리소스가 close() 되었습니다.");
}
} //AutoCloseable 인터페이스를 상속받아 close 함수를 override 하였다
package com.java.test;
public class AutoCloseTest {
public static void main(String[] args) {
try(AutocloseObj obj = new AutocloseObj()){
throw new Exception();
}
catch(Exception e){
System.out.println(e);
}
}
}
// 그 뒤에 메인메서드로 실행 close는 자동으로 구현되기 때문에 finally 블록을 넣지 않았다
자바 9 이전에는 이런 식으로 참조변수를 외부에서 생성해 주고 그 객체를 다시 받아와서 다른참조변수로 실행해야되었지만
자바 9 이후 부터는 외부에서 선언한 객체를 그대로 가져와서 사용할 수 있게 되었다
'Java' 카테고리의 다른 글
Effective Java item 2 (0) | 2021.01.15 |
---|---|
Effective Java item 1 (0) | 2020.12.22 |
템플릿 메서드 (0) | 2020.06.17 |
For 별찍기 2 (0) | 2020.06.12 |
For문 별찍기1 (0) | 2020.06.12 |