맞는데 왜 틀릴까..?

Java/Effective Java

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

안도일 2023. 7. 30. 15:51

 

네이티브 메서드

C, C++ 같은 네이티브 프로그래밍 언어로 작성한 메서드다.
자바 네이티브 인터페이스는 자바 프로그램이 네이티브 메서드를 호출하는 기술이다.

 

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

 

1. 레지스트리 같은 플랫폼 특화 기능을 사용한다.

 

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

  • ex) 레거시 테이터를 사용하는 레거시 라이브러리 ( 더 이상 쓰기 힘들고 정상적이지 않는 화나게 만드는 난해한 코드)

 

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

  • 성능을 개선할 목적으로 네이티브 메서드를 사용하는 것은 권장하지 않는다.
  • 자바 초기 시절이라면 이야기가 다르지만, JVM은 그동안 엄청난 속도로 발전해 왔기 때문에 대부분에 작업에서 지금의 자바는 다른 플랫폼에 견줄만한 성능을 보인다.

 

네이티브 메서드의 단점

 

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

 

결론

 

  • 네이티브 메서드를 사용하려거든 한번 더 생각하자.
  • 네이티브 메서드가 성능을 개선해주는 일은 많지 않다.
  • 그냥 쓰지말자.