JNI 는 기존 C/C++ 함수를 호출하는데 사용한다고 하면서, 왜?

fdff 131.***.51.64

JNI는 Native Language 입니다. 즉 플랫폼 별로 컴파일을 다시 하셔야 하죠.

원래 Java는 Interpret Language 입니다. 그래서 한 번 .class로 컴파일 하시면 어떤 플랫폼이던 JRE를 설치하신 플랫폼에서는 다시컴파일을 하지 않으셔도 실행이 가능합니다. 즉, JRE를 통해서 class가 각각의 플랫폼을 위한 native language로 변환된 후 실행되는 거죠. 그래서 class는 윈도우, 맥, 리눅스를 가리지 않고 한 번 컴파일을 하시면 모두 실행이 가능합니다.

반면 C/C++는 각 플랫폼을 위해서 따로 컴파일을 해 주고 각각 실행파일을 생성해 주셔야 합니다. 이를 Native Language라고 하죠. 그래서 중간 과정인 JRE가 없기 때문에 실행 속도나 메모리 점유면에서 더 효율적인 면이 있습니다.

JAVA가 아무래도 속도면에서 비효율적인게 있기 때문에 자주 쓰거나 빠른 실행이 필요한 함수들 같은 경우에는 JRE를 통하지 않고 실행실킬 수 있는 JNI라는 기능을 지원합니다. 즉 함수들이 .class로 컴파일 되는게 아닌 C/C++ 형식으로 컴파일 되는거죠. 그렇기 때문에 실행속도 면에서는 효율적이지만 JNI로 구현된 부분들은 다른 C/C++ 프로그램과 같이 각각의 플랫폼 별로 컴파일을 다시 해 주셔야 합니다. 즉 Portability를 버리는 대신에 efficiency를 가지게 되는거죠.

답변이 되었으면 좋겠습니다.