¼Ò¼³°°Àº ÀÚ¹Ù 4ºÎ  Á¦20Àå J N I  20.5 °´Ã¼ Çʵ忡 Á¢±ÙÇϱ⠠

20.5 °´Ã¼ Çʵ忡 Á¢±ÙÇϱâ

 

¿ì¸®´Â JNI°¡ Á¦°øÇÏ´Â ÇÔ¼ö¸¦ »ç¿ëÇØ¼­, ÀÚ¹Ù °´Ã¼°¡ °¡Áö°í ÀÖ´Â º¯¼öÀÇ °ªÀ» ´Ù¸¥ ¾ð¾î¿¡¼­ º¯°æÇÒ ¼öµµ ÀÖ°í, ±× °ªÀ» ´Ù½Ã ÀÚ¹Ù·Î °¡Á®¿Ã ¼ö ÀÖ½À´Ï´Ù.

 

ÀϹÝÀûÀ¸·Î ÀÚ¹Ù¿¡¼­, °´Ã¼ÀÇ º¯¼ö¿¡ Á¢±ÙÇÏ·Á¸é ±× °´Ã¼ÀÇ À̸§°ú º¯¼öÀÇ À̸§À» ¾Ë¾Æ¾ß ÇÕ´Ï´Ù. ¸¶Âù°¡Áö·Î, Native Method ¿ª½Ã ÀÚ¹Ù °´Ã¼ÀÇ º¯¼ö¿¡ Á¢±ÙÇϱâ À§Çؼ­´Â ±× °´Ã¼ÀÇ Å¸ÀÔ°ú, º¯¼öÀÇ ½Äº° Á¤º¸¸¦ ÄÄÇ»ÅÍ¿¡ ÀνĽÃÄÑÁÙ Çʿ䰡 ÀÖ½À´Ï´Ù.

¿¹¸¦ µé¸é, ÀÚ¹ÙÀÇ intÇü µ¥ÀÌÅÍ Å¸ÀÔÀÇ º¯¼ö¿¡ Á¢±ÙÇϱâ À§Çؼ­´Â, Native Method¿¡ ÀÚ¹ÙÀÇ °´Ã¼ ŸÀÔ(Ŭ·¡½º)°ú º¯¼öÀÇ ½Äº° Á¤º¸ÀÎ º¯¼öÀ̸§°ú º¯¼ö ŸÀÔÀ» ¾Ë·Á ÁÖ¾î¾ß ÇÕ´Ï´Ù. ¾ð¶æ ÀÌÇØ°¡ °¡Áö ¾Ê°ÚÁö¸¸, ¾Æ·¡ÀÇ ¿¹Á¦¸¦ ½ÇÇàÇØ º¸¸é ÀÌÇØ°¡ µÇ¸®¶ó »ý°¢µË´Ï´Ù.

 

´ÙÀ½Àº ÀÚ¹Ù¿¡¼­ ¼±¾ðµÈ int¿Í doubleÇüÀÇ ¸â¹ö º¯¼ö µÎ°³¸¦ Native Method¸¦ ÅëÇØ¼­ C¾ð¾î¿¡¼­ ¹Þ¾Æ³»°í, ÀÌ º¯¼öµéÀ» º¯°æÇÏ¿© µµ½º ÄܼÖâ¿¡ Ãâ·ÂÇÏ°í ´Ù½Ã ÀÚ¹Ù·Î ±× °ªÀ» ¸®ÅϽÃŰ´Â ¿¹Á¦ÀÔ´Ï´Ù.

 

FieldControl.java(¸É¹öº¯¼ö¸¦ »ý¼ºÇÑ ÀÚ¹Ù ¼Ò½º ÄÚµå)

public class FieldControl {

   int int_a = 10;

   double double_b = -1.2345;

   static {

     System.loadLibrary("control");

   }

   public native double add();

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

       double c = new FieldControl().add();

