외부 함수 및 메모리(FFM) API
외부 함수 및 메모리(FFM) API
자바 애플리케이션이 JVM 바깥의 네이티브 코드를 호출하고, JVM이 관리하지 않는 메모리에 안전하게 접근해야 할 때가 있어요. 이걸 도와주는 것이 외부 함수 및 메모리(Foreign Function and Memory, FFM) API예요. 이 튜토리얼들은 FFM API의 능력, 즉 네이티브 라이브러리 호출과 네이티브 데이터 처리 능력을 JNI의 취약성과 위험 없이 사용하는 방법을 이해하도록 도와줘요.
출처: dev.java
본문
FFM API는 자바 애플리케이션이 네이티브 라이브러리를 호출하고 네이티브 데이터를 처리하게 해 주는데, JNI처럼 깨지기 쉽고 위험하지 않게 해 줘요. 다음 주제들이 준비되어 있어요.
- Memory Segment로 오프-힙 또는 온-힙 메모리에 접근하기 —
MemorySegment와Arena를 통해 외부 함수 및 메모리(FFM) API로 오프-힙이나 온-힙 메모리에 접근하는 방법을 배워요. - C 라이브러리 함수 호출하기 — 자바에서 C 라이브러리 함수를 호출하는 방법을 알아봐요.
- 네이티브 데이터 타입 접근하기 —
MemoryLayout으로 C 구조체에 접근하고, 메모리 세그먼트를 더 잘라내(slice) 사용하는 방법을 알아봐요. - 네이티브 코드에서 다시 자바 코드로 콜백 처리하기 — 자바 코드를 함수 포인터로 외부 함수에 넘기는 방법.
- 네이티브 라이브러리 함수 호출 트러블슈팅 — 포인터를 반환하는 외부 함수를 호출하고 잠재적 오류를 확인하는 방법.
- Jextract로 자바 바인딩 생성하기 —
jextract를 실행하고, 생성된 자바 바인딩으로 네이티브 라이브러리를 애플리케이션에 통합하는 방법.
FFM API는 네이티브 코드와의 상호작용을 안전하고 선언적으로 다루는 데 초점을 맞춰요. 첫 걸음으로는 Memory Segment로 메모리 접근부터, 이어서 C 라이브러리 함수 호출로 네이티브 호출을 시작해 보는 걸 권해요. 네이티브 구조체를 다뤄야 한다면 네이티브 데이터 타입 접근을, 콜백이 필요하면 네이티브 코드에서 자바 코드로 섹션을 이어가면 돼요.
더 알아보기 (Learn more)
네이티브 라이브러리를 실제 프로젝트에 통합하고 싶다면 Jextract로 자바 바인딩 생성하기를 보는 것이 좋아요. jextract가 만들어 주는 바인딩을 쓰면 네이티브 선언을 일일이 손으로 작성하지 않아도 돼요. 각 주제의 구체적인 코드는 위 목록의 개별 튜토리얼에서 다뤄져요.