¼Ò¼³°°Àº ÀÚ¹Ù 4ºÎ  Á¦20Àå J N I  20.3 ¼ýÀÚ ÀÎÀÚ¿Í ¹Ýȯ°ª  

 

20.3 ¼ýÀÚ ÀÎÀÚ¿Í ¹Ýȯ°ª

 

ÀÚ¹Ù¿¡¼­ »ç¿ëÇÏ´Â ±âº»Çü µ¥ÀÌÅÍ Å¸ÀÔ(primitive data types)Àº Ç÷§Æû¿¡ »ó°ü¾øÀÌ Ç×»ó °íÁ¤µÈ Å©±â¸¦ °®½À´Ï´Ù. ÀÚ¹Ù´Â °¡»ó¸Ó½Å À§¿¡¼­ ½ÇÇàµÇ±â ¶§¹®ÀÌÁÒ. ¿¹¸¦ µé¾î ÀÚ¹Ù¿¡¼­ intÇü µ¥ÀÌÅÍ Å¸ÀÔÀº 4¹ÙÀÌÆ®ÀÇ ¸Þ¸ð¸® °ø°£À» Â÷ÁöÇÕ´Ï´Ù. ÇÏÁö¸¸ C¿Í °°Àº ¾ð¾î¿¡¼­ int´Â ¿î¿µÃ¼Á¦ Áï, Ç÷§Æû¿¡ µû¶ó 4¹ÙÀÌÆ® ȤÀº 2¹ÙÀÌÆ®ÀÇ Å©±â¸¦ °®½À´Ï´Ù. ¸¸¾à ÀÚ¹Ù Äڵ尡 È£ÃâÇÑ Native Method¿¡°Ô ¸Å°³ º¯¼ö·Î intÇü µ¥ÀÌÅͰ¡ ³Ñ¾î¿Ô´Ù¸é, Native Method´Â ±× µ¥ÀÌÅ͸¦ 4¹ÙÀÌÆ®ÀÇ int·Î ÀνÄÇÏ°í ´Ù·ç¾î¾ß¸¸ µ¥ÀÌÅÍÀÇ ¼Õ½ÇÀÌ ¾øÀ» °ÍÀÔ´Ï´Ù.

 

ÀÌ·¯ÇÑ ÀÚ¹Ù¿Í ´Ù¸¥ ¾ð¾î°£ÀÇ ±âº»Çü µ¥ÀÌÅÍ Å¸ÀÔÀÇ Â÷À̸¦ ÇØ°á Çϱâ À§Çؼ­, JNI´Â ¾Æ·¡ Ç¥¿Í °°ÀÌ Native Method°¡ ÀÚ¹ÙÀÇ ±âº»Çü µ¥ÀÌÅÍ¿¡ Á¢±ÙÇÒ ¼ö ÀÖµµ·Ï ¹Ì¸® Á¤ÀÇµÈ µ¥ÀÌÅÍ Å¸ÀÔµéÀ» Á¦°øÇÕ´Ï´Ù.

 

Java Type

Native Type

Size in bits

Boolean

jboolean

8, unsigned

Byte

jbyte

8

Char

jchar

16, unsigned

Short

jshort

16

Int

jint

32

Long

jlong

64

Float

jfloat

32

double

jdouble

64

void

void

n/a

Ç¥ 20-1 Native Method¸¦ À§ÇØ Á¦°øµÇ´Â JNI¿¡¼­ Á¤ÀÇµÈ µ¥ÀÌÅÍ Å¸ÀÔ

 

Native TypeÀº Java Type¾Õ¿¡ ´Ü¼øÈ÷ ¡®j¡¯¸¸ ºÙ¿©¼­ Ç¥½ÃÇÏ´Â °ÍÀÌ´Ï, »ç¿ëÇϱâ´Â ½±ÁÒ? ÀÌ·¸°Ô JNI°¡ ¹Ì¸® Á¤ÀÇÇØ ³õÀº µ¥ÀÌÅÍ Å¸ÀÔÀ» »ç¿ëÇØ¼­ Native Method´Â ÀÚ¹ÙÀÇ ±âº»Çü µ¥ÀÌÅ͵éÀ» ¸Å°³º¯¼ö·Î ¹Þ¾Æµé¿©, ¿¬»êÀ» Çϰí, °á°ú·Î ¹Ýȯ ½Ãų ¼ö ÀÖ½À´Ï´Ù.

 

ÀÌÇØ¸¦ µ½±â À§ÇØ intÇü µ¥ÀÌÅÍ µÎ°³¸¦ ¹Þ¾Æ¼­ °á°ú¸¦ ¹ÝȯÇÏ´Â °£´ÜÇÑ ¿¹Á¦¸¦ ¸¸µé¾î º¸°Ú½À´Ï´Ù. ¿ì¼± Native Method¸¦ ÀÚ¹Ù ÇÁ·Î±×·¥ÀÌ È£Ãâ ÇÒ ¼ö ÀÖµµ·Ï, ¼±¾ðÀ» ÇØ ÁÖ¾î¾ß ÇÕ´Ï´Ù. ¾Õ Àý¿¡¼­ ÇÑ ¼ø¼­¿Í °°À¸´Ï ÀÌÁ¦´Â Á» Àͼ÷ÇÏ½Ç °ÍÀÔ´Ï´Ù.

 

Calculator.java(°£´ÜÇÑ ¼ýÀÚ°è»êÀ» À§ÇÑ Native Method ¼±¾ð)

public class Calculator {

   static {

       System.loadLibrary("calculator");

   }

   public native int add(int a, int b);

