¼Ò¼³°°Àº ÀÚ¹Ù 4ºÎ  Á¦20Àå J N I  20.2 1´Ü°è  

 

   1´Ü°è : Native Method¸¦ ¼±¾ðÇÏ´Â Àڹ٠Ŭ·¡½º ÀÛ¼º

 

 Àڹ٠Ŭ·¡½º ³»¿¡¼­ Native Method¸¦ ½ÇÇàÇÏ·Á¸é ¸ÕÀú, Native Method°¡ ¾î¶² ÇüÅÂÀÎÁö ÀÚ¹ÙŬ·¡½º ³»¿¡ ¸í½Ã ÇØ ÁÖ¾î¾ß ÇÕ´Ï´Ù. ÀÚ¹Ù ÄÚµå´Â ´ç¿¬È÷ ÀÚ¹ÙÀÇ ¹®¹ý¸¸À» ¾Ë¾Æº¼ ¼ö Àֱ⠶§¹®¿¡ Native Method¸¦ ÀÚ¹Ù°¡ ¾Ë¾Æ º¼ ¼ö ÀÖ´Â, ÀϹÝÀûÀÎ ¸Þ¼­µåÀÇ ÇüÅ·Π¼±¾ðÀ» ÇØÁÖ¾î¾ß ÇÕ´Ï´Ù. ÀÌ ¶§ ÀÏ¹Ý ¸â¹ö ¸Þ¼­µå¿Í ´Ù¸¥ Á¡Àº ¸Þ¼­µåÀÇ ¿øÇü¸¸À» ¼±¾ðÇϰí native¶ó´Â Ű¿öµå¸¦ ¸í½ÃÇØ ÁÖ´Â °ÍÀÔ´Ï´Ù. Ŭ·¡½ºÀÇ ¸â¹ö ¸Þ¼­µå·Î ´ÙÀ½°ú °°Àº ±¸¹®À» »ðÀÔÇÏ¸é µË´Ï´Ù.

 

n        public native void printHelloWorld();

 

 ÀÌ ¸Þ¼­µåÀÇ ¸öü´Â ³ªÁß¿¡ C·Î ÀÛ¼ºÇÏ¿© ¿¬°áÇÏ°Ô µÉ °ÍÀ̸ç Ŭ·¡½ºÀÇ ¸â¹ö ¸Þ¼­µå·Î¼­ µ¿ÀÛÇÏ°Ô µÉ °ÍÀÔ´Ï´Ù. nativeŰ¿öµå°¡ ÇÏ´Â ÀÏÀº ÄÄÆÄÀÏ·¯¿¡°Ô ½ÇÁ¦ ÀÌ ¸Þ¼­µåÀÇ ±¸ÇöÀº ¿ÜºÎ¿¡ ´Ù¸¥ ¾ð¾î·Î ±¸Çö µÉ °ÍÀ̶ó´Â °ÍÀ» ¸í½ÃÇÏ´Â °ÍÀÔ´Ï´Ù. ¸¶Ä¡, abstractÀ¸·Î ¼±¾ðµÈ ¸Þ¼­µå°¡ »ó¼ÓÀ» ÅëÇØ¼­ ³ªÁß¿¡ ±¸ÇöÇØ¾ß ÇÏ´Â °Í°ú ºñ½ÁÇÑ ÇüÅÂÁÒ.

 

ÀÌ·¸°Ô ¼±¾ðµÈ ¸Þ¼­µå´Â ÇüŸ¸ °¡Áö°í ÀÖÀ» »Ó, ¾ÆÁ÷ ½ÇÁ¦·Î Native Method¿Í´Â ¿¬°áµÇ¾î ÀÖÁö ¾ÊÀº »óÅÂÀÔ´Ï´Ù. ¿ì¸®°¡ ÀÌ ¸Þ¼­µå¸¦ È£ÃâÇßÀ» ¶§, ÀÚ¹Ù°¡»ó¸Ó½ÅÀÌ ½ÇÁ¦ Native Method¸¦ ã¾Æ¼­ ½ÇÇàÇØ ÁÙ ¼ö ÀÖµµ·Ï, Native Method°¡ ±¸ÇöµÇ¾î ÀÖ´Â ¶óÀ̺귯¸®¸¦ °¡Á®¿À´Â ÀÛ¾÷ÀÌ ÇÊ¿äÇÕ´Ï´Ù(¶óÀ̺귯¸®´Â 5´Ü°è¿¡¼­ ¸¸µì´Ï´Ù). C¾ð¾î·Î ¸¸µé¾îÁø dllÀ» ·ÎµùÇÏ´Â °ÍÀ¸·Î »ý°¢ÇÏ¸é µË´Ï´Ù. C¾ð¾î·Î helloworld.dllÀ» ¸¸µé°í À̰ÍÀ» Àڹ٠Ŭ·¡½º ³»¿¡¼­ ·ÎµùÇÏ´Â °ÍÀÌÁÒ.

 