       System.out.println("final result ==> a + b = " + c);

   }

}

C:\JavaExample\20> javac JavaObject.java

C:\JavaExample\20> javah JavaObject

 

 ¸ÕÀú dllÆÄÀÏÀ» ¶óÀ̺귯¸®¿¡ ·Îµå½Ã۱â À§ÇÑ ÄÚµå´Â, ¾Õ¿¡¼­¿Í °°ÀÌ ´ÙÀ½°ú °°½À´Ï´Ù.

 

n        static {

n           System.loadLibrary("control");

n        }

 

 ±× ´ÙÀ½ Native Method¸¦ ¼±¾ðÇϴµ¥ ¹ÝȯµÇ´Â °ª¿¡ µû¶ó ±× ÇüÀ» double·Î ¼±¾ðÇØÁÖ¾ú½À´Ï´Ù.

 

n        public native double add();

 

 Native Method ³»ºÎ¿¡¼­ ÀÚ¹Ù °´Ã¼ÀÇ º¯¼ö¿¡ Á¢±ÙÇÏ´Â °úÁ¤Àº ´ÙÀ½°ú °°ÀÌ ¼¼ ´Ü°è·Î ³ª´©¾î Áý´Ï´Ù.

 

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

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

n        3´Ü°è : º¯¼öÀÇ ½Äº° Á¤º¸¸¦ »ç¿ëÇØ¼­, ¿øÇÏ´Â °´Ã¼ÀÇ ½ÇÁ¦ º¯¼öÀÇ °ªÀ» º¯°æÇÏ°í °¡Á®¿À±â

 

ÀÚ¹Ù¿¡¼­ ³Ñ¾î¿À´Â °´Ã¼ÀÇ Å¸ÀÔÀº µÎ °¡Áö ¹æ¹ýÀ¸·Î ¾Ë ¼ö ÀÖ½À´Ï´Ù. ù¹øÂ° ¹æ¹ýÀº °´Ã¼·ÎºÎÅÍ ±× ŸÀÔÀ» ¾Ë¾Æ³»´Â ¹æ¹ýÀÔ´Ï´Ù. ¸ðµç Native Method°¡ ù¹øÂ° ¸Å°³ º¯¼ö·Î env ¶ó´Â ÀÎÅÍÆäÀ̽º Æ÷ÀÎÅ͸¦ °®´Â´Ù´Â °ÍÀº ¾ÕÀÇ Àý¿¡¼­ ¾ð±ÞÇß¾ú½À´Ï´Ù. ÀÌ ÀÎÅÍÆäÀ̽º Æ÷ÀÎÅÍ¿Í ÇÔ²² ¸ðµç Native Method¿¡°Ô ÁÖ¾îÁö´Â ¶Ç ÇϳªÀÇ ¸Å°³ º¯¼ö°¡ ÀÖ½À´Ï´Ù. ¹Ù·Î jobject ŸÀÔÀÇ obj¶ó´Â ¸Å°³ º¯¼ö ÀÔ´Ï´Ù. ¸ðµç ÀÚ¹ÙÀÇ °´Ã¼´Â jobject¶ó´Â JNI°¡ ¹Ì¸® Á¤ÀÇÇØ ³õÀº ŸÀÔÀ¸·Î Ç¥ÇöµË´Ï´Ù. Native Method¿¡°Ô ÀÚµ¿À¸·Î ³Ñ°ÜÁö´Â obj´Â »ç½ÇÀº Native Method¸¦ ¼±¾ðÇÑ Å¬·¡½ºÀÇ °´Ã¼ ÀÚ½Å(this)ÀÔ´Ï´Ù. HelloWorld ¿¹Á¦ÀÇ °æ¿ì¶ó¸é HelloWorld °´Ã¼ ÀÚ½ÅÀÌ µÇ°Ú±º¿ä. ´ÙÀ½ÀÇ ÇÔ¼ö¸¦ »ç¿ëÇØ¼­ obj·ÎºÎÅÍ °´Ã¼ÀÇ Å¸ÀÔÀ» ¾Ë¾Æ ³¾ ¼ö ÀÖ½À´Ï´Ù. ±× ¿ø¸®´Â ¸®Ç÷º¼Ç ¿¡¼­ getClass()¸Þ¼­µå¸¦ ÀÌ¿ëÇØ¼­ Ŭ·¡½ºÀÇ Á¤º¸¸¦ Ŭ·¡½º·Î´õ¿¡°Ô ¾Ë·ÁÁÖ´Â °Í°ú ¶È°°½À´Ï´Ù.

 

