Open zpqmdh opened 1 week ago
Q.
네이티브 메서드란 무엇이고 종류에는 어떤 것이 있는지 궁금합니다. 또한 네이티브 메서드를 사용하면 메모리 충돌 오류가 발생할 수 있다는 뜻으로 이해했는데 왜 그런지도 궁금합니다.
A.
Native Method는 Java 언어 이외의 프로그래밍 언어로 작성된 메서드를 의미합니다. 왜 이런 메서드가 필요한지는 아래의 예시를 통해 생각해봅시다.
JDK 1.8(Java 8)까지는 OS에 올라가 있는 프로세스들에 접근하는 기능이 Java 언어 자체에서 아에 지원되지 않았습니다. 그런데 프로세스에 접근해야 하는 일이 발생한다면 어떻게 될 지 생각해 봅시다.
이를 언어적으로 지원하는 C/C++ 언어를 사용하여 구현해야 합니다. 하지만 Java에서는 C/C++ 코드를 동작시킬 수 없습니다. 이러한 간극을 해소하기 위해 JNI(Java Native Interface)라는 것이 대두되었습니다.
JNI는 위의 상황의 C/C++ 언어를 사용하여 구현한 코드를 JVM에서 동작할 수 있게 하는 것으로 Native Method는 Java 이외(현재는 C/C++ 만 가능하다고 알고 있습니다.)의 언어로 구현한 메서드를 의미합니다.
이때 여러 제약들이 존재합니다.
finalizer
, cleaner
메서드를 사용할 경우에 가능합니다.Native Method를 사용하면 메모리 충돌이 발생할 수 있다는 이유는 Java 언어가 아닌 C/C++ 언어의 경우 포인터를 사용해 하드웨어 메모리를 직접적으로 접근하여 작업을 수행해야 하므로 메모리 충돌 오류가 충분히 발생할 수 있기 때문입니다.
위의 주제와는 별개로 현재 JNI를 이용한 Native Method를 사용하는 것은 점점 줄어드는 추세입니다. 왜냐하면 현재 Java의 버전이 22까지 나온 만큼 라이브러리 단위에서 지원하지 않는 기능이 많이 줄어들었기 때문입니다.
네이티브 메서드란 무엇이고 종류에는 어떤 것이 있는지 궁금합니다. 또한 네이티브 메서드를 사용하면 메모리 충돌 오류가 발생할 수 있다는 뜻으로 이해했는데 왜 그런지도 궁금합니다.