[java] 함수형 인터페이스를 사용하여 자동 리소스 관리를 처리하는 방법은 어떻게 되나요?
먼저, 함수형 인터페이스와 try-with-resources
문을 함께 사용하기 위해서는 해당 인터페이스가 AutoCloseable
인터페이스를 구현해야 합니다. AutoCloseable
인터페이스는 close()
메서드를 정의하고 있어 리소스를 해제할 수 있는 기능을 제공합니다.
아래는 함수형 인터페이스와 try-with-resources
문을 사용하여 자동 리소스 관리를 처리하는 예제 코드입니다.
@FunctionalInterface
interface ResourceProcessor<T extends AutoCloseable, R> {
R process(T resource) throws Exception;
}
public class ResourceManagementExample {
public static void main(String[] args) {
try (FileReader reader = new FileReader("example.txt")) {
String result = processResource(reader, (r) -> {
// 리소스 사용 코드 작성
// 파일 리더를 활용한 데이터 처리 등
return "Processing completed";
});
System.out.println(result);
} catch (Exception e) {
// 예외 처리 코드 작성
e.printStackTrace();
}
}
public static <T extends AutoCloseable, R> R processResource(T resource, ResourceProcessor<T, R> processor) throws Exception {
try {
return processor.process(resource);
} catch (Exception e) {
throw e;
} finally {
if (resource != null) {
resource.close();
}
}
}
}
위 예제에서는 processResource()
메서드를 통해 리소스 관리를 수행하고 있습니다. 이 메서드는 resource
와 processor
를 인자로 받아 processor
를 실행하면서 리소스를 처리하고, 처리가 완료되면 finally
블록에서 리소스를 닫습니다.
try-with-resources
문을 사용하면 리소스 관리에 대한 별도의 코드가 없어지고, 예외 발생 시 close()
메서드가 자동으로 호출됩니다.
자바 7 이전 버전에서는 try-finally
문을 사용하여 리소스를 수동으로 관리해야 했지만, 자바 8부터는 try-with-resources
문을 통해 더욱 간결하고 안전하게 리소스 관리를 할 수 있습니다.
여기서는 파일 리소스를 예로 들었지만, 네트워크 연결, 데이터베이스 연결 등 다양한 리소스를 처리할 수 있습니다. 함수형 인터페이스와 try-with-resources
문의 조합을 사용하면 리소스 관리가 더욱 편리해집니다.
더 자세한 내용은 아래 자바 공식 문서를 참고하시기 바랍니다.