n        jclass GetObjectClass(JNIEnv* env, jobject obj)

 

 GetObjectClass()°¡ ¹ÝȯÇÏ´Â jclass´Â Sun»ç°¡ ÀÚ¹Ù¿¡¼­ÀÇ °´Ã¼ÀÇ µ¥ÀÌÅÍ Å¸ÀÔÀ» Ç¥ÇöÇϱâ À§ÇØ jni.h¿¡ Á¤ÀÇÇØ ³õÀº ŸÀÔÀÔ´Ï´Ù. Çѹø JDK¿¡ ÀÖ´Â include Æú´õ¸¦ ¿­¾î ¡°jni.h¡±¸¦ È®ÀÎÇØ º¸½Ã±â ¹Ù¶ø´Ï´Ù.

 

±×¸² 20-5 ÀÚ¹ÙÀÇ °´Ã¼¿Í Ŭ·¡½º¸¦ Ç¥ÇöÇϱâ À§ÇØ JNI¿¡¼­ Á¤ÀÇµÈ Å¸ÀÔµé

 

´ÙÀ½Àº ÀÚ¹ÙÀÇ °´Ã¼¸É¹ö¸¦ Á¶ÀÛÇÏ´Â CÄÚµåÀÔ´Ï´Ù.

 

FieldControl.c(ÀÚ¹ÙÀÇ ¸É¹öº¯¼ö¸¦ Á¶ÀÛÇÏ´Â c¾ð¾îÀÇ ¼Ò½º ÄÚµå)

#include <jni.h>

#include "FieldControl.h"

#include <stdio.h>

JNIEXPORT jdouble JNICALL Java_FieldControl_add (JNIEnv *env, jobject obj){

   double c;

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

   jfieldID id_a = (*env)->GetFieldID(env, class_fieldcontrol, "int_a", "I");

   jint a = (*env)->GetIntField(env,obj,id_a);

   jfieldID id_b = (*env)->GetFieldID(env, class_fieldcontrol, "double_b", "D");

   jdouble b = (*env)->GetDoubleField(env,obj,id_b);

   printf("a : %d \n", a);

   printf("b : %f \n", b);

 

   c= a+b;

   printf("before ==> a + b = %f \n", a+b);

   a += 5;

   (*env)->SetIntField(env, obj, id_a, a);

   b += 2.123;

   (*env)->SetDoubleField(env, obj, id_b, b);

   c= a+b;

   printf("after ==> a + b = %f \n", a+b);

 

   return c;

}

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

ieldControl.c -Fecontrol.dll

¡¦¡¦

FieldControl.c

¡¦¡¦

/dll

/implib:control.lib

/out:control.dll

FieldControl.obj

   Creating library control.lib and object control.exp

 

C:\JavaExample\object>java FieldControl

a : 10

b : -1.234500

before ==> a + b = 8.765500

after ==> a + b = 15.888500

