ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [JAVA] Try-with-resources
    study/java 2020. 7. 30. 21:37

    try-with-resources

    : try(...)에서 선언된 객체들을 try가 종료될 때 자동으로 자원을 해제해주는 기능

      try에서 선언된 객체가 AutoCloseable 인터페이스를 구현하였다면 Java는 try 구문이 종료될 때 객체의 close() 메소드를 호출해줌.

    AutoCloseable 인터페이스

     

    기존에 try-catch-finally로 자원 해제하는 방법

    Java7 이전에 try-catch-finally 구문에서 자원을 해제하려면 번거로웠다.

    public static void main(String[] args) throws IOException {
            BufferedReader br = null;
            
            try{
                br = new BufferedReader(new InputStreamReader(System.in));
                int input = Integer.parseInt(br.readLine());
                System.out.println(input * 2);
            } finally {
                if(br != null)
                    br.close();
            }
    }

    위의 코드를 보면 try에서 BufferedReader 객체를 생성하고 finally에서 close 해주었다.

    try 안의 코드를 실행하다가 예외가 발생하면 모든 코드가 실행되지 않을 수도 있기 때문에 finally에 close 코드를 넣어주어야 한다.

    심지어 BufferedReader 객체가 null 인지도 체크해줘야하고 close에 대한 예외처리도 해주어야 한다.

     

     

    try-with-resources로 자원을 쉽게 해제

    Java7부터는 try-with-resources 구문을 지원하고 이를 통해 자원을 쉽게 해제할 수 있다.

    public static void main(String[] args){
            try(
                BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            ){
                int input = Integer.parseInt(br.readLine());
                System.out.println(input * 2);
            }catch (IOException ioe){
                ioe.printStackTrace();
            }
    }

    try-catch 문을 사용했을때와 똑같은 동작을 하는 코드다.

    코드를 보면 try(...)안에 BufferedReader 객체 선언 및 할당이 이루어졌다.

    여기서 선언한 변수들은 try (){...} 안에서 사용할 수 있고 코드 실행 위치가 try문을 벗어나면 자동으로 선언된 객체의 close() 메소드들을 호출한다.

    따라서 finally 에서 close() 메소드를 직접 호출해줄 필요가 없다.

     

    장점

    1. 코드를 짧고 간결하게 만들어 가독성이 높고 유지보수가 용이하다.

    2. close()를 직접 적어줄 필요가 없기 때문에 실수로 빼먹어서 자잘한 버그가 발생할 확률이 낮아진다.

     

    참고

    https://codechacha.com/ko/java-try-with-resources/

     

    Java - Try-with-resources로 자원 쉽게 해제하기

    try-with-resources는 try(...)에서 선언된 객체들에 대해서 try가 종료될 때 자동으로 자원을 해제해주는 기능입니다. 객체가 AutoCloseable을 구현하였다면 Java는 try구문이 종료될 때 close()를 호출해 줍니�

    codechacha.com

     

    'study > java' 카테고리의 다른 글

    [JAVA] Jar,War  (0) 2020.08.04
    [JAVA] static 키워드  (0) 2020.07.30
    JAVA - 5  (0) 2020.07.20
    JAVA - 4 ( 객체지향 )  (0) 2020.07.16
    JAVA - 3  (0) 2020.07.16
Designed by Tistory.