JNI 레이어
안드로이드 프레임워크에서 C/C++과 자바 레이어가 유기적으로 동작하게 만들려면 자바 레이어(상위)와
C/C++ 레이어(하위) 를 상호 연결해 주는 매개체가 필요하다
자바와 C/C++ 모듈 간의 인터페이스를 가능하게 해주는 것이 바로 JNI (Java Native Interface) 다
JNI는 C/C++ 같은 자바 이외의 언어(네이티브 언어)로 만들어진 모듈이나 애플리케이션과 자바 클래스가 서로
상호작용할 수 있게 정의한 인터페이스를 의미한다
예를 들어, 자바 클래스에서 C언어로 작성된 라이브러리에 포함된 특정 함수를 사용하고 싶다거나,
반대로 C 프로그램에서 자바 클래스 라이브러리를 사용하고 싶다면 JNI를 사용해야 한다
일반적으로 JNI는 다음과 같은 경우에 주로 활용한다
* 빠른 처리 속도를 요구하는 루팅 작성
- 대개 자바는 네이티브 코드(C/C++ 등) 에 비해 느리다
따라서 빠른 처리 속도를 요하는 부분은 C/C++로 작성하고 이를 JNI를 통해 자바에서 호출하는 방법으로 속도 향상을 꾀할 수 있다
* 하드웨어 제어
- 하드웨어 제어 코드를 C를 작성한 다음 JNI를 통해 자바 레이어와 연결하면 자바에서도 하드웨어 제어가 가능하다
* 기존 C/C++ 프로그램의 재사용
- 이미 기존 코드가 대부분 C/C++ 로 작성돼 있다면 굳이 자바로 동일한 코드를 다시 작성하기 보다는 JNI를 통해 기존 코드를 활용할 수 있다
실제로 안드로이드 애플리케이션 개발자는 안드로이드 SDK를 이용해 자바 기반의 프로그램을 작성한다
반면에 성능 향상 등의 이유로 JNI를 사용하려면 안들로이드에서 제공하는 NDK를 이용해서 자바 애플리케이션과 연결 가능한 C/C++ 기반의 네이티브 라이브러리를 작성해야 한다
NDK는 안드로이드 애플리케이션에서 사용할 네이티브 라이브러리를 작성하기 위한 단순한 도구 모음일 뿐 실제로 모듈을 구현하려면 JNI 에 대한 지식이 필수다
이렇듯 JNI는 안드로이드 프레임워크를 이해하고 효율적으로 활용하기 위한 가장 기본적인 지식 중 하나다
앞으로 안드로이드에서 사용되는 각종 JNI 활용 기법을 간단한 예제 코드를 바탕으로 살펴보고, 안드로이드에서는 JNI를 어떻게 활용하고 있는지 실제 안드로이드 소스 코드를 토대로 알아보자