final result ==> a + b = 15.8885

 

 À§ ¿¹Á¦ÀÇ °æ¿ì, ÀÚ¹Ù °´Ã¼ÀÇ µ¥ÀÌÅÍ Å¸ÀÔÀÎ jclass´Â ´ÙÀ½Ã³·³ ¾ò¾î¿É´Ï´Ù.

 

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

 

 GetObjectClass()¸Þ¼­µå´Â ¸Å°³ º¯¼ö·Î ÁÖ¾îÁø jobjectÀÇ Å¬·¡½º¸¦ jclass ÇüÅ·Π¹ÝÈ¯ÇØ ÁÖ´Â ÇÔ¼ö ÀÔ´Ï´Ù. ÀÌ·¸°Ô ÇÔÀ¸·Î½á, ÀÚ¹Ù¿¡¼­ »ý¼ºµÈ °´Ã¼¿¡ Á¢±ÙÇÒ ¼ö ÀÖ´Â ÂüÁ¶°ªÀ» jclassÀÇ °´Ã¼ class_fieldcontrol¿¡°Ô ³Ñ°ÜÁÖ´Â °ÍÀÔ´Ï´Ù. ¹°·Ð ÀÌ·¸°Ô ÇØÁÖ´Â ÀÌÀ¯´Â °£´ÜÇÕ´Ï´Ù. ÀÚ¹Ù¿Í C¾ð¾îÀÇ È¯°æÀÌ ´Ù¸£±â ¶§¹®ÀÌÁö¿ä. Áö±ÝÀÇ °úÁ¤µéÀ» ÀÌ·¸°Ô »ý°¢Çϸé ÀÌÇØ°¡ ºü¸£°Ú³×¿ä. ÀÚ¹ÙÀÇ ÂüÁ¶°ªµéÀ» C¾ð¾î°¡ ÂüÁ¶ÇÒ ¼ö ÀÖ°Ô²û C¾ð¾îÀÇ ÂüÁ¶°ªµé·Î º¯È¯ÇÏ¿© ÁÖ´Â °úÁ¤À̶ó°í¡¦.

 

 °´Ã¼ÀÇ ÂüÁ¶°ªÀ» ¾Ë¾Æ³Â±â ¶§¹®¿¡ ¿ì¸®´Â ±× ÂüÁ¶°ªÀ» ±Ù°Å·Î °´Ã¼¿¡ Á¢±ÙÇÒ ¼ö ÀÖ°Ô µÇ¾ú½À´Ï´Ù. °´Ã¼ ¾È¿¡´Â ¸â¹öµéÀÇ ÂüÁ¶°ªµéÀÌ µé¾î ÀÖ½À´Ï´Ù. ±×·¡¼­ ¿ì¸®´Â °´Ã¼ÀÇ ¸â¹ö¿¡ Á¢±ÙÇÏ·Á ÇÒ ¶§¿¡ °´Ã¼¿¡ Á¡(.) Âï°í Á¢±ÙÇÒ ¼ö ÀÖ¾ú´ø °ÍÀÔ´Ï´Ù. À̰ÍÀÌ ¹Ù·Î C¾ð¾îÀÇ Æ÷ÀÎÅÍ °³³äÀÌÁö¿ä. ´ÙÀ½Àº °´Ã¼ÀÇ ÂüÁ¶°ªÀ» ÂüÁ¶ÇÏ¿© °´Ã¼¸â¹ö¿¡ Á¢±ÙÇÏ·Á ÇÕ´Ï´Ù.

 

n        jfieldID id_a = (*env)->GetFieldID(env, class_fieldcontrol, "int_a", "I");

n        jfieldID id_b = (*env)->GetFieldID(env, class_fieldcontrol, "double_b", "D");

 

