Android - 이론

JNI와 NDK

곽도우너 2023. 3. 11. 15:42

1. JNI란?

JNI(JAVA Native Interface)는 JVM에서 동작할 때, 네이티브 언어로 작성된 코드를 자바에서 사용하거나, 네이티브 언어에서 자바의 클래스와 메소드를 사용할 수 있게 해주는 프로그래밍 인터페이스이다.

- Native Code에 접근하기 위한 API이다.

 

<JNI의 기능>

1. JNI를 통해 자바로 개발한 소프트웨어는 유연한 플랫폼 활용도를 유지하면서 자바만으로는 구현하기 어려운 것들을 구현할 수 있다.

2. JNI는 라이브러리가 아니라 인터페이스이기 때문에 인터페이스 규칙에 따라서 자바의 메소드와 C, C++의 함수를 정의함으로써 자바와 C, C++ 서로 간에 함수를 호출할 수 있다.

 

- 자바는 JVM을 사용하여 플랫폼에 상관없이 읽고 실행할 수 있지만, 네이티브 코드 사용이 필요한 순간이 있다. 

   -> 이러한 순간을 충족시키기 위해 자바 코드와 네이티브 코드를 연결할 수 있는 JNI라는 인터페이스를 사용한다.

 

<네이티브 코드가 사용되는 경우>

1. 하드웨어 자체 가능을 동작시켜야 하는 경우

2. 이미 네이티브 코드로 작성된 라이브러리를 사용하고 싶은 경우

3. 프로세스의 성능을 향상해야 하는 경우

 

 

+) API(Application Programming Interface) : 여러 프로그램들과 데이터베이스, 기능들의 상호 통신 방법을 규정하고 도와주는 매개체이다.

+) Native Code : C, C++처럼 인터프리터 없이 운영체제가 읽을 수 있는 형태로 컴파일해 사용 가능한 코드를 뜻한다.

 



2. NDK란?

NDK(Native Development Kit)는 안드로이드에서 C, C++ 코드를 사용할 수 있게 해주는 개발 도구 모음이다.

- 네이티브 액티비티를 관리하고 센서 터치 입력과 같은 실제 기기를 액세스 하는데 사용 가능한 플랫폼 라이브러리를 지원한다.

 

<NDK의 장점>

1. 기기의 성능을 최대한 활용, 짧은 지연 시간을 구현해야 하거나, 게임, 물리학 시뮬레이션과 같은 컴퓨터 집약 애플리케이션을 실행하는 상황에서 유용하다.

2. 본인 또는 다른 개발자의 C, C++ 라이브러리를 재사용하는 경우 유용하다.

 

<NDK의 단점>

1. SDK를 토대로 만들었기 때문에, 자바의 한계점을 그대로 지니고 있다.

2. 그래픽 처리, 센서 값 처리 등 CPU 처리 속도가 중요한 부분에서 SDK의 한계점이 나타난다. -> 이러한 한계점을 위해 구글은 안드로이드 어플리케이션에서도 C, C++를 활용할 수 있도록 NDK를 지원한다.

 

 

+) SDK(Software Development Kit) : 소프트웨어 개발 기트는 일반적으로 소프트웨어 기술자가 사용하여 특정한 소프트웨어 꾸러미, 소프트웨어 프레임워크, 하드웨어 플랫폼, 컴퓨터 시스템, 게임, 운영체제 등을 위한 응용 프로그램을 만들 수 있게 해주는 개발 도구의 집합이다. 

 


2.5 JNI와 NDK의 차이

JNI : 자바에서 C, C++로 짠 로직을 사용하게 해주는 인터페이스이다.

NDK : 안드로이드에서 C, C++ 언어를 사용하게 하기 위한 개발 도구이다.