네이티브 메서드
자바 네이티브 인터페이스(Java Native Interface, JNI)는 자바 프로그램이 네이티브 메서드 를 호출하는 기술을 말한다.
네이티브 메서드 란 C나 C++ 같은 네이티브 프로그래밍 언어로 작성한 메서드를 말한다.
네이티브 메서드는 주로 다음과 같은 용도로 사용된다.
- 플랫폼 특화 기능 사용
- 네이티브 코드로 작성된 기존 라이브러리 (레거시 라이브러리가 그 예다)
- 성능 개선을 목적으로 성능에 결정적인 영향을 주는 영역만 따로 네이티브 언어로 작성
그러나 네이티브 메서드를 성능을 개선할 목적으로 사용하는 것은 권장하지 않는다.
네이티브 메서드의 단점
- 네이티브 언어가 안전하지 않으므로 네이티브 메서드를 사용하는 애플리케이션도 메모리 훼손 오류로부터 더 이상 안전하지 않다.
- 네이티브 언어는 자바보다 플랫폼을 많이 타기 때문에 이식성이 낮다.
- 디버깅이 더 어렵다.
- 주의하지 않으면 속도가 오히려 느려질 수도 있다.
- 가비지 컬렉터가 네이티브 메모리는 자동 회수하지 못한다. 심지어 추적조차 할 수 없다.
- 네이티브 메서드와 자바 코드 사이의 접착 코드(glue code)를 작성해야 한다. 이는 작업하기 귀찮을 뿐만 아니라 가독성도 떨어진다.
📌 핵심 정리
네이티브 메서드를 사용하려거든 더 생각해보자.
네이티브 메서드가 성능을 개선해주는 일은 많지 않다.
저수준 자원이나 네이티브 라이브러리를 사용해야만 해서 어쩔 수 없더라도 네이티브 코드는 최소한만 사용하고 철저히 테스트하자.
네이티브 코드 안에 숨은 단 하나의 버그가 애플리케이션 전체를 훼손할 수도 있다.