일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- @IdClass
- 복합키
- uncheck Exception
- REST API 규칙
- github
- Error creating bean with name
- Filter
- 1차캐시
- jpa에러
- json
- ERD 작성
- JPA
- 인텔리제이
- JPA주의사항
- REST란
- jwt메서드
- Q 클래스
- 스프링 부트 공식 문서
- git
- Unsatisfied dependency
- queryDSL
- 스프링 부트 기능
- jpa회원가입
- 빈생성안됨
- json gson 차이
- spring서버
- 스프링부트오류
- 최종 프로젝트
- JoinColumn
- Spring Spring boot 차이
- Today
- Total
Everyday Dev System
JNI란? 본문
자바에서 Arrays 클래스 코드들을 뜯어보다가 처음보는 것을 발견해서 찾아보았다.
native 란 ? JNI란?
import java.util.Arrays;
public class test {
public static void main(String[] args) {
int[] arr = {0,1,2,3,4};
System.out.println("Arrays.toString(arr) = " + Arrays.toString(arr));
System.out.println();
// copyOf
int[] arr2 = Arrays.copyOf(arr, arr.length);
System.out.println("Arrays.toString(arr2) = " + Arrays.toString(arr2));
int[] arr3 = Arrays.copyOf(arr, 3);
System.out.println("Arrays.toString(arr3) = " + Arrays.toString(arr3));
int[] arr4 = Arrays.copyOf(arr, 7); // 범위가 넘어가는 복사는 초기화값이 들어간다.
System.out.println("Arrays.toString(arr4) = " + Arrays.toString(arr4));
System.out.println();
// copyOfRange
int[] arr5 = Arrays.copyOfRange(arr, 1, 3);
System.out.println("Arrays.toString(arr5) = " + Arrays.toString(arr5));
int[] arr6 = Arrays.copyOfRange(arr, 0, 7);// 범위가 넘어가는 복사는 초기화값이 들어간다.
System.out.println("Arrays.toString(arr6) = " + Arrays.toString(arr6));
}
}
위 테스트 코드들을 실행해보던 중에
Arrays 구현체 내부를 살펴보다가 native 라는 것을 발견했다.
아래는 Arrays 클래스의 코드 중 일부이다.
아래는 System 클래스 일부분이다. 해당 메서드에 native 라는 것이 명시 되어 있다.
먼저, JNI를 살펴보자. 이는 자바라는 언어의 한계를 극복시켜 줄 수 있다.
무슨 말일까? 아래에 블로그 글을 보며 이해한 바를 정리해보았다.
자바는 플랫폼으로부터 독립적이다.
이 말의 의미는 어떠한 OS 환경이여도 맞는 JVM을 설치하면 자바를 실행할 수 있기 때문이다. 플랫폼에 국한되지 않고 어떠한 환경에서도 활용할 수 있기 때문에 플랫폼으로부터 독립적인 것이다.
자바는 JVM에 의해서 동작하여 JVM에 의해 자바 애플리케이션을 개발할 수 있다.
JVM은 플랫폼에 상관없이 자바를 읽고 실행 가능하다. (= ,java 파일을 컴파일한 .class 파일을 읽을 수 있다.)
그러나 자바로 개발한 SW일지라도 네이티브 코드가 필요한 순간이 있다.
네이티브 코드 :
JVM과 같은 인터프리터 없이 OS가 읽을 수 있는 형태로 컴파일하여 사용 가능한 코드 (C, C++)를 말한다.
이러한 필요를 충족시키기 위해 JVM은 자바 코드와 네이티브 코드를 연결할 수 있는 인터페이스를 제공한다.
그것이 JNI 이다.
JNI
자바 코드를 C, C++와 같은 코드로 만들어진 애플리케이션이나 라이브러리를 함께 사용할 수 있도록 연결해주는 역할을 한다. 자바로 개발한 SW는 유연한 플랫폼 활용도를 유지하며 자바만으로 구현하기 어려운 것들을 구현할 수 있다.
references :
https://change-words.tistory.com/entry/%EC%9E%90%EB%B0%94-JNI
자바 JNI란? (네이티브 코드와의 연결)
자바로 개발한 소프트웨어 설치셋에서 JNI라는 폴더를 본적이 있으신가요? 자바 개발의 한계를 극복시켜주는 JNI에 대해 설명드리겠습니다. Java의 장점과 한계 자바 코드의 장점은 플랫폼으로부
change-words.tistory.com
'나의 호기심' 카테고리의 다른 글
스프링부트로 인터셉트 활용하기 (0) | 2023.10.02 |
---|---|
System.arraycopy 메서드가 native인 이유 (0) | 2023.09.30 |
Java에서 Exception 뜯어보기 (0) | 2023.08.04 |
QueryDSL에서 Q 클래스는 어디에 위치해있을까? (0) | 2023.08.01 |
AWS의 ELB, ALB, CLB, NLB 란? (0) | 2023.07.28 |