Home [Effective Java] Item66. 네이티브 메서드는 신중히 사용하라!
Post
Cancel

[Effective Java] Item66. 네이티브 메서드는 신중히 사용하라!

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

Intro

  • 자바 네이티브 인터페이스(JNI)는 자바 프로그램이 네이티브 메서드를 호출하는 기능이다.
  • 네이티브 메서드란 C나 C++ 같은 네이티브 프로그래밍 언어로 작성한 메서드를 말한다.

네이티브 메서드의 쓰임

  1. 레지스트리 같은 플랫폼 특화 기능 사용
    • 자바가 성숙해가면서 (OS같은) 하부 플랫폼의 기능들을 흡수하고 있다. 이는 네이티브 메서드 사용의 필요성이 감소한다는 얘기다.
    • 예를 들어 자바 9은 새로운 process API를 추가해 OS 프로세스에 접근하는 길을 열어주었다.
  2. 네이티브 코드로 작성된 기존 라이브러리 사용
    • 레거시 데이터를 사용하는 레거시 라이브러리가 그 예이다.
  3. 성능 개선을 목적으로 성능에 결정적인 영향을 주는 영역만 따로 네이티브 언어로 작성
    • 성능을 개선할 목적으로 네이티브 메서드를 사용하는 것은 거의 권장하지 않는다.
    • 자바 초기라면 이야기가 다르지만, JVM의 비약적인 발전으로 대부분의 작업에서 자바는 다른 플랫폼에 견줄만하다.

네이티브 메서드의 단점

  • 네이티브 언어가 안전하지 않으니 네이티브 메서드를 사용하는 애플리케이션도 메모리 훼손 오류로부터 안전하지 않다.
  • 네이티브 언어는 자바보다 플랫폼을 많이 타서 이식성이 낮다.
  • 디버깅이 어렵다.
  • 주의하지 않으면 속도가 오히려 더 느리다.
  • 가비지 컬렉터가 네이티브 메모리는 자동 회수하지 못한다. 추적조차 못한다.
  • 자바와 네이티브를 넘나들 때마다 비용이 추가된다.
  • 네이티브와 자바 코드 사이의 ‘접착 코드’를 작성해야 한다. 귀찮은 작업이고, 가독성도 떨어진다.

핵심 정리

  • 네이티브 메서드를 사용하려거든 한번 더 생각하자.
  • 네이티브 메서드가 성능을 개선해주는 일은 많지 않다.
  • 저수준 차원이나 네이티브 라이브러리를 사용해야만 하는 경우를 제외하고는 네이티브 코드를 최소화하자. 또 철저히 테스트하자.
  • 네이티브 코드 안에 숨은 단 하나의 버그가 애플리케이션 전체를 훼손할 수 있다.
This post is licensed under younghwani by the author.

[Effective Java] Item65. 리플렉션보다는 인터페이스를 사용하라!

[Effective Java] Item67. 최적화는 신중히 하라!

Comments powered by Disqus.