À§ Äڵ忡¼­´Â ¸â¹öº¯¼ö¿¡ Á¢±ÙÇϱâ À§Çؼ­ GetFieldID()¸Þ¼­µå¸¦ »ç¿ëÇϰí ÀÖ½À´Ï´Ù. GetFieldID()´Â °´Ã¼º¯¼öÀÇ ÂüÁ¶°ªÀ» ¾Ë¾Æ ³»´Â ¸Þ¼­µåÀÔ´Ï´Ù. ¿©±â¼­ °ü½ÉÀ» ±â¿ï¿©¾ß ÇÏ´Â ºÎºÐÀº °´Ã¼ÀÇ ¸â¹öº¯¼ö¿¡ Á¢±ÙÇϱâ À§Çؼ­ °´Ã¼ÀÇ ÂüÁ¶°ª(class_fieldcontrol)À» GetFieldID()¸Þ¼­µåÀÇ ÀÎÀÚ·Î ÁÖ´Â ºÎºÐÀÔ´Ï´Ù. ¡®int_a¡¯¶ó´Â ÀÎÀÚ´Â ÀÚ¹Ù¿¡¼­ÀÇ °´Ã¼ ¸â¹öÇʵåÀÇ À̸§ÀÔ´Ï´Ù. ¡®I¡¯´Â ÀÚ¹Ù¿¡¼­ ³Ñ¾î¿Ã ¸â¹öº¯¼öÀÇ µ¥ÀÌÅÍ Å¸ÀÔÀ» C¾ð¾î¿¡ ¹Ì¸® ±Í¶äÇØ Áִ ǥ½ÃÀÔ´Ï´Ù.

 

´ÙÀ½Àº °´Ã¼¸â¹öº¯¼öÀÇ ÂüÁ¶°ªÀ» ¾Ë¾Æ ³ÂÀ¸¸é GetIntField()¸Þ¼­µå¸¦ »ç¿ëÇÏ¿©, ±× º¯¼ö¸¦ C¾ð¾î¿¡¼­ »ç¿ëÇÒ ¼ö ÀÖ´Â µ¥ÀÌÅÍ Å¸ÀÔÀ¸·Î º¯È¯ÇØ ÁÖ¾î¾ß ÇÕ´Ï´Ù. Âü º¯È¯ÇÏ´Â °Íµµ ¸¹Áö¿ä? ÀÌ·± ÀÏ·ÃÀÇ °úÁ¤À» ¸¶ÃÄ¾ß ºñ·Î¼­ C¾ð¾î¿¡¼­ »ç¿ë °¡´ÉÇÑ ÇϳªÀÇ º¯¼ö°¡ µÇ´Â °ÍÀÔ´Ï´Ù.

 

n        jint a = (*env)->GetIntField(env, obj, id_a);

n        jdouble b = (*env)->GetDoubleField(env,obj,id_b);

 

 À§ÀÇ ÄÚµå´Â GetIntField()¶ó´Â ¸Þ¼­µå¿¡ °´Ã¼º¯¼öÀÇ ÂüÁ¶°ªÀ» ÀÎÀÚ·Î ³Ñ°Ü C¾ð¾î¿¡¼­ »ç¿ë °¡´ÉÇÑ ¡®jint¡¯¶ó´Â µ¥ÀÌÅÍ Å¸ÀÔÀÇ °´Ã¼ ¡®a¡¯¸¦ »ý¼ºÇϰí ÀÖ½À´Ï´Ù. ÀÌ ¶§ÀÇ µ¥ÀÌÅÍ Å¸ÀÔÀº ÀÚ¹Ù °´Ã¼ÀÇ µ¥ÀÌÅÍ Å¸ÀÔ¿¡ µû¶ó ´Þ¶óÁö°í, ¸Þ¼­µåÀÇ ÇüÅ ¶ÇÇÑ ´Þ¶óÁö´Ï ÁÖÀÇ ÇϽñ⠹ٶø´Ï´Ù.

