JVM과 친해져보자! - Native Method Interface

likerhythm·2025년 2월 11일

JVM과 친해져보자!

목록 보기
5/5

Native Method Interface

Native Method Interface는 다른 말로 Java Native Interface(JNI)라고 한다.
자바에는 native 키워드가 존재한다. 대표적으로 Threadstart() 메서드에서
native 메서드인 start0()를 호출한다.

다음은 Thread 클래스의 일부이다. start0() 메서드에는 native 키워드가 붙어있고 구현체가 없다.

    void start(ThreadContainer container) {
        synchronized (this) {
            // zero status corresponds to state "NEW".
            if (holder.threadStatus != 0)
                throw new IllegalThreadStateException();

            // bind thread to container
            if (this.container != null)
                throw new IllegalThreadStateException();
            setThreadContainer(container);

            // start thread
            boolean started = false;
            container.onStart(this);  // may throw
            try {
                // scoped values may be inherited
                inheritScopedValueBindings(container);

                start0();
                started = true;
            } finally {
                if (!started) {
                    container.onExit(this);
                }
            }
#         }
    }

    private native void start0();

이렇게 native 키워드가 붙은 메서드는 Java 언어 영역을 벗어나는 코드를 실행한다.
여기서 Java 언어를 벗어나는 언어는, C, C++이다.

왜 C와 C++을 사용 해야할까

Java만으로 애플리케이션이 동작할 수는 없는 걸까?

Java는 운영체제와 독립된 환경에서 동작하는 언어이다.
하지만 애플리케이션이 동작하려면 네트워크, 스레드 등 운영체제에 직접 접근해야 하는 기능이 필요하다.
Java 언어만으로는 운영체제에 접근할 수 없기 때문에(JVM이 운영체제에 접근하며 JVM은 개발자가 조작할 수 없음) 운영체제에 접근하기 위한 인터페이스가 필요하다.
JNI는 Java 언어 내에서 C와 C++로 작성된 코드를 쉽게 사용할 수 있도록 도와준다.

실제로 커스텀 native 코드를 구현하고 C++ 코드를 호출할 수 있다(참고).

참조

https://ones1kk.tistory.com/entry/Java-Native-Method

0개의 댓글