n        System.loadLibrary(¡°helloworld¡±);

 

System.loadLibrary()¶ó´Â ¸Þ¼­µå´Â ÁÖ¾îÁø À̸§À» °®´Â ¶óÀ̺귯¸®¸¦ ·ÎµùÇØ ÁÝ´Ï´Ù. ÀÌ ¸Þ¼­µå¸¦ ÅëÇØ¼­ ¿ì¸®´Â Native Method°¡ ±¸ÇöµÇ¾î ÀÖ´Â ¶óÀ̺귯¸®¸¦ µ¿ÀûÀ¸·Î ·ÎµùÇÒ ¼ö ÀÖ½À´Ï´Ù. ÇѰ¡Áö ÁÖÀÇÇÒ Á¡Àº, ¶óÀ̺귯¸®´Â Native Method°¡ È£Ã⠵DZâ Àü¿¡ ¹Ýµå½Ã ·Îµù µÇ¾î¾ß¸¸ ÇÑ´Ù´Â °ÍÀÔ´Ï´Ù.

 

´ÙÀ½ ¿¹Á¦´Â À§¿¡¼­ ¼³¸íÇÑ °Íó·³, ¿ì¸®°¡ ±¸ÇöÇÒ Native MethodÀÇ ÇüŸ¦ ÀÚ¹Ù¿¡°Ô ¾Ë·ÁÁÖ°í, Native Method°¡ ±¸ÇöµÇ¾î ÀÖ´Â ¶óÀ̺귯¸®¸¦ ·ÎµùÇØ¿À´Â Ŭ·¡½º ÀÔ´Ï´Ù.

 

HelloWorld.java(¶óÀ̺귯¸®¸¦ ·ÎµùÇÒ ÀÚ¹Ù ÆÄÀÏ)

public class HelloWorld {

   static {

     System.loadLibrary("helloworld");

       System.out.println("=== library was loaded");

   }

   public native void printHelloWorld();

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

       new HelloWorld().printHelloWorld();

   }

}

 

¿¹Á¦¸¦ »ìÆìº¸½Ã¸é ¾Ë°ÚÁö¸¸, ¿ì¸®°¡ Áö±Ý±îÁö ÇØ¿Â ÇÁ·Î±×·¡¹Ö°ú º°¹Ý ´Ù¸¦ °Ô ¾øÁÒ? ´ÜÁö ¡®native¡¯Å°¿öµå°¡ ÄÚµù¿¡¼­ ¾²ÀÌ´Â °ÍÀ» óÀ½ º¸¼ÌÀ» °ÍÀÔ´Ï´Ù. ±×·¯³ª ÀÚ¹ÙÀÇ ¾ÈÀ» º¸¸é, ¹«¼öÈ÷ ¸¹Àº Áß¿ä ¸Þ¼­µåµéÀÌ Native·Î ¼±¾ðµÈ °ÍÀ» º¼ ¼ö ÀÖÀ» °ÍÀÔ´Ï´Ù. JDKÀÇ srcÆÄÀÏÀÇ ¾ÐÃàÀ» Ç®¾î È®ÀÎÇØ º¸½Ã±â ¹Ù¶ø´Ï´Ù.

 

¸Þ¼­µå°¡ È£ÃâµÇ´Â ½ÃÁ¡º¸´Ù ¸ÕÀú ¶óÀ̺귯¸®°¡ ·Îµù µÉ ¼ö ÀÖµµ·Ï, ¿¹Á¦¿¡¼­´Â staticºí·ÏÀ» »ç¿ëÇϰí ÀÖ½À´Ï´Ù. ¶óÀ̺귯¸®´Â Native Method°¡ È£ÃâµÇ±â Àü¿¡ ¹Ýµå½Ã ·Îµù µÇ¾î¾ß¸¸ ÇÑ´Ù´Â °ÍÀ» ¹Ù·Î À§¿¡¼­ ¸»¾¸ µå·È´Âµ¥ ¹ú½á ÀØÁø ¾ÊÀ¸¼Ì°ÚÁÒ?

 

n        static { System.loadLibrary(¡°helloworld¡±); }

 

