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

## 네이티브 메서드

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

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

### 단점

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

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


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://dahye-jeong.gitbook.io/database/master-4/java/effective_java/2021-07-31-use-native-methods-judiciously.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
