ÀÚ¹Ù¿¡¼ »ç¿ëÇÏ´Â ±âº»Çü µ¥ÀÌÅÍ Å¸ÀÔ(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 |
|
|
8, unsigned |
|
|
8 |
|
|
16, unsigned |
|
|
16 |
|
|
32 |
|
|
64 |
|
|
32 |
|
|
64 |
|
|
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ºÎ ÀúÀÚ:ÃÖ¿µ°ü |