> For the complete documentation index, see [llms.txt](https://dahye-jeong.gitbook.io/database/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://dahye-jeong.gitbook.io/database/master-4/java/effective_java/2021-07-31-use-native-methods-judiciously.md).

# ITEM 66: 네이티브 메서드는 신중히 사용해라

## 네이티브 메서드

네이티브 메서드란 C나 C++ 같은 네이티브 프로그래밍 언어로 작성한 메서드를 말한다. 네이티브 메서드는 다음과 같은 경우에 주로 사용된다.

1. 레지스트리 같은 **플랫폼 특화 기능**
   * 점점 자바도 하부 플랫폼 기능(OS와 같은)을 제공하고 있지만, 대체할 만한 자바 라이브러리가 없는 경우에는 네이티브 라이브러리를 사용해야한다.
2. 네이티브 코드로 작성된 기존 라이브러리를 사용
   * 레거시 데이터를 사용하는 레거시 라이브러리
3. 성능 개선을 목적으로 성능에 결정적인 영향을 주는 영역만 따로 네이티브 언어로 작성
   * **성능 개선을 목적으로 네이티브 메서드를 사용하는 것은 권장하지 않는다.**

### 단점

* 네이티브 메서드를 사용하는 어플리케이션도 메모리 훼손 오류의 위험성이 있다.
* 네이티브 언어는 자바보다 이식성이 낮다.
* 디버깅이 어렵다.
* 주의하지 않으면, 오히려 성능이 더 안좋아질 수 있다.
* 가비지 컬렉터가 네이티브 메모리는 자동 회수하지 못하며, 추적도 할 수 없다.
* 자바 코드에서 네이티브 코드로, 네이티브 코드에서 자바 코드로 바뀔 때마다 추가 비용이 든다.
* 네이티브 메서드와 자바 코드 사이의 접착코드(glue code)를 작성해야하며, 가독성이 떨어질 뿐만 아니라 귀찮은 작업이다.

네이티브 코드가 반드시 필요한 경우에 최소한만 사용하고, 테스트를 철저히 해야한다.
