철이의 컴노리
  • 안녕하세요!
  • KOTLIN
  • ANDROID
    • Architecture Components
      • 프로젝트에 추가하기
      • 데이터 바인딩 라이브러리
        • 시작하기
        • 레이아웃 및 바인딩 표현식
      • 라이프 사이클 처리
      • ViewModel
    • CameraX
      • CameraX 아키텍처
      • 구성
      • 미리보기
      • 이미지 분석
      • 이미지 캡처
      • 제조 업체 확장 기능
    • View
      • 커스텀뷰의 크기 정하기
    • JNI 튜토리얼
      • 1장. 저자 소개
      • 2장. Hello JNI
      • 3장. 메서드 등록
      • 4장. int 데이터형 값 주고 받기
      • 5장. boolean 데이터형 값 주고 받기
      • 6장. double 데이터형 값 주고 받기
      • 7장. float 데이터형 값 주고 받기
      • 8장. long 데이터형 값 주고 받기
      • 9장. short 데이터형 값 주고 받기
      • 10장. char 데이터형 값 주고 받기
      • 11장. byte 데이터형 값 주고 받기
      • 12장. JNI에서 문자열 다루기 1/3
      • 13장. JNI에서 문자열 다루기 2/3
      • 14장. JNI에서 문자열 다루기 3/3
      • 15장. 레퍼런스 이해하기
      • 16장. 배열 다루기 1/4
      • 17장. 배열 다루기 2/4
      • 18장. 배열 다루기 3/4
      • 19장. 배열 다루기 4/4
      • 20장. 중간 요약
      • 21장. 자바 클래스 찾기 1/2
      • 22장. 자바 클래스 찾기 2/2
      • 23장. 정적 메서드 찾기
      • 24장. 정적필드 찾기
      • 25장. 자바 클래스 인스턴스 생성하기
      • 26장. 자바 클래스 인스턴스 메서드 찾기
      • 27장. 자바 클래스의 인스턴스 필드 찾기
      • 28장. 네이티브 쓰레드 실행하기
  • Swift
    • What' New
      • Swift 5.0
        • Result 타입
        • Raw 문자열
        • 커스텀 문자열 보간
    • Codable
      • 커스텀 타입 인코딩 및 디코딩
  • iOS
  • OpenGL
    • OpenGL Tutorial
      • 1장. 저자 소개
      • 2장. OpenGL 윈도우 프레임웍 만들기 1편
      • 3장. OpenGL 윈도우 프레임웍 만들기 2편
      • 4장. 점그리기
      • 5장. 선 그리기
      • 6장. 다각형 그리기
      • 7장. 색 표현하기
      • 8장. 3차원 폴리곤 그리기
      • 9장. 투영변환
      • 10장. 이동, 회전, 크기 변환
      • 11장. 빛, 재질 표현하기
      • 12장. 텍스춰매핑
    • OpenGL ES Tutorial for iOS
      • 1장. 저자 소개
      • 2장. 튜토리얼 소개
      • 3장. OpenGL|ES 개발 환경 만들기
      • 4장. 뷰 배경색상 변경하기
      • 5장. 투영에 대해서 1/2
      • 6장. 투영에 대해서 2/2
      • 7장. 선분 및 삼각형 그리기
      • 8장. 색상칠하기
      • 9장. 텍스춰맵핑
      • 10장. 종횡비
      • 11장. 텍스춰 UV좌표
      • 12장. 텍스춰매핑 파라미터
      • 13장. 깊이버퍼
      • 14장. 원근투영
  • ENV
    • oh-my-zsh
      • 특정 git 폴더에서 zsh 이 느려질 때
  • Ubuntu
    • UEFI USB
    • nvidia driver
    • /dev/kvm on Android Studio
    • install oracle-jdk8
  • chromium
    • javap
Powered by GitBook
On this page

Was this helpful?

  1. ANDROID
  2. JNI 튜토리얼

20장. 중간 요약

지금까지 원시데이터형과 참조형 데이터형인 문자열과 배열을 다루어 보았다. 예제코드를 보면 알 수 있듯이 원시 데이터형은 자바레이어와 네이티브레이어 간에 자유롭게 사용하는 것이 가능했다. 즉, 특정 변환이 필요하지 않았다. 그러나, 참조형은 변환이 필요했다.

자바의 참조형을 읽거나 변경하려면 반드시 자바 참조형을 가리키는 C언어 포인터를 JNIEnv의 특정 함수를 통해 얻어 와야 하고 그 C언어 포인터를 통해서 자바 참조형 데이터를 읽거나 변경할 수 있다.

그와 반대로 C/C++ 데이터를 자바 레이어로 전달 하려면 반드시 C/C++ 데이터를 담을 수 있는 자바의 참조형 데이터가 필요하다. 즉, JNIEnv의 특정 함수를 사용해 C/C++ 데이터를 담을 주머니 같은 자바 참조형 데이터의 인스턴스를 생성한 다음 C/C++ 데이터를 자바 참조형 데이터 인스턴스(주머니)에 복사하거나 주머니를 가리키는 포인터를 통해 값을 설정해서 자바 참조형 데이터 인스턴스(주머니)를 자바레이어로 넘긴다.

따라서 C/C++의 구조체나 클래스의 인스턴스를 자바 레이어로 전달하려면 자바 레이어에 그와 상응하는 클래스가 반드시 있어야 한다. 상응하는 자바클래스 인스턴스를 생성하고 그 인스턴스에 C/C++ 구조체나 클래스 인스턴스의 값을 설정해서 자바 클래스 인스턴스를 자바 레이어로 넘기는 것이다.

이렇게 하려면 자바 레이어의 클래스를 찾고 그 클래스에서 멤버 함수나 멤버 변수를 찾는 리플렉션 기능이 필요하다. 다음 장부터 이 주제를 다룰 것이다.

Previous19장. 배열 다루기 4/4Next21장. 자바 클래스 찾기 1/2

Last updated 6 years ago

Was this helpful?