▸JAVA/기본 문법

예외(Exception) 처리하기_'try-with-resources'문 [3/5]

코데방 2019. 12. 12.
728x90

[ try-with-resources ]

  • 'try-catch-finally'구문에서 따로 자원 해제를 해줘야 하는 불편함을 개선
  • Java SE-7 이상부터 지원

 

이전 글에서 "try-catch-finally"구문을 사용할 때는 각각의 스택프레임이 따로 생성되어 지역변수가 공유되지 않는 다는 점에 대해 얘기했습니다. try에서 열어둔 파일을 finally에서 닫기 위해서는 서로 파일의 참조변수를 공유해야하는데 변수 공유가 불가하니 구문 바깥쪽에 변수를 생성하는 방식으로 해결할 수 밖에 없었습니다.

 

그러다보니 가독성도 떨어지고 자원을 일일이 해제해줘야 하는 번거로움이 생겨났는데, 이를 편하게 바꿔준 구문이 바로 'try - with - resources'입니다. try문의 생성자로 자원의 참조변수를 생성해주면 구문이 끝날 때 해당 참조변수의 자원을 자동으로 해제해줍니다.

 

  • try(참조변수 = new 객체생성) {  } catch() {   }
  • try( ) 괄호 안에 들어간 참조변수의 리소스는 구문이 끝날 때 자동으로 해제해줌

이전글에서 썼던 파일 열고 닫기를 해당 구문을 이용하면 아래와 같이 사용할 수 있습니다. 괄호 안에 참조변수는 여러 개 생성할 수 있고, 구분은 세미콜론(;)으로 해주면 됩니다. 또한 리소스를 해제할 때 필요했던 예외 처리 또한 추가해줘야 합니다. 자세한 건 파일 입출력 편에서 다루도록 하겠습니다. 

package study.first;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

public class Main {
	public static void main(String[] args) {

		try(FileInputStream fi = new FileInputStream("a.txt");
				FileInputStream fi2 = new FileInputStream("a.txt")) {
			
			System.out.println(fi); // 무언가 파일을 처리함

			int[] arr = { 1, 2, 3, 4, 5 };
			System.out.println(arr[5]); // 예외 발생 지점

		} catch (IndexOutOfBoundsException i) {

			System.out.println("인덱스를 벗어났습니당");

		} catch (FileNotFoundException f) {

			System.out.println("파일을 열 수 없습니당");

		} catch (IOException io) {
			
			System.out.println("파일 닫기에 실패했습니당");
		}		
	}
}

 

728x90

댓글

💲 추천 글