-
try-with-resources개발언어 2021. 12. 23. 17:21
-try문이 자원하고 같이 있는 경우
- Catch
try{
//SomeException을 발생하는 구문
//Exception이 발생되고 나서는 실행이 안된다.
}catch(SomeException e){
//SomeException이 발생할 때 처리
//Exception이 발생이 안되면 실행이 안된다.
}finllay{
//Exception 발생여부와 상관 없이 항상 처리
}
-finally : 가장 중요한 목적이 자원의 해제이다.try구문에서 무언가를 실행하다가 자원을 open했다고 가정, 실행도중에 Exception이 발생을 하건 안하건 항상 실행되는 게 finally.
꼭, 중간에 catch문이 있어야 사용하는건 아니다. 자원을 해제할려고 사용 하는것
자원같은 경우는 한번 open을 하면 반드시 close를 해야한다.
- finally사용
FileReader in = null;
try{
in = new FileReader(..);
char c = (char)in.read();
System.out.println(c);
}catch(IOException e){
//IOException 처리
}finally{
if(in !=null)
in.close();
}
결국 in을 close하기위해서 finally를 쓰는데, in에 문제가 생겨서 null로 남겨 졌는데, 바로 in.close해버리면
NullPointException이 나니까, 반드시 확인을 하고 in.close를 해야한다.
- try-with-resources
try(FileReader in = new FileReader()){
char c = (char)in.read();
}catch(IOException e){
//IOException 처리
}
-try/catch문이 복잡하고 지저분해 진 것을 정리하여 쓰기위해 등장
try하고 '()'안에 해제해야 하는 자원을 넣는것, 괄호안에서 선언된 자원은 finally를 안해도 자동 해제된다.
단, 모든 자원이 다 close되는 것은 아니고
BufferedReader extends Reader =>
Reader implements Readable,Closeable =>
Closeable extends AutoCloseable
Closeable이나 AutoCloseable을 interface를 implements 한 자원은 자동으로 close된다.
(예:Scanner,BufferedReader)
FileReader in = new FileReader("alphabet.txt"); BufferedReader reader = new BufferedReader(in))
FileReader in 같은 경우에는 try 구문 괄호 안에 있기 때문에 자원이 해제된다고 볼 수 도 있지만,
파이프로 BufferedReader안에 다시 FileReader in이 들어간 형태이다. 이런 경우 reader가 close되면,
파이프로 들어간 in도 자동으로 close된다.
'개발언어' 카테고리의 다른 글
컬렉션 (0) 2021.12.27 제네릭 (0) 2021.12.27 Exception의 중요한 특징들 (0) 2021.12.23 Exception (0) 2021.12.22