¹°·Ð Ç¥ÁØ C¾ð¾î¿¡´Â jint¶ó´Â µ¥ÀÌÅÍ Å¸ÀÔÀº ¾ø½À´Ï´Ù. Sun»ç¿¡¼­ ÀÓÀÇÀÇ µ¥ÀÌÅÍ Å¸ÀÔÀ» ¸¸µé¾î Çì´õ ÆÄÀÏ¿¡ Á¤ÀÇÇØ ³õ°í, ±×°ÍÀ» ÀÚ¹Ù¿¡ ³¢¿ö³ÖÀº °ÍÀÌÁö¿ä. ±×·¡¼­ »ç¿ë °¡´ÉÇÑ µ¥ÀÌÅÍ Å¸ÀÔµéÀÔ´Ï´Ù. ±× Çì´õ ÆÄÀÏÀÌ ¹Ù·Î C¿¡¼­ Ç×»ó include½ÃŰ´Â <jni.h>À̰í, <jni.h>¸¦ È®ÀÎÇØ º¸¸é ´Ù½Ã "jni_md.h"¸¦ include½Ã۰í ÀÖ½À´Ï´Ù. ±×·¡¼­ ¿ì¸®´Â ÄÄÆÄÀÏÇÒ ¶§¸¶´Ù Ç×»ó ÀÌ µÎ Çì´õ ÆÄÀϵéÀÇ °æ·Î¸¦ ¸í½ÃÇÏ´Â °ÍÀÔ´Ï´Ù. ¿Ö³ÄÇÏ¸é µÎ Çì´õ ÆÄÀϵéÀÌ C ÆÄÀϰú °°Àº Æú´õ¿¡ ÀÖÁö ¾ÊÀ¸´Ï±î ÄÄÇ»ÅÍ¿¡°Ô ¾Ë·ÁÁÖ´Â °ÍÀÔ´Ï´Ù.

 

 ÀÌÁ¦ °´Ã¼º¯¼öÀÇ µ¥ÀÌÅÍ Å¸ÀÔ±îÁö Á¤ÇØÁ³À¸´Ï, ¿ì¸®´Â ÀÌ º¯¼öµéÀ» C¿¡¼­ SetIntField()¸Þ¼­µå·Î ¸¶À½´ë·Î Á¦¾îÇÒ ¼ö ÀÖ½À´Ï´Ù. À§ÀÇ ¿¹Á¦¿¡¼­´Â ´Ü¼øÈ÷ 5¸¸À» ´õÇÏ´Â °ÍÀÔ´Ï´Ù. ÀÌ ¸Þ¼­µå¸¦ »ç¿ëÇÒ ¶§¿¡µµ µ¥ÀÌÅÍ Å¸ÀÔ¿¡ µû¶ó ¸Þ¼­µåÀÇ ÇüŰ¡ ´Þ¶óÁý´Ï´Ù.

 

n         (*env)->SetIntField(env, obj, id_a, a);

n         (*env)->SetDoubleField(env, obj, id_b, b);

 

 °´Ã¼ÀÇ Å¸ÀÔÀÎ jclass¸¦ ¾Ë¾Æ³»±â À§ÇÑ ¶Ç ´Ù¸¥ ¹æ¹ýÀº ´ÙÀ½°ú °°ÀÌ FindClass()ÇÔ¼ö¸¦ »ç¿ëÇØ¼­ ¸í½ÃÀûÀ¸·Î Ŭ·¡½ºÀÇ À̸§À» Á¦°øÇÏ´Â ¹æ¹ýÀÔ´Ï´Ù.

 

n        jclass class_string = (*env)->FindClass(env, ¡°java/lang/String¡±);

 

 ÀÌ ¹æ¹ýÀº static º¯¼ö¸¦ °¡Á®¿Ã ¶§ ÁÖ·Î »ç¿ëµË´Ï´Ù.

 

 º¯¼ö°¡ ¼ÓÇØÀÖ´Â °´Ã¼ÀÇ Å¸ÀÔÀ» ¾Ë¾Æ ³ÂÀ¸¸é, ±× °´Ã¼ÀÇ Å¸ÀÔ¿¡¼­ ¿ì¸®°¡ ¿øÇÏ´Â º¯¼ö´Â ¾î¶² °ÍÀÎÁö Native Method¿¡°Ô ¾Ë·ÁÁÖ±â À§Çؼ­, Ŭ·¡½º·ÎºÎÅÍ º¯¼öÀÇ ½Äº° Á¤º¸¸¦ ¾ò¾î¿Í¾ß ÇÕ´Ï´Ù. º¯¼öÀÇ ½Äº° Á¤º¸´Â jfieldID¶ó°í ÇÏ´Â JNI°¡ ¹Ì¸® Á¤ÀÇÇÑ Å¸ÀÔÀ» »ç¿ëÇÕ´Ï´Ù.

 

