일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- RxJava
- flutter firestore
- Kotlin
- UWP
- mfc
- livedata
- C++
- Java
- kodility
- Android P
- Python
- Django REST framework
- android architecture component
- Django REST Android
- android push
- 프로그래머스
- 안드로이드 구글맵
- 코틀린
- NDK
- Android
- FLUTTER
- Rxjava2
- C/C++
- Django REST
- dart
- RxAndroid
- 알고리즘
- Flutter TextField
- 안드로이드
- C
- Today
- Total
개발하는 두더지
[Effective Java 규칙54] 네이티브 메서드는 신중하게 사용하라 본문
[Effective Java 규칙54] 네이티브 메서드는 신중하게 사용하라
Effective Java 2/E 책과 구글링을 통해 내용을 정리하고 개인적인 견해가 포함된 글입니다.
자바 네이티브 인터페이스 ( JNI, Java Native Interface )는 C, C++ 등의 네이티브 프로그래밍 언어로 작성된 네이티브 메서드를 호출하는데 사용하는 기능이다. 네이티브 메서드에 계산하는 기능이 있다면 계산은 네이티브 언어로 실행되며 자바 언어로 전달되는 과정을 통한다.
전통적으로 네이티브 메서드는 3가지 용도로 사용되었다.
1. 네이티브 메서드를 이용하면 레지스트리나 파일 락 같은 특정 플랫폼에 고유한 기능을 이용할 수 있었다.
(자바 플랫폼이 발전하면서 특정 플랫폼에 고유한 기능들도 제공되어서 이젠 장점이 아니게 되었다.)
2. 이미 구현되어 있는 라이브러리를 이용할 수 있고, 그 라이브러리를 통해 기존 테이터를 활용할 수 있었다.
3. 성능이 중요한 부분의 처리를 네이티브 언어에 맡길 수 있었다.
네이티브 메서드를 통해 성능을 개선하는 것을 추천하지는 않는다.
지금의 JVM은 훨씬 빠르고, 메모리 훼손 문제로부터 자유로울 수 없고, 디버깅하기도 훨씬 어렵고, 네이티브 코드를 넘나드는데 필요한 비용때문에 네이티브 메서드가 딱히 하는일이 별로 없다면 오히려 성능이 떨어질 수도 있다.
회사에서 담당하고 있는 솔루션의 경우
기존에 만들어진 C++ 알고리즘을 활용하기위해, 자바의 거의 완벽한 디컴파일링때문에 JNI를 이용하여 솔루션을 만들었다.
'Java,Android' 카테고리의 다른 글
[Effective Java 규칙66] 변경 가능 공유 데이터에 대한 접근은 동기화하라 (0) | 2018.11.13 |
---|---|
[Effective Java 규칙60] 표준 예외를 사용하라 (0) | 2018.11.01 |
[Effective Java 규칙53] 리플렉션 대신 인터페이스를 이용하라 (0) | 2018.11.01 |
[Effective Java 규칙52] 객체를 참조할 때는 그 인터페이스를 사용하라 (0) | 2018.11.01 |
[Effective Java 규칙51] 문자열 연결 시 성능에 주의하라 (0) | 2018.11.01 |