Everyday Dev System

JNI란? 본문

나의 호기심

JNI란?

chaeyoung- 2023. 9. 30. 17:59

자바에서 Arrays 클래스 코드들을 뜯어보다가 처음보는 것을 발견해서 찾아보았다.

 

 native 란 ?  JNI란?

import java.util.Arrays;

public class test {
    public static void main(String[] args) {
        int[] arr = {0,1,2,3,4};
        System.out.println("Arrays.toString(arr) = " + Arrays.toString(arr));

        System.out.println();
        // copyOf
        int[] arr2 = Arrays.copyOf(arr, arr.length);
        System.out.println("Arrays.toString(arr2) = " + Arrays.toString(arr2));
        int[] arr3 = Arrays.copyOf(arr, 3);
        System.out.println("Arrays.toString(arr3) = " + Arrays.toString(arr3));
        int[] arr4 = Arrays.copyOf(arr, 7); // 범위가 넘어가는 복사는 초기화값이 들어간다.
        System.out.println("Arrays.toString(arr4) = " + Arrays.toString(arr4));

        System.out.println();
        // copyOfRange
        int[] arr5 = Arrays.copyOfRange(arr, 1, 3);
        System.out.println("Arrays.toString(arr5) = " + Arrays.toString(arr5));
        int[] arr6 = Arrays.copyOfRange(arr, 0, 7);// 범위가 넘어가는 복사는 초기화값이 들어간다.
        System.out.println("Arrays.toString(arr6) = " + Arrays.toString(arr6));

    }
}

위 테스트 코드들을 실행해보던 중에 

Arrays 구현체 내부를 살펴보다가 native 라는 것을 발견했다.

 

 

아래는 Arrays 클래스의 코드 중 일부이다.

 

 

아래는 System 클래스 일부분이다. 해당 메서드에 native 라는 것이 명시 되어 있다.

 

 

 

먼저, JNI를 살펴보자. 이는 자바라는 언어의 한계를 극복시켜 줄 수 있다.

무슨 말일까? 아래에 블로그 글을 보며 이해한 바를 정리해보았다.

 

 

자바는 플랫폼으로부터 독립적이다.

이 말의 의미는 어떠한 OS 환경이여도 맞는 JVM을 설치하면 자바를 실행할 수 있기 때문이다. 플랫폼에 국한되지 않고 어떠한 환경에서도 활용할 수 있기 때문에 플랫폼으로부터 독립적인 것이다. 

 

 

자바는 JVM에 의해서 동작하여 JVM에 의해 자바 애플리케이션을 개발할 수 있다. 

JVM은 플랫폼에 상관없이 자바를 읽고 실행 가능하다. (= ,java 파일을 컴파일한 .class 파일을 읽을 수 있다.)

 

그러나 자바로 개발한 SW일지라도 네이티브 코드가 필요한 순간이 있다.

네이티브 코드 :
JVM과 같은 인터프리터 없이 OS가 읽을 수 있는 형태로 컴파일하여 사용 가능한 코드 (C, C++)를 말한다.

 

 

이러한 필요를 충족시키기 위해 JVM은 자바 코드와 네이티브 코드를 연결할 수 있는 인터페이스를 제공한다.

그것이 JNI 이다.

 

 

 

JNI

자바 코드를 C, C++와 같은 코드로 만들어진 애플리케이션이나 라이브러리를 함께 사용할 수 있도록 연결해주는 역할을 한다. 자바로 개발한 SW는 유연한 플랫폼 활용도를 유지하며 자바만으로 구현하기 어려운 것들을 구현할 수 있다.

 

 

 

 


references : 

https://change-words.tistory.com/entry/%EC%9E%90%EB%B0%94-JNI

 

자바 JNI란? (네이티브 코드와의 연결)

자바로 개발한 소프트웨어 설치셋에서 JNI라는 폴더를 본적이 있으신가요? 자바 개발의 한계를 극복시켜주는 JNI에 대해 설명드리겠습니다. Java의 장점과 한계 자바 코드의 장점은 플랫폼으로부

change-words.tistory.com