º¯¼öÀÇ ½Äº° Á¤º¸´Â À§¿¡¼­¿Í °°ÀÌ GetFieldID¶ó´Â ÇÔ¼ö¸¦ »ç¿ëÇØ¼­ ¾ò¾î¿Ã ¼ö ÀÖ½À´Ï´Ù.

 

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

 

GetFieldID()¸Þ¼­µå

JfieldID GetFieldID (JNIEnv* env, jclass cls, const char name[], const char signal[]) : ÁÖ¾îÁø jclass ¿¡¼­ ƯÁ¤ÇÑ À̸§°ú ŸÀÔÀ» °®´Â Çʵ带 °¡Á®¿É´Ï´Ù. ¹ÝȯµÇ´Â °ªÀº ÀÚ¹Ù°´Ã¼ÀÇ ÂüÁ¶°ªÀÌ ÀÔ´Ï´Ù.

jclass cls : Class °´Ã¼

const char name[] : ÇʵåÀÇ À̸§

const char signal[] : ÇʵåÀÇ Å¸ÀÔ ½Äº°ÀÚ

 

Àü ´Ü°è¿¡¼­ ¾ò¾î¿Â class_fieldcontrolÀÇ ¸â¹ö º¯¼öµé Áß¿¡¼­ À̸§ÀÌ ¡°int_a¡±À̰í, µ¥ÀÌÅÍ Å¸ÀÔÀÌ intÀÎ º¯¼öÀÇ ½Äº°Á¤º¸¸¦ °¡Á®¿É´Ï´Ù. ÀÚ¹ÙÀÇ Å¸ÀÔÀ» Ç¥ÇöÇϱâ À§ÇØ ´ÙÀ½ Ç¥¿¡ Á¤ÀǵǾî ÀÖ´Â °ªÀ» »ç¿ëÇÕ´Ï´Ù.

 

Signature

Java Programming

Language Type

Z

boolean

B

byte

C

char

S

short

I

int

J

long

F

float

D

double

L fully-qualified-class ;

fully-qualified-class

