$\require{mediawiki-texvc}$

연합인증

연합인증 가입 기관의 연구자들은 소속기관의 인증정보(ID와 암호)를 이용해 다른 대학, 연구기관, 서비스 공급자의 다양한 온라인 자원과 연구 데이터를 이용할 수 있습니다.

이는 여행자가 자국에서 발행 받은 여권으로 세계 각국을 자유롭게 여행할 수 있는 것과 같습니다.

연합인증으로 이용이 가능한 서비스는 NTIS, DataON, Edison, Kafe, Webinar 등이 있습니다.

한번의 인증절차만으로 연합인증 가입 서비스에 추가 로그인 없이 이용이 가능합니다.

다만, 연합인증을 위해서는 최초 1회만 인증 절차가 필요합니다. (회원이 아닐 경우 회원 가입이 필요합니다.)

연합인증 절차는 다음과 같습니다.

최초이용시에는
ScienceON에 로그인 → 연합인증 서비스 접속 → 로그인 (본인 확인 또는 회원가입) → 서비스 이용

그 이후에는
ScienceON 로그인 → 연합인증 서비스 접속 → 서비스 이용

연합인증을 활용하시면 KISTI가 제공하는 다양한 서비스를 편리하게 이용하실 수 있습니다.

자바와 C/C++의 혼합 프로그래밍
Java and C/C++ Mixed Programming 원문보기

멀티미디어학회논문지 = Journal of Korea Multimedia Society, v.13 no.10, 2010년, pp.1514 - 1524  

김상훈 (세명대학교 컴퓨터학부)

초록
AI-Helper 아이콘AI-Helper

표준 자바 클래스 라이브러리는 용용 프로그램에 의해 요구되는 플랫폼 의존적인 기능을 수행하지 못한다. 따라서 플랫폼 의존적인 기능을 포함한 자바 응용 프로그램은 JNI를 사용한 네이티브 함수를 호출하여 부족한 기능을 수행하여야 한다. 네이티브 언어 프로그래머는 다양한 자바 객체와 연결하고 사용 후 이를 해지해야하는 작업을 명시적으로 기술해야 한다. 이러한 번거로운 작업을 피하기 위한 방법을 본 논문에서 제안하고자 한다. 순수 자바 클래스에서 네이티브 메소드는 코드 블록을 가질 수 없다. 자바 네이티브 메소드가 네이티브 코드로 작성된 몸채를 가질 수 있도록 함으로써 프로그래머는 JNI를 의식하지 않고 프로그래밍하는 것이 가능하다. 이를 위해 네이티브 환경의 자바 클래스인 네이티브 클래스라는 개념, 그리고 자바 클래스와 네이티브 클래스 간에 제어와 자료의 교환을 지원하는 중재기를 두어 해결하였다.

Abstract AI-Helper 아이콘AI-Helper

The standard Java class library does not support the platform-dependent features needed by the application. Therefore, the Java application including the platform -dependent features must supplement the required features by invoking native functions using JNI. The native language programmer has to e...

주제어

AI 본문요약
AI-Helper 아이콘 AI-Helper

* AI 자동 식별 결과로 적합하지 않은 문장이 있을 수 있으니, 이용에 유의하시기 바랍니다.

