자바 네이티브 액세스

자바 네이티브 액세스(Java Native Access, JNA)는 자바 네이티브 인터페이스(JNI)를 직접 사용하지 않고도 자바 프로그램이 네이티브 공유 라이브러리에 쉽게 접근할 수 있도록 해주는 커뮤니티가 개발한 라이브러리이다. JNA의 디자인은 최소한의 노력으로 자연스러운 방법으로 네이티브한 접근을 가능케 하는 것이다. JNI와 달리 보일러플레이트나 글루 코드 생성이 필요하지 않다.

매핑 타입 
다음의 표는 자바와 네이티브 코드간 매핑 유형, 그리고 JNA 라이브러리가 지원하는 유형의 개요를 나타낸 것이다.

예시 
다음 프로그램은 C 표준 라이브러리 구현체를 불러와서 printf 함수를 호출한다.

다음 코드는 이식이 가능하며 마이크로소프트 윈도우, POSIX(리눅스, 유닉스, macOS) 플랫폼에서 모두 동일하게 동작한다.

import com.sun.jna.Library;
import com.sun.jna.Native;
import com.sun.jna.Platform;

/** Simple example of native library declaration and usage. */
public class HelloWorld {
    public interface CLibrary extends Library {
        CLibrary INSTANCE = (CLibrary) Native.loadLibrary(
            (Platform.isWindows() ? "msvcrt" : "c"), CLibrary.class);
        void printf(String format, Object... args);
    }

    public static void main(String[] args) {
        CLibrary.INSTANCE.printf("Hello, World\n");
        for (int i = 0; i < args.length; i++) {
            CLibrary.INSTANCE.printf("Argument %d: %s\n", i, args[i]);
        }
    }
}

성능 
벤치마크에 따르면 JNA는 평균적으로 JNI에 비해 10배 속도가 더 느리다.

같이 보기 
 SWIG

각주

외부 링크 
 Java Native Access Web Page
 Java Native Access - Download page
 Java Native Access - User Mailing List

자바 플랫폼