티스토리 뷰
반응형
자바 네이티브 인터페이스 (Java Native Interface, JNI)
자바 프로그램이 네이티브 메서드를 호출하는 기술
네이티브 메서드 : C나 C++ 같은 네이티브 프로그래밍 언어로 작성한 메서드
네이티브 메서드의 주요 쓰임
1) 레지스트리 같은 플랫폼 특화 기능 사용
- 자바가 성숙해가면서 (OS같은) 하부 플랫폼 기능을 흡수하고 있음 → 점차 네이티브 메서드 사용 필요성 감소
- ex) 자바9는 processAPI를 추가하여 OS 프로세스에 접근할 수 있도록 함
2) 네이티브 코드로 작성된 기존 라이브러리 사용
- 레거시 데이터를 사용하는 레거시 라이브러리
- 대체할만한 자바 라이브러리가 없는 네이티브 라이브러리를 사용해야할때 네이티브 메서드 써야함
3) 성능 개선을 목적으로 성능에 결정적인 영향을 주는 영역만 따로 네이티브 언어로 작성
- 성능 개선을 목적으로 네이티브 메서드를 사용하는것은 거의 권장하지 않음
- JVM이 많이 발전하여 현재 자바는 다른 플랫폼에 견줄만한 성능을 보이기 때문
네이티브 메서드의 단점
1) 네이티브 언어가 안전하지 않으므로 [아이템 50] 네이티브 메서드를 사용하는 애플리케이션도 메모리 훼손 오류에 안전하지 않음
2) 네이티브 언어는 자바보다 플랫폼에 많이 의존적이어서 이식성이 낮고 디버깅도 더 어려움
3) 성능, 비용
- 주의하지 않으면 속도가 오히려 느려질 수 있음
- 가비지 컬렉터가 네이티브 메모리는 자동 회수하지 못하고 심지어 추적조차 할 수 없음 [아이템 8]
- 자바 코드와 네이티브 코드의 경계를 넘나들때마다 비용 추가됨
3) 네이티브 메서드와 자바 코드 사이의 접착 코드를 작성하기에 귀찮고 가독성도 떨어짐
결론
네이티브 메서드를 사용하려거든 한번 더 생각해보자.
네이티브 메서드가 성능을 개선해주는 일은 많지 않다.
저수준 자원이나 네이티브 라이브러리 사용을 위해서 어쩔 수 없더라도 네이티브 코드는 최소한으로 하고 철저히 테스트하라.
네이티브 코드 안에 숨은 버그 하나가 애플리케이션 전체를 훼손할 수 있다.
반응형
'Java > Effective Java' 카테고리의 다른 글
[Effective Java] 68.일반적으로 통용되는 명명 규칙을 따르라 (0) | 2022.04.12 |
---|---|
[Effective Java] 67.최적화는 신중히 하라 (0) | 2022.04.12 |
[Effective Java] 65.리플렉션보다는 인터페이스를 사용하라 (0) | 2022.04.12 |
[Effective Java] 64.객체는 인터페이스를 사용해 참조하라 (0) | 2022.04.12 |
[Effective Java] 63.문자열 연결은 느리니 주의하라 (0) | 2022.04.08 |
댓글