¼Ò¼³°°Àº ÀÚ¹Ù 4ºÎ  Á¦20Àå J N I  20.6 °´Ã¼ÀÇ ¸Þ¼­µå ½ÇÇàÇϱ⠠

 

20.6 °´Ã¼ÀÇ ¸Þ¼­µå ½ÇÇàÇϱâ

 

 ¿ì¸®´Â ÀÌÁ¦±îÁö ÀÚ¹Ù¿¡¼­ ´Ù¸¥ ¾ð¾îÀÇ ¸Þ¼­µå¸¦ È£ÃâÇØ¼­ »ç¿ëÇÏ´Â ¹æ¹ý¿¡ ´ëÇØ »ìÆì º¸¾Ò½À´Ï´Ù. À̹ø¿¡´Â ÀÌÀÇ ¹Ý´ë °æ¿ìÀÎ C¿¡¼­ ÀÚ¹ÙÀÇ ¸Þ¼­µå È£ÃâÇÏ´Â ¹æ¹ý¿¡ ´ëÇØ ¾Ë¾Æº¼±î ÇÕ´Ï´Ù. Native Method ³»ºÎ¿¡¼­ ÀÚ¹ÙÀÇ ¸Þ¼­µå¸¦ È£ÃâÇÏ´Â ¹æ¹ýÀº ¹Ù·Î ¾Õ Àý¿¡¼­ ¾ð±ÞÇÑ °´Ã¼ÀÇ º¯¼ö¿¡ Á¢±ÙÇÏ´Â ¹æ¹ý°ú ¸Å¿ì À¯»çÇÑ ´Ü°è¸¦ °ÅĨ´Ï´Ù.

 

n        1´Ü°è : ÀÚ¹Ù °´Ã¼ÀÇ Å¸ÀÔ ¾Ë¾Æ¿À±â

n        2´Ü°è : ÀÚ¹Ù °´Ã¼ÀÇ Å¸ÀÔ¿¡¼­ºÎÅÍ, È£ÃâÇÏ·Á´Â ¸Þ¼­µåÀÇ ½Äº° Á¤º¸¸¦ ¾Ë¾Æ¿À±â

n        3´Ü°è : ¸Þ¼­µåÀÇ ½Äº° Á¤º¸¸¦ »ç¿ëÇØ¼­ ¸Þ¼­µå¸¦ È£ÃâÇϱâ

 

 2´Ü°è¿Í 3´Ü°è¿¡¼­ º¯¼öÀÇ ½Äº° Á¤º¸ ´ë½Å, ¸Þ¼­µåÀÇ ½Äº° Á¤º¸¸¦ »ç¿ëÇÏ´Â °Í¸¸ÀÌ ´Þ¶óÁ³½À´Ï´Ù. ¸Þ¼­µåÀÇ ½Äº° Á¤º¸´Â jmethodID¶ó´Â JNI°¡ ¹Ì¸® Á¤ÀÇÇØ ³õÀº ŸÀÔÀ» »ç¿ëÇÕ´Ï´Ù.

 

ÇѰ¡Áö ÁÖÀÇÇÒ Á¡ÀÌ ÀÖ´Ù¸é, ¸Þ¼­µåÀÇ °æ¿ì ¸Å°³º¯¼ö¿Í ¹Ýȯ °ªÀ» °¡Áö±â ¶§¹®¿¡, ÀÌ·± ¸Å°³º¯¼ö¿Í ¹Ýȯ°ªÀ» Native Method°¡ ÀÌÇØÇÒ ¼ö ÀÖµµ·Ï Ư¼öÇÑ Ã³¸®¸¦ ÇØÁÖ¾î¾ß ÇÕ´Ï´Ù. ¿¹¸¦ µé¾î ´ÙÀ½°ú °°ÀÌ µÎ°³ÀÇ Á¤¼ö¸¦ ¸Å°³º¯¼ö·Î ¹Þ¾Æ¼­ ±× °öÀ» ±¸ÇÑ ÈÄ ¹Ýȯ ½ÃÄÑÁÖ´Â ¸Þ¼­µå°¡ ÀÖ´Ù°í ÇսôÙ. ¿ì¸®´Â ÀÌ ¸Þ¼­µå¸¦ C¿¡¼­ È£ÃâÇØ »ç¿ëÇÏ·Á°í ÇÕ´Ï´Ù.

 

