×
Crocus
공부한 내용을 정리하는 블로그로 시작한
Crocus는 2014년 1월 14일 부터 시작하여
현재 월 6만명, 총 2,101,745명의 방문자 수를 기록하고 있습니다.
Donation
이제 많은 사용자들이 이용하는 만큼
더 다양한 서비스 개발/제공을 위해 후원금을 모금하고자 합니다.
후원을 해주시는 분들은 Donators 명단에 성명, 후원금을 기입해드리며
Crocus 블로그가 아닌 다른 곳에 정리해둔 저만의 내용을 공유해 드리고자 합니다.
Account
예금주 : 고관우
신한은행 : 110-334-866541
카카오뱅크 : 3333-01-7888060

👉 후원 페이지 바로가기 Donators
익명 : 5000원(Crocus응원합니다.)
busyhuman: 5000원(유용한 지식 감사합니다.)
익명 : 5000원(알고리즘 학습러)
반응형

Java에서 리소스 사용을 위해 try catch문으로 감싸주어야 한다.

 

이때 source 사용이 끝나면 close를 해주어야하는데 간혹 사람이라면 놓칠 수 있는 부분이다.

 

이러한 close를 하지 않으면 결국 Memory leak이 생길 수 있다.

 

바로 예시를 통해 알아보자.

 

 

아래와 같이 openFile이라는 코드를 사용하고자 하는데 바로 try catch문을 잡으라고 경고 메세지가 나타난다.

이를 해결하기 위해 try catch문을 이용할 수 있다.

 

하지만 보통 실수한다면 여기서 그대로 끝낼 수 있지만 사실 해당 파일을 닫아주어야 한다.

 

이때 첫번째로 파일 닫는 것을 간과 할 수 있다.

 

하지만 닫으려 해도 close하는 상황에서 또 exception이 나타날 수 있으니 try catch가 필요하다.

 

또 이야기를 보니 close를하는데 null일 수 있기에 처리를 하라고 한다.

 

파일을 하나 열기 위해 너무 많은 코드가 소모되고 불필요한 것들이 나열된다.

 

 

try with resource

 

하지만 try with resource 구문을 이용하면 아래와 같이 한번에 해결할 수 있다.

 

아래와 같이 작성하면 try문에서 할당한 내용을 자동적으로 메모리 해제를 해주게 된다.

 

이러한 구문은 Java 1.7 이상이라면 try catch 구문에서 너무 유용하게 이용 할 수 있다.

 

 

사실 이러한 구문이 가능하기 위해서는 해당 객체가 AutoClosable를 impliment하고 있어야한다.

 

아래 코드는 실제 ParcelFileDescriptor 객체를 타고 들어가면 볼 수 있는 AutoClosable 구현체이다.

package java.io;

public interface Closeable extends AutoCloseable {
    void close() throws IOException;
}

 

 

AutoCloseable interface

 

try with resources 구문을 통해 자동 자원 반납을 지원하기 위해서는 해당 입출력 객체가 AutoCloseable 인터페이스를 구현해야 한다.

 

그 이유는 AutoCloseable은 다음과 같이 정의되어 있는데 예외가 발생하면 JVM이 구현된 close() 메서드를 호출하기 때문이다.  public interface AutoCloseable { void close() throws Exception; } 

반응형