티스토리 뷰

반응형

자바 네이티브 인터페이스 (Java Native Interface, JNI)

자바 프로그램이 네이티브 메서드를 호출하는 기술

네이티브 메서드 : C나 C++ 같은 네이티브 프로그래밍 언어로 작성한 메서드

 

 

네이티브 메서드의 주요 쓰임

1) 레지스트리 같은 플랫폼 특화 기능 사용

  • 자바가 성숙해가면서 (OS같은) 하부 플랫폼 기능을 흡수하고 있음 → 점차 네이티브 메서드 사용 필요성 감소
  • ex) 자바9는 processAPI를 추가하여 OS 프로세스에 접근할 수 있도록 함

2) 네이티브 코드로 작성된 기존 라이브러리 사용

  • 레거시 데이터를 사용하는 레거시 라이브러리
  • 대체할만한 자바 라이브러리가 없는 네이티브 라이브러리를 사용해야할때 네이티브 메서드 써야함

3) 성능 개선을 목적으로 성능에 결정적인 영향을 주는 영역만 따로 네이티브 언어로 작성

  • 성능 개선을 목적으로 네이티브 메서드를 사용하는것은 거의 권장하지 않음
  • JVM이 많이 발전하여 현재 자바는 다른 플랫폼에 견줄만한 성능을 보이기 때문

 

 

네이티브 메서드의 단점

1) 네이티브 언어가 안전하지 않으므로 [아이템 50] 네이티브 메서드를 사용하는 애플리케이션도 메모리 훼손 오류에 안전하지 않음

2) 네이티브 언어는 자바보다 플랫폼에 많이 의존적이어서 이식성이 낮고 디버깅도 더 어려움

3) 성능, 비용

  • 주의하지 않으면 속도가 오히려 느려질 수 있음
  • 가비지 컬렉터가 네이티브 메모리는 자동 회수하지 못하고 심지어 추적조차 할 수 없음 [아이템 8]
  • 자바 코드와 네이티브 코드의 경계를 넘나들때마다 비용 추가됨

3) 네이티브 메서드와 자바 코드 사이의 접착 코드를 작성하기에 귀찮고 가독성도 떨어짐

 

 

결론

네이티브 메서드를 사용하려거든 한번 더 생각해보자.

네이티브 메서드가 성능을 개선해주는 일은 많지 않다.

저수준 자원이나 네이티브 라이브러리 사용을 위해서 어쩔 수 없더라도 네이티브 코드는 최소한으로 하고 철저히 테스트하라.

네이티브 코드 안에 숨은 버그 하나가 애플리케이션 전체를 훼손할 수 있다.

반응형
댓글
반응형
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday