JNI

yonghanjung·2023년 6월 22일
0

미니 프로젝트에 활용할 용도로 JNI의 개념과 사용법에 대해서 작성해보고자 한다.
(그리고 사용하지 않는 이유도..)

Java의 큰 특징

  • 가상머신인 JVM 위에서 실행되도록 만들어진 언어
  • 프로그래머가 자바 언어로 작성한 프로그램은 JVM 위에서 동작하도록 중간 언어인 바이트 코드로 컴파일 됨.

그에 따른 장점 - 하나의 소스코드로 작성한 프로그램을 플랫폼에 상관없이 실행 가능

단점

  • 운영체제가 제공하는 특정 기능들을 사용하기 힘듦.
  • 예로 새로운 시스템 콜의 추가, 특정 유닉스 시스템 콜을 호출하고 싶지만 JVM이 지원하지 않으면 사용하기 매우 어려움.
  • 구현하고 싶은 몇몇 기능들이 자바 언어로 작성될 경우 매우 비효율적일 수 있음

=> 이 경우 C, C++을 이용해서 컴파일한 모듈을 자바에서 호출해 사용하는 방법 고려

JNI - Java Native Interface

  • 자바에서 C 혹은 C++로 작성된 모듈을 호출할 수 있게 해주는 기능

사용되는 경우
1. 하드웨어 자체 기능을 동작시켜야 하는 경우
2. 프로세스의 성능을 향상해야 하는 경우
3. 이미 네이티브 코드로 작성된 라이브러리를 사용하고 싶은 경우

예시

public class JNI {
    static {
        System.loadLibrary("MyJNI"); // 라이브러리 동적 로딩
    }
    // 메소드 선언
    private native int getNumber();
    private native void printHelloWorld();
    
    public static void main(String[] args) {
        JNI jni = new JNI();
        jni.printHelloWorld();
        System.out.println(jni.getNumber());
    }
}

static 블럭은 System.loadLibrary()를 이용해 라이브러리를 동적으로 로딩.

native 키워드는 native 언어인 c/c++에서 작성한 메서드를 사용하기 위한 키워드이다.

동적으로 로딩된 라이브러리에서 native 키워드로 선언된 해당 메소드를 찾아서 연결해준다.

네이티브 메서드를 신중히 사용해야 하는 이유 https://songiam.tistory.com/74

참고 글
https://hbase.tistory.com/82
https://mommoo.tistory.com/71
https://change-words.tistory.com/entry/%EC%9E%90%EB%B0%94-JNI

profile
일에 대한 사명감?!

0개의 댓글