JNI
자바에서 자바가 아닌 C/C++ 작성된 메소드를 실행 할 수 있다. 실제 구현은 C/C++로 하고 자바에서는 구현체에 대한 인터페이스만 가지게 된다. 이 인터페이스를 JNI라고 한다.
왜 JNI가 필요할까?
자바는 플랫폼 독립적인 언어인데 JNI를 사용하는 순간 플랫폼에 종속되게 된다. 그럼에도 불구하고 사용해야하는 상황들은 다음과 같다.
- 자바에서 하드웨어 제어
- 자바에서 지원되지 않는 특정 운영체제 서비스
- 기존 프로그램에서 자바가 제공하는 서비스를 이용
빌드 과정
- 'native' 키워드를 이용해 인터페이스를 포함하는 클래스를 작성한다. 몸체는 C/C++로 작성될 DLL이 대신한다.
public class MyNative { public native void doSomething(); }
- javah를 이용해 클래스를 컴파일한다. 컴파일 결과로 NativeClass.h라는 C 헤더파일을 얻는다.
javah -jni MyNative
- MyNative.h를 프로젝트 내로 옮기고 이를 참조하는 MyNative.cpp를 작성한다. 추가로 다음 경로도 클래스패스에 추가해야한다. 컴파일하여 DLL파일을 얻는다.
${jdkRoot}\include\,${jdkRoot}\include\win32
- 3번에서 생성한 MyNative.dll을 MyNative.class 파일이 있는 곳에 복사한다.
- java 프로그램을 실행한다.
java MyNative
참고자료
'개발 > Java' 카테고리의 다른 글
[Java] private vs protected (0) | 2020.02.17 |
---|---|
[Java] 불변(Immutable) 속성 (0) | 2020.02.04 |
[JVM] 런타임 데이터 영역(Run-time Data Area) (0) | 2020.02.01 |
[객체지향] 추상화, 캡슐화, 상속, 다형성 (1) | 2020.01.31 |
Java 8 람다표현식(Lamda expression)이란? (0) | 2020.01.11 |