JNI

자바에서 자바가 아닌 C/C++ 작성된 메소드를 실행 할 수 있다. 실제 구현은 C/C++로 하고 자바에서는 구현체에 대한 인터페이스만 가지게 된다. 이 인터페이스를 JNI라고 한다.

왜 JNI가 필요할까?

자바는 플랫폼 독립적인 언어인데 JNI를 사용하는 순간 플랫폼에 종속되게 된다. 그럼에도 불구하고 사용해야하는 상황들은 다음과 같다.

  • 자바에서 하드웨어 제어
  • 자바에서 지원되지 않는 특정 운영체제 서비스
  • 기존 프로그램에서 자바가 제공하는 서비스를 이용

빌드 과정

  1. 'native' 키워드를 이용해 인터페이스를 포함하는 클래스를 작성한다. 몸체는 C/C++로 작성될 DLL이 대신한다.
    public class MyNative {
    public native void doSomething();
    }
  2. javah를 이용해 클래스를 컴파일한다. 컴파일 결과로 NativeClass.h라는 C 헤더파일을 얻는다.
    javah -jni MyNative
  3. MyNative.h를 프로젝트 내로 옮기고 이를 참조하는 MyNative.cpp를 작성한다. 추가로 다음 경로도 클래스패스에 추가해야한다. 컴파일하여 DLL파일을 얻는다.
    ${jdkRoot}\include\,${jdkRoot}\include\win32
  4. 3번에서 생성한 MyNative.dll을 MyNative.class 파일이 있는 곳에 복사한다.
  5. java 프로그램을 실행한다.
    java MyNative

참고자료

https://jetzt.tistory.com/365

+ Recent posts