자원해제 시 try-finally 대신 try-with-resource 사용하기

Seungyeon Choi·2022년 6월 18일
0

자바

목록 보기
4/5

finally에 close() 함수를 호출하지 않고,
자동으로 자원을 해제하는 방법을 알아보자!

자바 7이전까지 썼던, 명시적인 자원해제 방법

Socket test = null;  
try {
 	test = new Socket("host", 8888);
} finally {
    if(test != null) {
       test.close();
    }
} 

자동으로 자원해제 하기

조건

  1. 자바 7 이상 부터 사용 가능하다

  2. try-with-resource 문법을 이용한다

    try(Socket test = new Socket("host", 8080)) {
    	// example...
    }
    
  3. 리소스 클래스가 AutoCloseable 이라는 인터페이스를 구현해야 한다

    • 예시로 Socket 클래스를 살펴보자
      // AutoCloseable 인터페이스를 구현한 클래스는 자동으로 자원을 해제할 수 있다
      public interface AutoCloseable
      // Closeable 인터페이스는 AutoCloseable 인터페이스를 상속한다
      public interface Closeable extends AutoCloseable
      // 소켓 클래스는 Closeable 인터페이스를 구현한다. 따라서 소켓 클래스는 자동으로 자원을 해제할 수 있다
      public class Socket implements java.io.Closeable

사용 예시

여러 자원을 한번에 사용할 때

try(Socket test = new Socket("host", 8080); // 이렇게 세미콜론으로 구분하기
    Socket test2 = new Socket("host2", 8080)) {
	// example...
}

장점

  1. 자원 해제를 실수로 누락하는 상황이 없다.
    🧐 try-with-resource방식을 이용하면 명시적으로 close()함수를 호출할 필요없다.

  2. 코드 가독성을 높인다
    🧐 try-finally 방식의 자원해제 과정은 어쩔 수 없이 많은 들여쓰기를 생성한다.

    finally {
        if(test != null) { // 1 indent 
           test.close(); // 2 indent
        }
 	}
profile
캘린더 만드는 개발자입니당

0개의 댓글