-
JNI 와 PURE JAVA?Back end/Java 기본 2024. 6. 26. 15:00
JNI (Java Native Interface)
: JNI(Java Native Interface)**는 Java 애플리케이션에서 네이티브(플랫폼 특정) 코드를 호출할 수 있게 해주는 프로그래밍 프레임워크입니다. 이는 Java 프로그램이 C, C++ 등의 네이티브 언어로 작성된 라이브러리나 코드와 상호작용할 수 있도록 설계되었습니다.
주요 특징:
- 플랫폼 종속 코드 호출: JNI를 사용하면 Java 코드에서 특정 운영 체제 기능이나 하드웨어와 상호작용하는 코드(C, C++ 등)를 호출할 수 있습니다.
- 네이티브 라이브러리 로드: System.loadLibrary() 메서드를 통해 네이티브 라이브러리를 로드합니다.
- 메서드 선언: 네이티브 메서드를 Java에서 선언하고, 해당 메서드를 네이티브 언어로 구현합니다.
- JNI 환경 접근: 네이티브 코드에서 Java 환경(JVM) 및 객체에 접근할 수 있습니다.
예시:
Java 클래스에서 네이티브 메서드를 선언하는 예
public class MyClass {
static {
System.loadLibrary("mylibrary"); // 네이티브 라이브러리 로드
}
public native void myNativeMethod(); // 네이티브 메서드 선언
public static void main(String[] args) {
new MyClass().myNativeMethod(); // 네이티브 메서드 호출
}
}C/C++로 네이티브 메서드를 구현하는 예:
#include <jni.h> #include "MyClass.h" JNIEXPORT void JNICALL Java_MyClass_myNativeMethod(JNIEnv *env, jobject obj) { // 네이티브 코드 구현 printf("Hello from native code!\n"); } Pure Java
: Pure Java는 순수하게 Java 언어만을 사용하여 작성된 코드를 의미합니다. 즉, 네이티브 코드를 포함하지 않고, Java의 표준 라이브러리와 기능만을 사용합니다.
주요 특징:
- 이식성: Pure Java 코드는 JVM이 있는 모든 플랫폼에서 실행될 수 있습니다. 이는 Java의 "Write Once, Run Anywhere" 철학을 반영합니다.
- 안전성: 네이티브 코드와 달리, Pure Java 코드는 JVM의 메모리 관리 및 보안 모델에 의존하여 안전성을 보장합니다.
- 디버깅 용이성: Pure Java 코드는 JVM 내에서 실행되므로, Java 디버거를 사용하여 쉽게 디버깅할 수 있습니다.
- 플랫폼 비종속성: Pure Java 코드는 운영 체제나 하드웨어에 종속되지 않습니다.
예시:
public class PureJavaExample {
public static void main(String[] args) {
System.out.println("This is a pure Java example.");
}
}비교
- 의존성:
- JNI: 네이티브 라이브러리에 의존하며, 해당 라이브러리는 특정 플랫폼에 종속될 수 있습니다.
- Pure Java: Java 표준 라이브러리만 사용하며, 플랫폼에 종속되지 않습니다.
- 이식성:
- JNI: 네이티브 코드 때문에 이식성이 제한될 수 있습니다.
- Pure Java: JVM이 있는 모든 플랫폼에서 실행될 수 있어 이식성이 높습니다.
- 성능:
- JNI: 성능이 중요한 경우 네이티브 코드를 사용하여 최적화를 할 수 있습니다.
- Pure Java: JVM 위에서 실행되며, 네이티브 코드보다 성능이 떨어질 수 있습니다.
- 안전성:
- JNI: 네이티브 코드의 버그나 보안 취약점이 JVM에 영향을 줄 수 있습니다.
- Pure Java: JVM의 관리 및 보안 모델을 따르므로 안전성이 높습니다.
즉 JNI와 Pure Java를 나누는 이유는 각각의 장점과 적용 범위를 고려하여 최적의 솔루션을 선택하기 위함입니다. 성능이 중요하고 특정 플랫폼 기능을 활용해야 할 경우 JNI를 사용하여 네이티브 코드와 통합할 수 있습니다. 반면, 플랫폼 독립성과 안정성이 필요한 경우 Pure Java를 사용하여 이점을 활용할 수 있습니다. 개발 목표와 요구 사항에 따라 적절한 방법을 선택하여 코드를 설계하고 구현하는 것이 중요합니다. 'Back end > Java 기본' 카테고리의 다른 글
자바파일 compile 방법. (0) 2024.07.01 Java 문제 (0) 2023.12.17 for문을 이용한 구구단 출력 (0) 2023.11.17 윤년 문제 (if문) (0) 2023.11.17 메소드 구조 예시 (0) 2023.11.17