문제 정의

  • NMA를 구성하는 CDT의 핵심 모듈인 스텁 함수와 프락시 함수에 대해 좀 더 구체적으로 살펴보자. 자바 메소드가 네이티브 함수를 호줄하는 경우 매개변수로 전달되는 자료와 반환으로 돌려받는 값에 대해 고려하여 보자.
  • 보여준다. 그리고 본 도구를 사용하여 얻은 실행 속도 측정값을 통하여 본 연구의 실용성을 보임으로서 결론짓고자 한다.
  • 네이티브 함수에서 자바 객체의 필드를 접근하는 방법에 대해 알아보자. 자바 필드는 매개변수와는 달리 기본 자료형도 직접 접근이 불가능하다.
  • 이러한 작업은 스텁 함수에 의해 이루어진다. 네이티브 함수에서 자바 메소드의 호출을 살펴보자. 네이티브 함수가 직접 자바 메소드를 호출할 수 없다.
  • 다음은 네이티브 메소드 몸체에서 C 자료를 자바 객체로 반환하거나, 또는 자바 메소드를 호출하고 반환 값을 얻는 경우에 대해 알아보자. 이 모든 경우 해당 자료의 자료형이 기본형이거나 스트링인 경우는 표 3의 자료형 매핑 관계에 따라 자료를 주고받을 수 있다.
  • 연구에서는 자바 클래스에 네이티브 코드를 직접 작성할 수 있도록 하여 네이티브 코드 작성의 어려움을 해소하고자 한다. 또한 자바 어노테이션(annotation)을 이용하여 네이티브 언어의 종류와 네이티브 코드에서 필요한 헤더 파일 정보를 전달하고자 한다. 본 연구의 결과인 네이티브 코드 블록을 가지는 자바 클래스를 JaC(Java class with C/C++ block)라 부르도록 하겠다.
  • 마지막으로 네 이티브 함수에서 자바 메소드를 호출하는 경우에 대해 알아보도록 하자. 첫째 Get- ObjectClass와 GetMethodID를 호출하여 메소드 식별자를 얻어야 한다.
  • 본 연구에서는 이상에서 언급한 연구 및 기존 도구들에서 발생하는 부담을 해결하고자 자바 클래스 내에 네이티브 코드를 직접 작성할 수 있는 방법을 제안하였다. 본 논문에서 제안한 방법은 네이티브 코드로 C와 C++를 모두 사용할 수 있고, C++ 템플릿 라이브러리 또는 자바 패키지의 사용이라는 추가적인 부담을 갖지 않으며, 자바의 필드와 메소드를 모두 자유로이 접근할 수 있다.
  • 참조형 자료는 직접 접근은 불가능하며 JNI을 경유하여 C 언어에서 접근할 수 있는 형태로 변환해 주어야 한다. 본 연구에서는 자바 참조형 중에서 스트링과 기본형 배열만 접근이 가능하도록 하고 있다. 매개변수로 전달된 자바 스트링은 JNI 함수인 GetStringUTFChars을 사용하여 C 스트링으로 변환하여 읽어 온다.
  • 메소드 선언만을 포함할 수 있다. 연구에서는 자바 클래스에 네이티브 코드를 직접 작성할 수 있도록 하여 네이티브 코드 작성의 어려움을 해소하고자 한다. 또한 자바 어노테이션(annotation)을 이용하여 네이티브 언어의 종류와 네이티브 코드에서 필요한 헤더 파일 정보를 전달하고자 한다.
  • 그러나 JNI를 사용하기 위해서는 다양한 전처리 및 후처리 과정을 요구하여 프로그래머를 괴롭히고 있다. 본 장에서는 이러한 어려움은 무엇이며, 이를 해결하기 위한 다양한 지원 도구들에 대해 알아보고, 그들의 한계점에 대해 살펴봄으로써 본 연구의 필요성을 보이고자 한다.
  • 자료의 접근에 대해 살펴보았다. 장에서는 자바 객체와 네이티브 메소드의 상호작용을 지원하는 NMA와 이를 생성하는 JaC 클래스 번역기에 대해 살펴본다.
  • 이전 장에서 JaC 클래스의 문장구조와 자료형 그리고 자료의 접근에 대해 살펴보았다. 본 장에서는 자바 객체와 네이티브 메소드의 상호작용을 지원하는 NMA와 이를 생성하는 JaC 클래스 번역기에 대해 살펴본다.
  • 살펴보자. 자바 메소드가 네이티브 함수를 호줄하는 경우 매개변수로 전달되는 자료와 반환으로 돌려받는 값에 대해 고려하여 보자. 두 언어의 매개변수 전달 방식은 모두 값 전달 방식을 사용하고 있으므로 표 3와 같이 대응하는 자료형으로의 단순 변환만으로 직접 접근 가능하다.
  • 지금까지 네이티브 메소드 몸체에서 자료형에 따른 매개변수 또는 필드의 접근에 대해 알아보았다.
본문요약 정보가 도움이 되었나요?

참고문헌 (11)

  1. Ken Arnold, James Gosling and David Holmes, The Java Programming Language, 4th Edition, Addition Wesley, 2005. 

  2. Java Native Interface Specification. http://java.sun.com/javase/6/docs/technotes/guides/jni/spec/jniTOC.html. 

  3. Sheng Liang, The Java Native Interface: Programmer's Guide and Specification, Addition Wesley, 1999. 

  4. Tim Lindholm and Frank Yellin, The Java Virtual Machine Specification, 2nd Edition, Addison Wesley, 1999. 

  5. GlueGen, https//gluegen.dev.java.net 

  6. HawtJNI, http://fusesource.org/forge/projects/HA WTJNI. 

  7. JNA, http://jna.dev.java.net. 

  8. Evgeniy Gabrilovich and Lev Finkelstein, "JNI-C++ integration made easy," C/C++ Users Journal, Vol.19, No.1, pp. 10-21, 2001. 

  9. JavaCC, https://javacc.dev.java.net. 

  10. Viswanathan Kodaganallur, "Incorporating Language Processing into Java Applications: A JavaCC Tutorial," IEEE Software, Vol.21, No.4, pp. 70-77, 2004. 

  11. BCEL, http://jakarta.apache.org/bcel. 

저자의 다른 논문 :

섹션별 컨텐츠 바로가기

AI-Helper ※ AI-Helper는 오픈소스 모델을 사용합니다.

AI-Helper 아이콘
AI-Helper
안녕하세요, AI-Helper입니다. 좌측 "선택된 텍스트"에서 텍스트를 선택하여 요약, 번역, 용어설명을 실행하세요.
※ AI-Helper는 부적절한 답변을 할 수 있습니다.

선택된 텍스트

맨위로