MethodControl.java(µÎ°³ÀÇ int Çü µ¥ÀÌÅ͸¦ ¹Þ¾Æ¼­ °öÀ» ±¸ÇÑ ÈÄ ¹ÝÈ¯ÇØ ÁÖ´Â ¸Þ¼­µå)

public class MethodControl {

   static {

       System.loadLibrary("control");

   }

   public native void add();

   public int multi(int a, int b){

       return a*b;

   }

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

       new MethodControl().add();

   }

}

C:\JavaExample\20> javac JavaObject.java

C:\JavaExample\20> javah JavaObject

 

20.5ÀýÀÇ [Ç¥ 20.2]¸¦ º¸¸é, ¸Þ¼­µåÀÇ ¸Å°³º¯¼ö¿Í ¹ÝȯÇüÀº ´ÙÀ½°ú °°ÀÌ Ç¥ÇöÀÌ µË´Ï´Ù. ¾ÕÀÌ ¸Å°³º¯¼öÀÇ µ¥ÀÌÅÍ Å¸ÀÔÀÌ°í µÚ°¡ ¹ÝȯµÇ´Â µ¥ÀÌÅÍÀÇ Å¸ÀÔÀÔ´Ï´Ù.

 

n        ( arg-types ) ret-type

 

 int add(int a, int b) ¸Þ¼­µåÀÇ ¸Å°³ º¯¼ö¿Í ¹Ýȯ ÇüÀ» À§ ¹æ½Ä´ë·Î Ç¥ÇöÇϸé, ´ÙÀ½°ú °°½À´Ï´Ù.

 

n        (II)I

 

intÇü ¸Å°³ º¯¼ö°¡ µÎ°³À̱⠶§¹®¿¡, À̸¦ ³ªÅ¸³»´Â ¡°I¡± ¹®ÀÚ°¡ Ưº°ÇÑ ±¸ºÐÀÚ ¾øÀÌ ¿¬¼ÓÀ¸·Î ¾²¿©Á® ÀÖ°í, ¸®ÅÏ Å¸ÀÔ ¿ª½Ã int À̹ǷΠ¡°I¡±¶ó°í Ç¥ÇöµÇ¾ú½À´Ï´Ù.

 

±×·¯¸é, ½ÇÁ¦·Î MethodControl°´Ã¼ÀÇ multi()¸Þ¼­µå¸¦ È£ÃâÇÏ´Â Native MethodÀÇ Äڵ带 ÀÛ¼ºÇØ º¸°Ú½À´Ï´Ù.

 

MethodControl.c(MethodControlÀÇ multi()¸Þ¼­µå¸¦ È£ÃâÇÏ´Â Native ÄÚµå)

#include <jni.h>

#include "MethodControl.h"

#include <stdio.h>

 

JNIEXPORT void JNICALL Java_MethodControl_add (JNIEnv *env, jobject obj){

  

   jclass class_methodcontrol = (*env)->GetObjectClass(env, obj);

   jmethodID m_id = (*env)->GetMethodID(env, class_methodcontrol, "multi", "(II)I");

   jint a, b, c;

   a = 5;

   b = 10;

 

   c = (*env)->CallIntMethod(env, obj, m_id, a, b);

   printf("c = %d \n", c);

}

C:\JavaExample\method>cl -Ic:\jdk1.3.1\include -Ic:\jdk1.3.1\include\win32 -LD M

ethodControl.c -Fecontrol.dll

¡¦¡¦

MethodControl.c

¡¦¡¦

/dll

/implib:control.lib

/out:control.dll

MethodControl.obj

   Creating library control.lib and object control.exp

 

C:\JavaExample\method>java MethodControl

c = 50

 

 ´Ù¸¥ ÄÚµåµéÀº ¾Õ°ú °°°í, ¸Þ¼­µåÀÇ ÂüÁ¶°ªÀ» ¹Þ´Â ºÎºÐ¸¸ »ìÆìº¸¸é µÉ °Í °°½À´Ï´Ù.

 

