카테고리:

업데이트:

1. 들어가기

C나 C++ 같은 네이티브 프로그래밍 언어로 작성한 메서드를 네이티브 메서드라고 합니다.

자바 프로그램은 네이티브 메서드를 호출할 수 있는데 이러한 기술을 자바 네이티브 인터페이스라고 합니다.

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

그럼 자바 네이티브 메서드는 언제 사용할까요?

  1. 레지스트리와 같은 플랫폼 특화 기능일 때

  2. 네이티브 코드로 작성된 기존 라이브러리를 사용할 때

  3. 성능 개선이 필요할 때

3. 네이티브 메서드의 쓰임에 대한 반례

  1. 플랫폼 특화 기능

    플랫폼 특화 기능을 활용할 때는 분명 네이티브 메서드를 사용해야 합니다.

    하지만 매번 새로운 버전의 Java가 나오면서 하부 플랫폼 기능을 흡수하고 있습니다.

    따라서 네이티브 메서드를 사용할 필요가 계속 줄어들고 있습니다.

    ex. JDK 9 process API


  2. 성능 개선

    Java 초기에는 성능 개선을 위해 자바 네이티브 메서드를 사용해야 했지만

    최근 대부분 작업에서는 다른 플랫폼에 견줄만한 성능을 보이고 있습니다.

    ex. BigInteger

4. 네이티브 메서드를 써야하는 경우

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

    네이티브 라이브러리 쪽은 GNU 다중 정밀 연산 라이브러리를 필두로 개선 작업이 계속되어 왔습니다.

    따라서, 정말 고성능의 다중 정밀 연산이 필요한 경우 네이티브 라이브러리를 사용합니다.

5. 네이티브 메서드의 심각한 단점

네이티브 메서드는 다음과 같은 심각한 단점이 있습니다.

  1. 메모리 훼손 오류(버퍼 오버런, 배열 오버런 등)가 발생할 수 있다.

  2. 이식성이 낮다.

  3. 디버깅이 어렵다.

  4. 가비지 컬렉터가 네이티브 메모리는 자동 회수할 수 없고, 추적도 할 수 없다.

  5. 네이티브 메서드와 자바 코드 사이의 접착 코드를 작성해야 한다.

6. 정리

이번 포스트는 네이티브 메서드에 대해 알아보았습니다.

네이티브 메서드는 생각보다 많은 단점이 있기에 사용하기 전 다시 한번 고려해봅시다.

하지만 어쩔 수 없이 저수준 자원이나 네이티브 라이브러리를 사용해야 하는 경우에는

최소한만 사용하고 철저히 테스트합시다.

            
              📕 개인 기록용 블로그입니다.
              😊 오타나 잘못된 정보가 있을 경우 댓글이나 메일로 말씀해주시면 바로 수정하겠습니다! 😊
          

댓글남기기