Search

Item 66. 네이티브 메서드는 신중히 사용하라

생성일
2023/08/08 23:54
챕터
9장 - 일반적인 프로그래밍 원칙

요약

네이티브 메서드는 고려해야하는 단점들이 많고 자바의 개선으로 크게 성능이 뒤쳐지지 않으니, 성능 개선이 목적이라면 네이티브 메서드는 사용하지 말자.

네이티브 인터페이스

자바 네이티브 인터페이스(JNI, Java Native Interface)는 자바 프로그램이 C나 C++ 같은 네이티브 프로그래밍 언어로 작성된 메서드(네이티브 메서드)를 호출하는 기술이다.
네이티브 메서드는 주로 세 가지 경우에 사용된다.
자바에서 제공하지 않는 레지스트리 같은 플랫폼 특화 기능을 사용하는 경우
네이티브 코드로 작성된 기존 라이브러리를 사용하는 경우
성능 개선 목적으로, 성능에 결정적인 영향을 주는 영역만 네이티브 언어로 작성하는 경우

네이티브 메서드의 단점

하지만 성능 개선할 목적으로 네이티브 메서드를 사용하는 것은 거의 권장되지 않는다.
자바는 꾸준히 개선되어 왔고, 그로 인해 원래의 네이티브 구현에 성능이 크게 뒤쳐지지 않고 오히려 더 좋아진 부분들도 있다.
뿐만 아니라 네이티브 메서드는 안전하지 않은 언어를 사용하므로, 네이티브 메서드를 사용하는 어플리케이션도 메모리 훼손 오류로부터 안전하지 않게 된다.
또한 네이티브 언어는 플랫폼을 많이 타기 때문에 이식성도 낮고, 디버깅도 더 어렵다.
가비지 컬렉터가 네이티브 메모리는 자동회수하지 못하고, 추적할 수 없다. 또한 주의해서 사용하지 않으면 성능도 더 안 좋아질 수 있다.
자바 코드와 네이티브 코드 경계를 넘나들 때마다 오버헤드가 발생한다.
네이티브 코드와 자바 코드 사이에 접착 코드(glue code)를 작성해야 하는데, 귀찮고 가독성이 떨어진다.