   public static void main(String[] args) throws Exception {

       Calculator c = new Calculator();

       int result = c.add(10,5);

       System.out.println(result);

   }

}

C:\JavaExample\20> javac Calculator.java

C:\JavaExample\20> javah Calculator

 

C:\JavaExample\20> dir

¡¦

Calculator.class

Calculator.h

¡¦

 

 ¡°calculator¡±¶ó´Â ¶óÀ̺귯¸®¸¦ ·ÎµùÇØ ¿À´Â Äڵ带 ÀÛ¼º ÇÑ ÈÄ ¸Þ¼­µå¸¦ native·Î ¼±¾ðÇß½À´Ï´Ù.

 

n        System.loadLibrary("calculator");

n        public native int add(int a, int b);

 

Calculator.java¸¦ ÄÄÆÄÀÏ ÇÏ°í ³ª¼­, javah¸¦ »ç¿ëÇØ¼­ Native Method°¡ ÂüÁ¶ÇÒ Çì´õ ÆÄÀÏÀ» ¸¸µì´Ï´Ù. ´ÙÀ½À¸·Î, ¸¸µé¾îÁø Çì´õ ÆÄÀÏÀ» ÂüÁ¶Çؼ­, ½ÇÁ¦ µ¿ÀÛÀ» ¼öÇàÇÒ Native Method¸¦ ÀÛ¼ºÇÕ´Ï´Ù.

 

Calculator.c(°£´ÜÇÑ °è»êÀÇ ½ÇÁ¦ Native MethodÀÇ ±¸Çö)

#include <jni.h>

#include "Calculator.h"

#include <stdio.h>

 

JNIEXPORT jint JNICALL Java_Calculator_add (JNIEnv *env, jobject obj, jint a, jint b){

   jint sum;

   printf("a + b = ");

   sum = a + b;

   return sum;

}

C:\JavaExample\20>cl -Ic:\jdk1.3.1\include -Ic:\jdk1.3.1\include\win32 -LD Calculator.c

 -Fecalculator.dll

 

C:\JavaExample\20>java Calculator

a + b = 15

 

 À§¿¡¼­ ¸¸µç Çì´õÆÄÀÏ ¡°Calculator.h¡±¸¦ include½Ãŵ´Ï´Ù.

 

n        #include "Calculator.h"

 

¿¹Á¦¸¦ º¸¸é, ÀÚ¹Ù¿¡¼­ ³Ñ°ÜÁÖ´Â intÇü µ¥ÀÌÅ͸¦ Native Method³»¿¡¼­ ¡®jint¡¯¶ó´Â JNI°¡ Á¦°øÇÏ´Â µ¥ÀÌÅÍ Å¸ÀÔÀ¸·Î Á¢±ÙÇϰí ÀÖ½À´Ï´Ù. ¸¶Âù°¡Áö·Î °á°ú¸¦ ¹Ýȯ ÇÒ ¶§µµ, ¡®jint¡¯Çü µ¥ÀÌÅÍ Å¸ÀÔÀ» »ç¿ëÇØ¼­ ¹ÝȯÇÕ´Ï´Ù. À§ÀÇ Native Method ¼±¾ðºÎºÐ¿¡¼­ intÇü ¸Å°³º¯¼ö µÑÀ» ¿ä±¸ÇÔÀ¸·Î, ¿©±â¼­ ±¸ÇöÇÏ´Â ºÎºÐ¿¡¼­µµ, jintÇü µÎ°³¸¦ ¸Å°³º¯¼ö·Î ¹Þ´Â °ÍÀº ´ç¿¬ÇϰÚÁö¿ä.

 

n        JNIEXPORT jint JNICALL Java_Calculator_add (JNIEnv *env, jobject obj, jint a, jint b)

 

À§ C Äڵ带 ÄÄÆÄÀÏ ÇÏ¿© ¶óÀ̺귯¸®¸¦ ¸¸µç ÈÄ, ÇÁ·Î±×·¥À» ½ÇÇàÇØ¼­ È®ÀÎÇϸé À§¿Í °°Àº °á°ú°¡ Ãâ·ÂÀÌ µË´Ï´Ù. À̰ÍÀ» º¸°í ¿ì¸®´Â ÀÚ¹ÙÀÇ intÇü µ¥ÀÌÅ͵éÀÌ Á¤»óÀûÀ¸·Î Native Method¾È¿¡¼­ ´Ù·ç¾î Áö´Â °ÍÀ» È®ÀÎ ÇÒ ¼ö ÀÖ½À´Ï´Ù. ¿©±â¼­ Áß¿äÇÑ °ÍÀº ÀÚ¹Ù¿Í C¾ð¾îÀÇ µ¥ÀÌÅÍ ÇüÀ» Àß ¸ÂÃß´Â °ÍÀÔ´Ï´Ù.

 

¢Ñ ¼ýÀÚ ÀÎÀÚ¿Í ¹Ýȯ °ª »ç¿ë

Native Method ³»¿¡¼­ ÀÚ¹ÙÀÇ ±âº»Çü µ¥ÀÌÅÍ¿¡ Á¢±ÙÇÒ ¼ö ÀÖµµ·Ï, JNI¿¡¼­ Á¦°øÇÏ´Â ¹Ì¸® Á¤ÀÇµÈ µ¥ÀÌÅÍ Å¸ÀÔÀ» »ç¿ëÇÑ´Ù



jabookÀúÀÚ¸íÇÔ
Á¦¸ñ:¼Ò¼³°°ÀºÀÚ¹Ù4ºÎ
ÀúÀÚ:ÃÖ¿µ°ü