[ type

type[]

( arg-types ) ret-type

method type

Ç¥ 20-2 ÀÚ¹ÙÀÇ Å¸ÀÔÀ» Ç¥ÇöÇϱâ À§ÇØ Á¤ÀÇµÈ °ª

 

Ç¥¸¦ ÂüÁ¶ÇØ º¸¸é, int´Â ¡°I¡±·Î Á¤ÀÇ µÇ¾îÀÖ½À´Ï´Ù. Ŭ·¡½ºÀÇ °æ¿ì¿¡´Â ¾à°£ ƯÀÌÇÑ ·êÀ» °¡Áö°í ÀÖ½À´Ï´Ù. ¿ì¼± ÆÐŰÁö¸¦ Æ÷ÇÔÇÑ Å¬·¡½ºÀÇ ÀüüÀ̸§À» ¡®.¡¯ ±¸ºÐÀÚ ´ë½Å ¡®/¡¯ ±¸ºÐÀÚ¸¦ »ç¿ëÇØ¼­ ¹Ù²ãÁÖ°í Á¦ÀÏ ¾Õ¿¡´Â ¡®L¡¯À», Ŭ·¡½º À̸§ÀÇ ¸¶Áö¸·Àº ¡®;¡¯À» ºÙ¿© ÁÝ´Ï´Ù. ¿¹¸¦ µé¸é, ¡°java.lang.String¡±Àº ¡°Ljava/lang/String;¡± ó·³ ¹Ù²ò´Ï´Ù. ¸Þ¼­µå ŸÀÔÀº ´ÙÀ½ Àý¿¡¼­ ÀÚ¼¼È÷ ¼³¸í ÇϰڽÀ´Ï´Ù.

 

°´Ã¼ÀÇ Å¸ÀÔ°ú º¯¼öÀÇ ½Äº°Á¤º¸¸¦ ¸ðµÎ ±¸ÇßÀ¸¸é, ½ÇÁ¦·Î º¯¼ö¸¦ Á¶ÀÛÇÏ´Â Àϸ¸ ³²¾Ò½À´Ï´Ù. JNI´Â º¯¼öÀÇ °ªÀ» º¯°æÇÏ°í °¡Á®¿À±â À§ÇØ ´ÙÀ½°ú °°Àº ÀÏ·ÃÀÇ ÇÔ¼öµéÀ» Á¦°øÇÕ´Ï´Ù.

 

Set/Get<type>Field

 

Set/GetBooleanField

 

Set/GetByteField

 

Set/GetCharField

 

Set/GetDoubleField

 

Set/GetFloatField

 

Set/GetIntField

 

Set/GetLongField

 

Set/GetObjectField

 

Set/GetShortField

Ç¥ 20-3 º¯¼öÀÇ °ªÀ» º¯°æÇÏ°í °¡Á®¿À±â À§ÇØ JNI¿¡¼­ Á¦°øÇÏ´Â ÇÔ¼ö

 

 static º¯¼ö¿¡ Á¢±ÙÇÏ´Â °æ¿ì¿¡´Â, ¸ÕÀú FindClass()ÇÔ¼ö¸¦ »ç¿ëÇØ¼­ Ŭ·¡½º¸¦ ¾ò¾î¿À°í, µÎ ¹øÂ° ´Ü°è¿¡¼­ GetFieldID()ÇÔ¼ö ´ë½Å GetStaticFieldID()¸¦ »ç¿ëÇØ¼­ º¯¼öÀÇ ½Äº° Á¤º¸¸¦ ¾ò¾î¿À°í, ¸¶Áö¸· ´Ü°è¿¡¼­´Â Set/GetStatic<type>Field()ÇÔ¼ö·Î º¯¼ö¸¦ Á¶ÀÛÇÒ ¼ö ÀÖ½À´Ï´Ù.

 

Static º¯¼ö¸¦ Á¶ÀÛÇÏ´Â ¿¹

¡¦

jclass class_system = (*env)->FindClasS(env, "java/lang/System");

jfieldID id_out = (*env)->GetStaticFieldID(env, class_system, "out", "Ljava/io/PrintStream;");

jobject obj_out = (*env)->GetStaticObjectField(env, class_system, id_out);

¡¦

 

¢Ñ ÀÚ¹Ù °´Ã¼ÀÇ Çʵå Á¢±ÙÇϱâ

´ÙÀ½ÀÇ ÀýÂ÷¸¦ µû¸¨´Ï´Ù

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

l        2´Ü°è : ÀÚ¹Ù °´Ã¼ÀÇ Å¸ÀÔ¿¡¼­ºÎÅÍ, Á¢±ÙÇÏ·Á´Â º¯¼öÀÇ ½Äº° Á¤º¸(jfieldID)¸¦ ¾Ë¾Æ¿À±â

l        3´Ü°è : º¯¼öÀÇ ½Äº° Á¤º¸¸¦ »ç¿ëÇØ¼­, ¿øÇÏ´Â °´Ã¼ÀÇ ½ÇÁ¦ º¯¼öÀÇ °ªÀ» º¯°æÇÏ°í °¡Á®¿À±â



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