티스토리 뷰
광고
광고

네이티브 메서드가 성능을 개선해주는 일은 많지 않다.
🔎 자바 네이티브 인터페이스 (Java Native Interface, JNI)
네이티브 메서드란 C나 C++ 같은 네이티브 프로그래밍 언어로 작성한 메서드를 말한다.
JNI는 이렇게 Java 이외의 언어로 만들어진 네이티브 메서드를 Java와 상호작용할 수 있도록 연결해주는 인터페이스를 말한다.
즉, 자바 프로그램에서 네이티브 메서드(다른 언어로 작성된 메서드)를 호출하는 기술을 JNI라고 한다.
✔ 네이티브 메서드의 주요 쓰임
1. 레지스트리 같은 플랫폼 특화 기능을 사용한다.
2. 네이티브 코드로 작성된 기존 라이브러리를 사용한다.
3. 성능개선을 목적으로 성능에 결정적인 영향을 주는 영역만 따로 네이티브 언어로 작성한다.
4. 대체할 만한 자바 라이브러리가 없는 네이티브 라이브러리를 사용해야 할 때 사용한다.
하지만 JVM은 엄청난 속도로 발전해왔다.
자바 초기 시절(자바 3 전)이라면 모르겠지만, 현재는 자바가 성숙해가면서 하부 플랫폼의 기능들을 점차 흡수하고 있다.
사례로는 자바9에서 process API를 추가해 OS프로세스에 접근하는 길을 열어주었다.
👎 네이티브 메서드의 단점
네이티브 메서드에는 심각한 단점이 있다.
- 네이티브 언어가 안전하지 않으므로 네이티브 메서드를 사용하는 애플리케이션도 메모리 훼손 오류로부터 더 이상 안전하지 않다.
- 네이티브 언어는 자바보다 플랫폼을 많이 타므로 이식성이 낮다.
- 디버깅도 더 어렵다.
- 주의하지 않으면 속도가 오히려 느려질 수 있다.
- 가비지 컬렉터가 네이티브 메모리는 자동 회수하지 못하고, 추적조차 할 수 없다.
- 자바 코드와 네이티브 코드의 경계를 넘나들 때마다 비용도 추가된다.
- 네이티브 메서드와 자바 코드 사이의 '접착 코드(glue code)'를 작성해야 하는데, 이는 귀찮은 작업이기도 하고, 가독성도 떨어진다.
📚 정리하자!
네이티브 메서드가 성능을 개선해 주는 많지 않으므로, 네이티브 메서드를 사용하기 전에 한번 더 생각해라.
저수준 자원이나 네이티브 라이브러리를 사용해야만 해서 어쩔 수 없더라도
네이티브 코드는 최소한만 사용하고 철저히 테스트하자.
네이티브 코드 안에 숨은 단 하나의 버그가 애플리케이션 전체를 훼손할 수도 있다!
728x90
'Programming > Effective Java' 카테고리의 다른 글
[이펙티브자바] Item 1. 생성자 대신 정적 팩터리 메서드를 고려하라 (1) | 2022.07.30 |
---|---|
[이펙티브자바] Item 65. 리플렉션보다는 인터페이스를 사용하라 (0) | 2022.07.27 |
[이펙티브자바] Item 64. 객체는 인터페이스를 사용해 참조하라 (0) | 2022.07.27 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- BOJ
- bruteforce
- 완전탐색
- Java
- dfs
- Retrofit2
- 이펙티브자바
- DevOps
- BFS
- 알고리즘
- cicd
- 조합
- 아이템59
- 순열
- OS
- IMAGE
- springboot
- subset
- 그래프탐색
- 백준
- 토큰기반인증
- 완탐
- 운영체제
- docker
- EffectiveJava
- 아이템60
- dp
- 아이템61
- docker-compose
- Container
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함
250x250