Try-with-resources라고 완전 편한게 있습니다.
728x90
반응형

* 샘플코드는 제 깃헙에 있습니다.

 

 

Java에서 Try는 예외처리 구문이다. 흔히 얘기하는 Try-catch문이라고 한다. 그런데 이 구문도 완벽하지는 않다. 아래 예시를 보자.

public class TryWithResource {
    public static void main(String[] args) {
        FileInputStream stream = null;
        try {
            stream = new FileInputStream("");
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                stream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

프로그램이 끝날 때, 닫혀야 하는(close) 객체를 이 경우 리소스(자원)라고 부른다. 이 리소스를 닫지 않으면?? 특정 프로그램에 자원을 할당받기만하고 반납이 되지 않을시 다른 프로그램에서 자원을 사용하지 못하고 운영체제의 자원고갈로 치명적인 문제를 야기할 수 있다. 할당과 반납에 특히 주의를 기울여야하는 자원이 바로 입출력 자원이다. 입출력을 수행하기 위해서는 스트림이라 불리우는 데이터를 주고 받는 통로를 열어주어야 하는데 이러한 통로가 입출력 자원입니다. 이러한 입출력들은 자원을 많이 소모 하므로 입출력이 완료되면 꼭 해당 자원을 돌려주어야 합니다.

 

그래서 태어났다. Java7부터 등장한 Try-with-resources. 구문의 끝에서 각각의 리소스(들)이 닫힌다(close)는 것을 보장한다. Java7부터는 자동으로 이 리소스를 반납하게 하기 위해 AutoCloseable 인터페이스를 추가했다. 동시에 try에 매개변수를 넣듯 소괄호 문법이 추가가 되었다. 아래는 그 예시다.

try (FileInputStream stream2 = new FileInputStream("")) {
    //
} catch (IOException e) {
    e.printStackTrace();
}

 

소괄호 안에는 FileInputStream처럼 AutoCloseable 구현체만 들어갈 수 있다. 이렇게 작성하고보니 아주 깔끔하고 자원도 관리되고. 엄훠나 좋아라.

 

 

참고자료
- https://dololak.tistory.com/67
- https://multifrontgarden.tistory.com/192 (추천👍)
- http://blog.naver.com/PostView.nhn?blogId=sseyoung513&logNo=221082287596
728x90
반응형