ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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

    댓글

Designed by Tistory.