printHelloWorld()¸Þ¼­µå°¡ ÀÚ¹Ù¿¡¼­ ½ÇÇàµÉ ¸Þ¼­µå°¡ ¾Æ´Ï¶ó, ¿ÜºÎ¿¡¼­ ½ÇÇàµÉ ¸Þ¼­µå¶ó´Â °ÍÀ» nativeŰ¿öµå¸¦ »ç¿ëÇØ ¼±¾ðÇϰí ÀÖ½À´Ï´Ù.

 

n        public native void printHelloWorld();

 

ÀÌ·¸°Ô ¶óÀ̺귯¸®°¡ ·Îµå µÇ°í ³ª¸é, ºñ·Î¼Ò ´Ù¸¥ °´Ã¼µéÀÌ Native Method¿Í ¿¬°á µÇ¾î ÀÖ´Â printHelloWorld()¸Þ¼­µå¸¦ È£ÃâÇÒ ¼ö ÀÖ°Ô µÇ´Â °ÍÀÔ´Ï´Ù.

 

n        new HelloWorld().printHelloWorld();

 

À§¿Í °°ÀÌ printHelloWorld()¸Þ¼­µå¸¦ È£ÃâÇÔÀ¸·Î½á ÀÚ¹Ù°¡»ó¸Ó½Å¿¡°Ô ¿¬°áµÇ¾î ÀÖ´Â Native Method¸¦ È£ÃâÇÏ°Ú´Ù°í ¾Ë·ÁÁÙ ¼ö ÀÖ½À´Ï´Ù. ÀÚ¹Ù°¡»ó¸Ó½ÅÀº native·Î ¼±¾ðµÈ printHelloWorld()¸Þ¼­µå°¡ È£Ã⠵Ǹé, ¡°helloworld¡±¶ó´Â À̸§ÀÇ ¶óÀ̺귯¸®¿¡¼­ ±× ¾È¿¡ ±¸ÇöµÇ¾î ÀÖ´Â Native Method¸¦ ½ÇÇàÇÒ °ÍÀÔ´Ï´Ù. System.loadLibrary()¸Þ¼­µåÀÇ ¸Å°³º¯¼öÀÎ ¡°helloworld¡±´Â ¾Õ¿¡¼­µµ ¸»¾¸ µå·ÈÁö¸¸, ¿ì¸®°¡ 5´Ü°è¿¡¼­ ¸¸µé ¶óÀ̺귯¸®ÀÇ À̸§ÀÔ´Ï´Ù. Áï, C¾ð¾î·Î ±¸ÇöµÈ ÆÄÀÏÀ» ÄÄÆÄÀÏ ÇßÀ» ¶§ ³ª¿À´Â DLLÆÄÀÏÀÌ µÉ °ÍÀÔ´Ï´Ù.

 

¢Ñ  1 ´Ü°è

Native Method¸¦ ¼±¾ðÇÏ´Â Àڹ٠Ŭ·¡½º ÀÛ¼º

1.         ¸Þ¼­µå´Â native ¶ó´Â Ű¿öµå¸¦ »ç¿ëÇØ¼­ ¼±¾ðµÈ´Ù

2.        ¸Þ¼­µå È£Ãâ Àü¿¡ ¹Ýµå½Ã ÇØ´ç ¶óÀ̺귯¸®¸¦ ·ÎµùÇØ¾ß ÇÑ´Ù

 

±×·±µ¥ ÇѰ¡Áö Àǹ®À¸·Î Á¦½ÃµÇ´Â °ÍÀÌ ÀÖ½À´Ï´Ù. public native void printHelloWorld()¿Í helloworld.dllÀ» ¾î¶»°Ô ¿¬°á ÇÒ±î¿ä? ºÐ¸í, printHelloWorld()¿¡ ÇØ´çÇÏ´Â ºÎºÐÀÌ helloworld.dll ³»¿¡ Æ÷ÇÔ µÇ¾î ÀÖÀ» °ÍÀÔ´Ï´Ù. ±×¸®°í, printHelloWorld()¸¦ È£ÃâÇßÀ» ¶§ helloworld.dll¿¡¼­ ã¾Æ¼­ È£ÃâÇÏ°Ô µÉ °ÍÀÔ´Ï´Ù. ±×·¸´Ù¸é ÀÌ µÎ°¡Áö°¡ Àý¹¦ÇÏ°Ô ¿¬°áµÇ´Â ºÎºÐÀÌ ÀÖÀ» °ÍÀÔ´Ï´Ù. À̰ÍÀº ´ÙÀ½ ´Ü°èµé¿¡¼­ ³ª¿À´Ï °ÆÁ¤¸»°í ´ÙÀ½´Ü°è·Î ³Ñ¾î°¡ º¸ÁÒ.



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