Java : TryWithResources

jamangstangs·2022년 2월 23일
0

Roadmap

목록 보기
5/8
post-thumbnail

Java : Try-With-Resources

Try-With-Resources

  • Resource를 사용하고 난 이후 반납하기 위함.

    • Java 7 이전 : try-catch-finally 사용
    • Java 7 이후 : try-with-resources 사용
  • try-catch-finally를 사용한 코드

    import java.io.File;
    import java.io.FileNotFoundException;
    import java.util.Scanner;
    
    public class TryCatchFinally{
      public static void main(String[] args){
        try {
          // Scanner 리소스 try 구문 내에서 생성
          Scanner scanner = new Scanner(new File("file.txt"));
          System.out.println(scanner.nextLine());
        } catch(FileNotFoundException e) {
          e.printStackTrace();
        } finally {
          // Scanner 리소스 finally에서 반납하기.
          if(scanner!=null){
            scanner.close();
          }
        }
      }
    }
  • try-with-resources를 사용한 코드

    import java.io.File;
    import java.io.File.NotFoundException;
    import java.util.Scanner;
    
    public class TryWithResources{
      public static void main(String[] args){
        // try 구문 옆에 () 괄호에 Resources 생성하면, 자동으로 반납된다. 
        try(Scanner scanner = new Scanner(new File("file.txt"))){
          System.out.println(scanner.nextLine());
        } catch (FileNotFoundException e){
          e.printStackTrace();
        }
      }
    }

java.lang.AutoCloseable

  • try-with-resources 구문에 사용되는 리소스는 java.lang.AutoCloseable 인터페이스를 구현해야한다.

    • Scanner Class -> 당연히 구현되어 있다.
    import java.lang.AutoCloseable;
    
    public class Resourecs implements AutoCloseable {
    	public Resources() {
        System.out.println("Resources 생성자");
      }
      
      @Override
    	public void close() throws Exception {
        System.out.println("Resourecs close")
      }
    }

Multi Resouces 반납

import java.io.File;
import java.io.File.NotFoundException;
import java.util.Scanner;
import java.io.PrintWriter;

public class TryWithResources{
  public static void main(String[] args){
    // try 구문 옆에 () 괄호에 Resources 생성하면, 자동으로 반납된다. 
    try(Scanner scanner = new Scanner(new File("file1.txt"));
       	PrintWriter printwriter = new PrintWriter(new File("file2.txt"))){
      System.out.println(scanner.nextLine());
    } catch (FileNotFoundException e){
      e.printStackTrace();
    }
  }
}
  • ; 으로 구분하여 사용할 수 있다.
  • 이때, Resource 반납은 Stack 구조에서 LIFO로 빠져나간다고 생각하자.
profile
자망스탕스

0개의 댓글