n        jmethodID m_id = (*env)->GetMethodID(env, class_methodcontrol, "multi", "(II)I");

 

 ¿©±â¼­ ÀÎÀÚ·Î ¾²ÀÎ ¡®multi¡¯´Â ÀÚ¹Ù¿¡¼­ÀÇ ¸Þ¼­µå À̸§À̰í, ¡®(II)I¡¯Àº ¸Þ¼­µåÀÇ µ¥ÀÌÅÍ Å¸ÀÔÀ» ³ªÅ¸³À´Ï´Ù. ¾ÕÀÇ ¡®(II)¡¯´Â ¸Þ¼­µå¿¡ ¾²ÀÎ ¸Å°³º¯¼öÀÇ µ¥ÀÌÅÍ Å¸ÀÔÀ̰í, µÚÀÇ ¡®I¡¯´Â ¹ÝȯµÇ´Â °á°ú°ªÀÇ µ¥ÀÌÅÍ Å¸ÀÔÀÔ´Ï´Ù.

 

 ´ÙÀ½Àº CallIntMethod()¸Þ¼­µå¸¦ »ç¿ëÇØ¼­, ÀÚ¹ÙÀÇ ¸Þ¼­µå¸¦ C¿¡¼­ È£ÃâÇØ °á°ú°ªÀ» »Ì¾Æ³»´Â ÄÚµåÀÔ´Ï´Ù.

 

n        c = (*env)->CallIntMethod(env, obj, m_id, a, b);

 

 ÀÚ¹ÙÀÇ multi()¸Þ¼­µå¸¦ È£ÃâÇϱâ À§ÇØ, ¾Õ¿¡¼­ GetMethodID()¸Þ¼­µå·Î ±¸ÇÑ ¸Þ¼­µåÀÇ ÂüÁ¶°ªÀ» ÀÎÀÚ·Î ÁÖ¾ú½À´Ï´Ù. ±×¸®°í ¡®a¡¯¿Í ¡®b¡¯´Â C¿¡¼­ »ç¿ëÇÒ º¯¼öÀ̸§ ÀÔ´Ï´Ù.

 

 JNI°¡ Á¦°øÇÏ´Â ¸Þ¼­µå È£Ãâ ÇÔ¼öµéÀº ´ÙÀ½°ú °°½À´Ï´Ù. µ¥ÀÌÅÍ Å¸ÀÔ¿¡ ÀûÀýÇÏ°Ô »ç¿ëÇÏ½Ã¸é µË´Ï´Ù.

 

Call<returntype>Method

 

CallBooleanMethod

 

CallByteMethod

 

CallCharMethod

 

CallDoubleMethod

 

CallFloatMethod

 

CallIntMethod

 

CallLongMethod

 

CallObjectMethod

 

CallShortMethod

 

CallVoidMethod

 

Ç¥ 20-4 JNI¿¡¼­ Á¦°øÇÏ´Â ¸Þ¼­µå È£Ãâ ÇÔ¼ö

 

 

¢Ñ ÀÚ¹Ù °´Ã¼ÀÇ ¸Þ¼­µå È£ÃâÇϱâ

´ÙÀ½ÀÇ ´Ü°è¸¦ °ÅÃļ­ ÀÚ¹Ù ¸Þ¼­µå¸¦ È£ÃâÇÕ´Ï´Ù

l        1´Ü°è : ÀÚ¹Ù °´Ã¼ÀÇ Å¸ÀÔ(jclas) ¾Ë¾Æ¿À±â

l        2´Ü°è : ÀÚ¹Ù °´Ã¼ÀÇ Å¸ÀÔ¿¡¼­ºÎÅÍ, È£ÃâÇÏ·Á´Â ¸Þ¼­µåÀÇ ½Äº° Á¤º¸(jmethodID)¸¦ ¾Ë¾Æ¿À±â

l        3´Ü°è : ¸Þ¼­µåÀÇ ½Äº° Á¤º¸¸¦ »ç¿ëÇØ¼­ ¸Þ¼­µå¸¦ È£ÃâÇϱâ



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