네이티브 메서드는 신중히 사용하라
java effectivejava
Java 네이티브 인터페이스(Java Narive Interface)
Java 네이티브 인터페이스(JNI)는 Java 프로그램이 C나 C++ 같은 네이티브 프로그래밍 언어로 작성한 메서드를 호출하는 기능이다.
주로 쓰이는 곳은 다음과 같다.
- 레지스트리 같은 플랫폼 특화 기능
- 네이티브 코드로 작성된 기존 라이브러리를 사용하는 경우
- 성능 개선을 목적으로 성능에 영향을 미치는 영역만 네이티브 언어로 작성하는 경우
하지만 Java의 버전이 증가하면서 OS 같은 하부 플랫폼의 기능을들 점차 흡수하여 네이티브 메서드를 사용할 필요가 줄어들고 있다.
성능 개선 목적마저 권장하지 않는다.
단점
네이티브 메서드는 심각한 단점이 있다.
일반적으로 외부에서 실행되기 때문에 메모리 접근 오류와 같은 저수준 문제가 발생할 수 있으며, 잘못된 메모리 영역에 접근하여 메모리 내용을 손상시킬 수 있다.
또한 Java 플랫폼을 많이 가리기 때문에 이식성도 낮으며 디버깅도 어렵다.
GC에 대상이 아니기 때문에 메모리를 자동 회수하지 못하고, 심지어 추적할 수 없다.
Java에서 사용하는 경우 접착 코드(glue code)를 작성해야하기 때문에 번거롭다.
따라서 네이티브 메서드를 최소한만 사용하고 철저히 테스트하도록 하자.
쓰는 경우가 있는가?
아무리봐도 쓰지 않을 것 같은데 궁금한 마음에 유쾌한 스프링방에서 질문해봤다.
진짜 드물지만 아직 사용하는 환경이 있다고 한다! (좋은 답변 감사합니다.)
참고자료
- 이펙티브자바 3판