본문 바로가기
개발 공부/JAVA

자동 리소스 닫기(try-with-resources)

by sngynhy 2021. 6. 18.

예외 발생 여부와 상관없이 사용했던 리소스 객체의 close() 메소드를 호출하여 안전하게 리소스를 닫아준다.

 

try-with-resources를 사용하기 위해서, 리소스 객체는 java.lang.AutoCloseable 인터페이스를 구현하고 있어야 한다.

AutoCloseable에는 close() 메소드가 정의되어 있고, try-with-resources가 바로 이 close() 메소드를 자동 호출한다.

 

public class FileInputStream implements AutoCloseable {
	// AutoCloseable의 구현 클래스
	// 리소스 객체는 반드시 AutoCloseable 인터페이스를 구현하고 있어야
	// close() 메소드 호출이 가능하다.
	
	private String file;
	
	public FileInputStream(String file) {
		this.file = file;
	}
	
	public void read() {
		System.out.println(file + "을 읽습니다.");
	}
	
	@Override
	public void close() throws Exception {
		System.out.println(file + "을 닫습니다.");
		
	}
}

 

try 블록이 정상적으로 실행을 종료하거나 예외가 발생하게 되면 즉시 자동으로 close() 메소드가 호출된다.

 

public class TryWithRecourcesExample {

	public static void main(String[] args) {
		
		// 자동 리소스 닫기
		// 예외 없이 try문이 실행되면 실행문이 끝나는 동시에 close() 메소드 자동 호출
		// 예외가 발생하면 발생 즉시 close() 메소드 호출
		try(FileInputStream fis = new FileInputStream("file.txt")) {
			fis.read();
			throw new Exception();  // 강제 예외 발생
		} catch(Exception e) {
			System.out.println("예외 처리 코드가 실행 되었습니다.");
		}

	}

}