ABOUT ME

물음표가 아닌 느낌표로 행하는 박진수입니다. 우선 클론코딩으로 스터디한 기록들을 작성 후 스스로 재정리 하여 스킬향상을 위해 사용됩니다.😃 또한 소프트웨어 엔지니어로서 경험한 기록들을 적어 나아가고 있습니다 :)

Today
Yesterday
Total
  • JNI 와 PURE JAVA?
    Back end/Java 기본 2024. 6. 26. 15:00

    JNI (Java Native Interface)

    : JNI(Java Native Interface)**는 Java 애플리케이션에서 네이티브(플랫폼 특정) 코드를 호출할 수 있게 해주는 프로그래밍 프레임워크입니다. 이는 Java 프로그램이 C, C++ 등의 네이티브 언어로 작성된 라이브러리나 코드와 상호작용할 수 있도록 설계되었습니다.

    주요 특징:

    1. 플랫폼 종속 코드 호출: JNI를 사용하면 Java 코드에서 특정 운영 체제 기능이나 하드웨어와 상호작용하는 코드(C, C++ 등)를 호출할 수 있습니다.
    2. 네이티브 라이브러리 로드: System.loadLibrary() 메서드를 통해 네이티브 라이브러리를 로드합니다.
    3. 메서드 선언: 네이티브 메서드를 Java에서 선언하고, 해당 메서드를 네이티브 언어로 구현합니다.
    4. 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의 표준 라이브러리와 기능만을 사용합니다.

    주요 특징:

    1. 이식성: Pure Java 코드는 JVM이 있는 모든 플랫폼에서 실행될 수 있습니다. 이는 Java의 "Write Once, Run Anywhere" 철학을 반영합니다.
    2. 안전성: 네이티브 코드와 달리, Pure Java 코드는 JVM의 메모리 관리 및 보안 모델에 의존하여 안전성을 보장합니다.
    3. 디버깅 용이성: Pure Java 코드는 JVM 내에서 실행되므로, Java 디버거를 사용하여 쉽게 디버깅할 수 있습니다.
    4. 플랫폼 비종속성: Pure Java 코드는 운영 체제나 하드웨어에 종속되지 않습니다.

    예시:

    public class PureJavaExample {
        public static void main(String[] args) {
            System.out.println("This is a pure Java example.");
        }
    }

    비교

    1. 의존성:
      • JNI: 네이티브 라이브러리에 의존하며, 해당 라이브러리는 특정 플랫폼에 종속될 수 있습니다.
      • Pure Java: Java 표준 라이브러리만 사용하며, 플랫폼에 종속되지 않습니다.
    2. 이식성:
      • JNI: 네이티브 코드 때문에 이식성이 제한될 수 있습니다.
      • Pure Java: JVM이 있는 모든 플랫폼에서 실행될 수 있어 이식성이 높습니다.
    3. 성능:
      • JNI: 성능이 중요한 경우 네이티브 코드를 사용하여 최적화를 할 수 있습니다.
      • Pure Java: JVM 위에서 실행되며, 네이티브 코드보다 성능이 떨어질 수 있습니다.
    4. 안전성:
      • 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
Designed by Tistory.