JDK 1.1 Tutorial

±èµµÇü
´ëÀü ±¤¿ª½Ã À¯¼º±¸ ±¸¼ºµ¿
Çѱ¹°úÇбâ¼ú¿ø Àü»êÇаú
E-mail : dynaxis@pllab.kaist.ac.kr
URL : http://pllab.kaist.ac.kr/~dynaxis/
Abstract:
1995³â 5¿ù °ø½ÄÀûÀ¸·Î ¹ßÇ¥µÈ µÚ ÀÚ¹Ù ±â¼úÀº ±× Çõ¸íÀûÀÎ °³³äÀ¸·Î ÀÎÇØ ÄÄÇ»ÅÍ »ê¾÷ Àü¹Ý¿¡ À־ ±Ù°£ÀÇ ¾î´À ±â¼úº¸´Ùµµ Å« ¿µÇâÀ» ³¢Ä¡°í ÀÖ´Ù. À¥ »óÀÇ ½ÇÇà °¡´ÉÇÑ ³»¿ë(executable contents)·Î¼­ ¼¼»ó¿¡ µîÀåÇÑ ÀÌÈÄ ÀÚ¹Ù´Â ¿ª»ç»ó ¾î´À Ç÷§Æûº¸´Ù ºü¸£°Ô ¹ßÀüÇÏ¿© ¿Ô´Ù. ÀÌÁ¦´Â ³×Æ®¿÷ ½Ã´ë¸¦ °¡´Â ÄÄÇ»ÅÍ ¾÷°èÀÇ ¿­¸° Ç¥ÁØÀ¸·Î¼­ ´Ù¾çÇÑ ºÐ¾ß·ÎÀÇ Àû¿ëÀÌ ÀÌ·ç¾îÁö°í ÀÖÀ¸¸ç, ±×¿¡ ¸Â°Ô ÀÚ¹Ù °¡»ó±â°è, API(Application Programming Interface)ÀÇ °³¼±°ú ¹ßÀüÀÌ º´ÇàµÇ°í ÀÖ´Ù.
¿©±â¼­´Â ¸ÕÀú ÀÚ¹Ù ±â¼úÀÇ Àü¹Ý¿¡ »ìÆìº¸±â·Î ÇϰڴÙ. ±×¸®°í, ±× Ư¼º°ú Ȱ¿ë ¹üÀ§, ¼º´É ¹®Á¦¿¡ ´ëÇØ »ìÆìº¸¸é¼­ 2³âÀÌ Áö³­ Áö±Ý ÀÚ¹ÙÀÇ °¡´É¼º¿¡ ´ëÇÑ »õ·Î¿î Æò°¡¸¦ ³»·Áº¼ °ÍÀÌ´Ù. ¾Æ¿ï·¯ ÀÚ¹ÙÀÇ Àû¿ë¹üÀ§¸¦ ±â¾÷ Àü¹ÝÀ¸·Î È®Àå½ÃŰ·Á´Â ½ÃµµÀÇ ½ÅȣźÀÎ JDK 1.1¿¡ ´ëÇØ ¾Ë¾Æº¸µµ·Ï ÇϰڴÙ.
Keywords:
ÀÚ¹Ù, ÀÚ¹Ù ¾ð¾î, ÀÚ¹Ù °¡»ó±â°è, ÀÚ¹Ù API, JDK 1.1

1. ÀÚ¹Ù¶õ ¹«¾ùÀΰ¡?

1.1 ÀÚ¹Ù Ç÷§Æû (Java Platform)

ÀÚ¹Ù´Â ÀϹÝÀûÀÎ Àνİú´Â ´Þ¸® ÇÁ·Î±×·¡¹Ö ¾ð¾î, °¡»ó±â°è, ±×¸®°í, API¸¦ Æ÷°ýÇÏ´Â ¼ÒÇÁÆ®¿þ¾î Ç÷§Æû(software platform)À¸·Î ÀÌÇØµÇ¾î¾ß ÇÑ´Ù. ¿ì¸®°¡ Àͼ÷ÇÑ PCÀÇ À©µµÁî ȯ°æ°ú ºñ±³Çغ¸ÀÚ. ÀÚ¹Ù ¾ð¾î´Â ÀϹÝÀûÀ¸·Î »ç¿ëµÇ´Â ¾ð¾îÀÎ C/C++¿¡ ÇØ´çµÇ°í, ÀÚ¹Ù °¡»ó±â°è´Â 80x86°è¿­ÀÇ CPU, ÀÚ¹Ù API´Â Win32 API¿Í MFC(Microsoft Foundation Classes)¿¡ ÇØ´çÇÑ´Ù°í »ý°¢ÇÒ ¼ö ÀÖ´Ù. º¸Åë ÀÚ¹Ù ½ÇÇà ȯ°æÀº À¯´Ð½º, À©µµÁî¿Í °°Àº ´Ù¸¥ OS(Operating System)ÇÏ¿¡¼­ ¼ÒÇÁÆ®¿þ¾îÀûÀ¸·Î ±¸ÇöµÈ´Ù. ¹°·Ð ¿¹¿Üµµ ÀÖÁö¸¸ ±×¿¡ ´ëÇØ¼­´Â µÚ¿¡ ÀÚ¹Ù ¿î¿µÃ¼Á¦¿Í ÀÚ¹ÙĨ¿¡ ´ëÇØ ¼³¸íÇϸ鼭 ÀÚ¼¼È÷ ´Ù·ç±â·Î ÇÏÀÚ. ´ÙÀ½ ±×¸²Àº ƯÁ¤ ½Ã½ºÅÛÇÏ¿¡¼­ ÀÚ¹Ù ½ÇÇà ȯ°æ°ú ±× ½Ã½ºÅÛÀÇ OS ¹× ±× À§¿¡¼­ ½ÇÇàµÇ´Â ÀÀ¿ëÇÁ·Î±×·¥ÀÌ °øÁ¸ÇÏ´Â »óȲÀ» ¼­·Î ºñ±³Çϱ⠽±°Ô ±¸¼ºÇÑ °ÍÀÌ´Ù. ±×¸²¿¡¼­ À§ ÂÊÀº ÀÚ¹ÙÀÇ °æ¿ì¸¦ ³ªÅ¸³½ °ÍÀÌ°í ¾Æ·¡ ÂÊÀº À©µµÁî ȯ°æ°ú °°Àº ÀϹÝÀûÀÎ ¼ÒÇÁÆ®¿þ¾î ȯ°æÀ» ³ªÅ¸³½ °ÍÀÌ´Ù.

C¾ð¾î°¡ ±â°è¾î·Î ÄÄÆÄÀϵǵí ÀÚ¹Ù ¾ð¾î´Â ÀÚ¹Ù °¡»ó±â°èÀÇ "±â°è¾î"¿¡ ÇØ´çÇÏ´Â "¹ÙÀÌÆ®ÄÚµå(bytecode)"·Î ÄÄÆÄÀϵȴÙ. ÄÄÆÄÀÏµÈ ¹ÙÀÌÆ®ÄÚµå´Â ÀÚ¹Ù °¡»ó±â°è¿¡ ÀÇÇØ ÇØ¼®µÇ¾î ½ÇÇàµÇ°Ô µÇ´Âµ¥, ÀÚ¹Ù °¡»ó±â°è´Â ±×¸²¿¡¼­ º¸´Â ¹Ù¿Í °°ÀÌ º¸ÅëÀº ÇØ¼®±â(interpreter)³ª ÇÁ·Î±×·¥ ¼öÇà µµÁß ±â°è¾î¸¦ »ý¼ºÇÏ´Â JIT(Just-In-Time) ÄÄÆÄÀÏ·¯ µî ¼ÒÇÁÆ®¿þ¾îÀûÀÎ ¹æ¹ýÀ¸·Î ±¸ÇöµÈ´Ù. ÇÏÁö¸¸, ÀÌ¿Í ´Þ¸® ÃÖ±Ù¿¡´Â C/C++ ¿Í °°ÀÌ ÀÚ¹Ù ¿ø½ÃÄڵ忡¼­ ƯÁ¤ CPUÀÇ ±â°è¾î¸¦ Á÷Á¢ »ý¼ºÇÏ´Â ÄÄÆÄÀÏ·¯µµ ³ª¿Í ÀÖÀ¸¸ç, ÀÚ¹ÙĨ(JavaChip)°ú °°ÀÌ Çϵå¿þ¾îÀûÀ¸·Î ¹ÙÀÌÆ®Äڵ带 Á÷Á¢ ¼öÇàÇÏ´Â CPUµµ °³¹ßµÇ°í ÀÖ´Ù. ÀÌ¿¡ ´ëÇØ¼­´Â µÚ¿¡ ÀÚ¹Ù °¡»ó±â°è¿¡ ´ëÇÑ »ó¼¼ÇÑ ¼³¸í¿¡¼­ ÇÔ²² ´Ù·çµµ·Ï ÇϰڴÙ.

ÇÑÆí ÀÌ·¸°Ô ½ÇÇàµÇ¾îÁö´Â ÀÚ¹Ù ÀÀ¿ëÇÁ·Î±×·¥µéÀº È­¸é¿¡ ±×¸²À» Ç¥½ÃÇϰųª ÆÄÀÏÀ» ÀÐ°í ¾²´Â µîÀÇ ÀÔÃâ·Â ÀÛ¾÷À» Çϱâ À§ÇØ ÀÚ¹ÙÀÇ APIµéÀ» È£ÃâÇØ¾ß ÇÑ´Ù. À¯´Ð½º »óÀÇ ÀÀ¿ëÇÁ·Î±×·¥µéÀÌ ½Ã½ºÅÛ È£Ãâ(system call)À» »ç¿ëÇϰųª, À©µµÁî ÀÀ¿ëÇÁ·Î±×·¥µéÀÌ Win32 API¸¦ »ç¿ëÇØ¼­ OS(Operating System)¿¡°Ô ¼­ºñ½º¸¦ ¿äûÇÏ´Â °Í°ú ¸¶Âù°¡Áö¶ó°í ÇÒ ¼ö ÀÖ´Ù. µÚ¿¡ ÀÚ¼¼È÷ ¼³¸íÇϰÚÁö¸¸ ¹ÙÀÌÆ®Äڵ忡´Â ÀÔÃâ·Â ¸í·ÉÀÌ ¾øÀ¸¹Ç·Î ¹ÙÀÌÆ®Äڵ常À¸·Î ÀÌ·ç¾îÁø ÇÁ·Î±×·¥Àº °áÄÚ ÀÔÃâ·ÂÀ» ÇÒ ¼ö°¡ ¾ø´Ù. Áï, C/C++³ª ¾î¼Àºí¸®¾î·Î ÀÛ¼ºµÇ¾î ±â°è¾î·Î ¹ø¿ªµÈ ÇÁ·Î±×·¥ÀÇ µµ¿òÀ» ¹Þ¾Æ¾ß ÇÑ´Ù. C/C++, ¾î¼Àºí¸® µîÀÇ ¾ð¾î·Î ÀÛ¼ºµÇ¾î ÀÚ¹Ù°¡ ¼öÇàµÇ´Â ƯÁ¤ CPUÀÇ ±â°è¾î·Î ÄÄÆÄÀÏµÈ ÇÁ·Î±×·¥µéÀ» ÀÚ¹Ù ¹ÙÀÌÆ®ÄÚµå¿Í ±¸ºÐÇØ¼­ "°íÀ¯ ÄÚµå(native code)"¶ó°í ºÎ¸¥´Ù. ÀÚ¹Ù¿¡¼­´Â ƯÁ¤ °´Ã¼ÀÇ ¸Þ½îµå(method)µéÀ» °íÀ¯ ÄÚµå·Î ÀÛ¼ºÇÒ ¼ö ÀÖÀ¸¸ç ¼ø¼öÇÏ°Ô ÀÚ¹Ù·Î ÀÛ¼ºµÈ ÇÁ·Î±×·¥Àº ¸Þ½îµå È£ÃâÀÇ ÇüÅ·Π°íÀ¯ ÄÚµå·Î ÀÛ¼ºµÈ ¸Þ½îµåµéÀ» ½ÇÇàÇÒ ¼ö ÀÖ´Ù. ¹Ù·Î ÀÌ·± ÀÌÀ¯·Î ÀÚ¹Ù Ç÷§ÆûÀÇ ÇÙ½ÉÀûÀÎ ¿ä¼ÒÁß Çϳª·Î ÀÚ¹Ù API°¡ Æ÷ÇԵǾî¾ß ÇÏ´Â °ÍÀÌ´Ù.

1.2 JDK¿Í JRE

JDK(Java Development Kit)´Â ÀÚ¹Ù ÇÁ·Î±×·¥À» °³¹ßÇÏ°í ½ÇÇàÇÒ ¼ö ÀÖ´Â µµ±¸ÀÇ ÁýÇÕÀÌ´Ù. ÇöÀç ½ãÀÇ ÀÚȸ»çÀÎ ÀÚ¹Ù¼ÒÇÁÆ®(Javasoft)¿¡¼­ ¹«·á·Î ¹èÆ÷Çϰí ÀÖ´Â JDK¿¡´Â ÀÚ¹Ù °¡»ó±â°è°¡ "java"¶ó´Â À̸§ÀÇ ÇØ¼®±â(interpreter) ÇÁ·Î±×·¥À¸·Î ±¸ÇöµÇ¾î ÀÖÀ¸¸ç, ±× ¿Ü¿¡ ÀÚ¹Ù ¿ø½ÃÄڵ带 ¹ÙÀÌÆ®ÄÚµå·Î ÄÄÆÄÀÏÇØ ÁÖ´Â ÄÄÆÄÀÏ·¯ÀÎ "javac"¿Í µð¹ö°ÅÀÎ "jdb" µîÀÇ °³¹ß µµ±¸°¡ ÇÔ²² Æ÷ÇԵǾî ÀÖ´Ù. º¸Åë ¸¶ÀÌÅ©·Î¼ÒÇÁÆ®ÀÇ "ºñÁê¾ó J++(Visual J++)", ½Ã¸ÇÅØÀÇ "Ä«Æä"¿Í °°Àº ÀÚ¹Ù °³¹ßµµ±¸³ª ³Ý½ºÄÉÀÌÇÁ, ¸¶ÀÌÅ©·Î¼ÒÇÁÆ®ÀÇ À¥ ºê¶ó¿ìÀú¿¡ Æ÷ÇԵǴ ÀÚ¹Ù °¡»ó±â°è¿Í ¶óÀ̺귯¸®µéÀº JDK¿¡ Æ÷ÇÔµÈ °ÍÀ» ±âº»À¸·Î °³¼±À» À§ÇØ ÀϺΠ¼öÁ¤µÈ °ÍµéÀÌ´Ù.

ÃÖ±Ù JDK 1.1ÀÌ ³ª¿À¸é¼­ ÀÚ¹Ù¼ÒÇÁÆ®¿¡¼­´Â JDK¿Ü¿¡ JRE(Java Runtime Environment)¶ó´Â º°µµÀÇ ÆÐŰÁö¸¦ ¹èÆ÷Çϱ⠽ÃÀÛÇß´Ù. ÀÌ´Â JDK¿¡¼­ ÀÚ¹Ù ÇÁ·Î±×·¥À» ¼öÇàÇϱâ À§ÇØ ÇʼöÀûÀÎ ºÎºÐ¸¸À» ¸ðÀº °ÍÀ¸·Î ÀÚ¹Ù·Î ÇÁ·Î±×·¥À» ÀÛ¼ºÇÑ »ç¶÷ÀÌ ÀÚ½ÅÀÇ ÇÁ·Î±×·¥°ú ÇÔ²² ·Î¾âƼ ¾øÀÌ ¹èÆ÷ÇÒ ¼ö ÀÖµµ·Ï Á¦°øµÇ´Â °ÍÀÌ´Ù. ÇÁ·Î±×·¥À» ÀÛ¼ºÇϱâ À§ÇÑ "javac", "jdb"¿Í °°Àº µµ±¸µéÀº Á¦¿ÜµÇ¾î ÀÖ°í ÀÚ¹Ù °¡»ó±â°è¿Í ¶óÀ̺귯¸® Ãø¸é¿¡¼­´Â JDK¿Í µ¿ÀÏÇÏ´Ù. ¸¶ÀÌÅ©·Î¼ÒÇÁÆ®¿¡¼­µµ ÀÌ¿Í À¯»çÇÏ°Ô ÀÚ»çÀÇ ÀÚ¹Ù SDK(Software Development Kit)ÀÇ ÀϺθ¦ JRE¿Í À¯»çÇÑ Á¶°ÇÀ¸·Î ¹èÆ÷ÇÒ ¼ö ÀÖµµ·Ï Çϰí ÀÖ´Ù.

1.3 ¾ÖÇø´(applet)°ú ¾îÇø®ÄÉÀ̼Ç(application)

¾ÖÇø´Àº HTML ÆäÀÌÁö¿¡ Æ÷ÇԵǾî ÀÚ¹Ù °¡»ó±â°è ¹× ¶óÀ̺귯¸®¸¦ žÀçÇÑ À¥ ºê¶ó¿ìÀú »ó¿¡¼­ ½ÇÇàµÇ´Â ÀÚ¹Ù ÇÁ·Î±×·¥À» ¸»ÇÑ´Ù. ³×Æ®¿öÅ©¸¦ ÅëÇØ¼­ ¿ø°Å¸®¿¡ ÀÖ´Â ¼­¹ö·ÎºÎÅÍ ¾ÖÇø´À» ±¸¼ºÇÏ´Â ÀÚ¹Ù ¹ÙÀÌÆ®Äڵ带 Àü´Þ¹Þ¾Æ ¼öÇàÇÏ´Â ±¸Á¶À̸ç, ÃÊâ±â ´ëºÎºÐÀÇ ÀÚ¹Ù ÇÁ·Î±×·¥µéÀÌ ÀÌ ºÎ·ù¿¡ ¼ÓÇÑ´Ù. ÀÌ¿¡ ºñÇØ ¾îÇø®ÄÉÀ̼ÇÀº ÈçÈ÷ »ç¿ëÇÏ´Â ¿öµåÇÁ·Î¼¼¼­ µîÀÇ ÇÁ·Î±×·¥°ú °°ÀÌ µ¶¸³ÀûÀ¸·Î ¼öÇàµÇ´Â ÀÚ¹Ù ÇÁ·Î±×·¥À» ÁöĪÇÏ´Â ¿ë¾î·Î º¸Åë JDK, JRE¿¡ Æ÷ÇÔµÈ ÀÚ¹Ù ½ÇÇàȯ°æÀ» »ç¿ëÇÏ¿© ½ÇÇà½ÃŲ´Ù.

¾ÖÇø´Àº ÀϹÝÀûÀ¸·Î ³×Æ®¿öÅ©¸¦ ÅëÇØ Àü¼ÛµÇ¹Ç·Î Àü¼Û¼Óµµ¸¦ °¨¾ÈÇØ¼­ Å©±â°¡ ÀÛÀº °ÍÀÌ º¸ÅëÀ̸ç, ÀÎÅͳݻóÀÇ ºÒƯÁ¤ ¼­¹ö·ÎºÎÅÍ ¾ÖÇø´À» Àü¼Û¹Þ¾Æ ½ÇÇàÇÏ´Â °æ¿ì°¡ ¸¹À¸¹Ç·Î ¾îÇø®ÄÉÀ̼ǿ¡ ºñÇØ º¸¾È¿¡ °ü·ÃµÈ Á¦¾àÀÌ ¸¹Àº ÆíÀÌ´Ù. ÇöÀç ³Ý½ºÄÉÀÌÇÁ¸¦ Æ÷ÇÔÇÑ ´ë´Ù¼öÀÇ À¥ ºê¶ó¿ìÀú¿¡¼­´Â ÇöÀç JDK 1.0.2¿Í µ¿ÀÏÇÑ ±Ô°ÝÀÇ ÀÚ¹Ù ½ÇÇàȯ°æÀ» žÀçÇϰí Àִµ¥ ÀÌµé ºê¶ó¿ìÀú »ó¿¡¼­´Â ¾ÖÇø´¿¡ ´ëÇØ ´ÙÀ½°ú °°Àº Á¦¾àÀ» °¡Çϰí ÀÖ´Ù.

±¸Ã¼ÀûÀÎ ³»¿ëÀº [Âü°í 1]À» Âü°íÇϱ⠹ٶõ´Ù. ÀÌ·± ÀÌÀ¯·Î ¾ÖÇø´ÀÌ µ¥ÀÌÅ͸¦ ÀúÀåÇϰíÀÚ ÇÒ ¶§´Â ¾ÖÇø´À» Á¦°øÇϰí ÀÖ´Â ¼­¹öÃø¿¡ ³×Æ®¿öÅ© ¿¬°áÀ» ÇØ¼­ ¼­¹öÃøÀÇ ÆÄÀÏ¿¡ Á¤º¸¸¦ ÀúÀåÇØ¾ß ÇÑ´Ù. CGI¸¦ ¾²°Å³ª º°µµÀÇ ¼­¹ö¸¦ ÀÛ¼ºÇÏ´Â ¹æ¹ýÀÌ Àִµ¥, ÀÌ¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ ¼³¸í°ú ¿¹Á¦´Â [Âü°í 2]¸¦ Âü°íÇϱ⠹ٶõ´Ù. µÚ¿¡ ¾ð±ÞÇÒ JDK 1.1¿¡¼­´Â ÀüÀÚ¼­¸íÀ» ÀÌ¿ëÇÏ¿© ƯÁ¤ ¾ÖÇø´¿¡°Ô Ãß°¡ÀûÀÎ ±ÇÇÑÀ» ÁÙ ¼ö ÀÖ°Ô Çϰí ÀÖÀ¸¸ç, ÃÖ±Ù ¹ßÇ¥¿¡ µû¸£¸é ¾ÕÀ¸·Î ³Ý½ºÄÉÀÌÇÁ³ª ÀÎÅÍ³Ý ÀͽºÇ÷η¯¿Í °°Àº À¥ ºê¶ó¿ìÀú¿¡¼­µµ »ç¿ëÀÚ È®ÀÎÇÏ¿¡ ¾ÖÇø´ÀÌ ÆÄÀÏ ÀÔÃâ·Â µîÀÇ Ãß°¡ÀûÀÎ ±ÇÇÑÀ» °¡Áú ¼ö ÀÖµµ·Ï ÇÒ °ÍÀ̶ó°í ÇÑ´Ù [Âü°í 3].

ÀϹÝÀûÀ¸·Î ¾ÖÇø´°ú ¾îÇø®ÄÉÀ̼ÇÀ» ±¸ºÐÇÏÁö¸¸, À§¿¡ ¾ð±ÞÇÑ Á¦¾àÀ» Á¦¿ÜÇÏ¸é ½ÇÇàµÇ´Â ¹æ¹ýÀÇ Â÷À̰¡ ÀÖÀ» »Ó ±Ùº»ÀûÀ¸·Î ¾ÖÇø´°ú ¾îÇø®ÄÉÀ̼ÇÀº ±× ´É·Â¿¡ À־ Â÷À̰¡ ¾ø´Ù. ¾ÖÇø´ÀÌ À¥ ÆäÀÌÁö »ó¿¡ ±×¸²°ú °°ÀÌ ¿µ¿ªÀ» Â÷ÁöÇϱâ´Â ÇÏÁö¸¸ ¾îÇø®ÄÉÀ̼ǰú ¸¶Âù°¡Áö·Î º°µµ·Î À©µµ¸¦ ¶ç¿ï ¼ö ÀÖÀ¸¸ç, ÀüÀÚ¼­¸í µîÀÇ ¹æ¹ýÀ¸·Î Çã°¡¸¦ ¾òÀ¸¸é ÆÄÀÏ ÀÔÃâ·ÂÀ̳ª ³×Æ®¿öÅ© ¿¬°áµµ ÀÚÀ¯·ÎÀÌ ÇàÇÒ ¼ö ÀÖ´Ù. ¾ÕÀ¸·Î ³×Æ®¿öÅ© ÄÄÇ»ÅͰ¡ ÀϹÝÈ­µÇ¸é ´ëºÎºÐÀÇ ÀÀ¿ëÇÁ·Î±×·¥µéÀº À¥ ÆäÀÌÁö »ó¿¡¼­ ¾ÖÇø´ÀÇ ÇüÅ·ΠÁ¦°øµÉ °ÍÀÌ´Ù. ÀÌ·± ÀÎÆ®¶ó³Ý(intranet) ȯ°æ¿¡¼­´Â Àü¼Û ½Ã°£ÀÌ Å« ¹®Á¦°¡ µÇÁö ¾ÊÀ» °ÍÀ¸¹Ç·Î ¾ÖÇø´À¸·Î Á¦°øµÇ´Â ÇÁ·Î±×·¥ÀÇ Å©±â ¶ÇÇÑ ¹®Á¦°¡ µÇÁö ¾ÊÀ» °ÍÀÌ´Ù.

ÀÚ¹Ù´Â ³×Æ®¿öÅ©¸¦ À§ÇÑ ¾ð¾î¶ó°í ÀÏľîÁø´Ù. ÀÌ´Â API»óÀÇ ³×Æ®¿öÅ© Áö¿ø°ú ÇÔ²², ¾ÖÇø´°ú °°ÀÌ ³×Æ®¿öÅ©¸¦ ÅëÇØ ½ÇÇàÆÄÀÏÀÌ ¿Å°Ü´Ù´Ï´Âµ¥ À־ ¿©·¯°¡Áö·Î ÁÁÀº Ư¼ºÀ» °¡Áö°í ÀÖÀ½¿¡ ±âÀÎÇÑ´Ù. ¸¶ÀÌÅ©·Î¼ÒÇÁÆ®ÀÇ ¾×Ƽºê X¿Í °°Àº ±â¼ú°ú ºñ±³ÇÒ ¶§, Àü¼Û½ÃÀÇ È¿À², ¾ÈÀü¼º, ±×¸®°í, ½ÇÇà½ÃÀÇ º¸¾È ¹®Á¦ µî¿¡ À־ ¿ùµîÈ÷ ¶Ù¾î³ª´Ù. ÀÌ¿¡ ´ëÇØ¼­´Â µÚ¿¡ ÀÚ¼¼È÷ ¾ð±ÞÇϵµ·Ï ÇϰڴÙ.

2. ÀÚ¹Ù ±â¼úÀÇ Æ¯¼º

2.1 ÀÚ¹Ù ÇÁ·Î±×·¡¹Ö ¾ð¾î (Java Programming Language)

ÀÚ¹Ù ÇÁ·Î±×·¡¹Ö ¾ð¾î´Â C/C++ÀÇ ¹®¹ýÀ» ±âº»À¸·Î Eiffel, SmallTalk, Objective C, Cedar/Mesa µîÀÇ ¾ð¾î¸¦ Âü°íÇÏ¿© °³¹ßµÇ¾ú´Ù. ÃʱâÀÇ C ¾ð¾î°¡ ±×·¨µíÀÌ ÀÚ¹Ù´Â °´Ã¼ÁöÇâ ¾ð¾îÀ̸鼭µµ ¾ð¾îÀÚü´Â ¹«Ã´ °£´ÜÇÏ´Ù. ´ÙÀ½Àº C/C++¸¦ ¿°µÎ¿¡ µÎ°í ÀÚ¹Ù ¾ð¾îÀÇ Æ¯Â¡À» Á¤¸®ÇØ º» °ÍÀÌ´Ù.

ƯÈ÷ À§¿¡¼­ Æ÷ÀÎÅͰ¡ ¾ø°í, ¹è¿­¿¡¼­ ¹üÀ§ °Ë»ç¸¦ ÇàÇϸç, °¡º£Áö ÄÝ·º¼ÇÀ» ÇàÇϴ´ٴ Ư¼ºÀº ÀϹÝÀûÀ¸·Î C/C++·Î ÇÁ·Î±×·¡¹ÖÇÏ´Â °æ¿ì ºÎµúÈ÷´Â ´ëºÎºÐÀÇ ¿À·ùÀÎ ¸Þ¸ð¸® ¿À·ù¸¦ ´ëÆø Á¦°ÅÇÒ ¼ö ÀÖ´Ù´Â Á¡¿¡¼­ ¸Å¿ì Áß¿äÇÏ´Ù. °¡º£Áö ÄÝ·º¼ÇÀº °¡Àå ³·Àº ¼øÀ§·Î ½ÇÇàµÇ°í ÀÖ´Â º°µµÀÇ ¾²·¹µå¿¡ ÀÇÇØ ÇàÇØÁö¹Ç·Î º¸Åë »ç¿ëÀÚ ÀÔ·ÂÀ» ±â´Ù¸®´Â ½Ã°£ÀÇ ¸¹Àº ÇÁ·Î±×·¥µé¿¡ À־´Â °ÅÀÇ ´À³¥ ¼ö ¾øÀ» Á¤µµÀÌ´Ù.

2.2 ÀÚ¹Ù °¡»ó±â°è (Java Virtual Machine)

¾Õ¼­ ÀÚ¹Ù °¡»ó±â°è¸¦ CPU¿¡ ºñ±³ÇÏ¿´´Ù. ÀÚ¹Ù °¡»ó±â°èÀÇ ±â°è¾î¿¡ ÇØ´çÇÏ´Â ¸í·É¾îµéÀ» ¹ÙÀÌÆ®ÄÚµå¶ó°í ºÎ¸¥´Ù. ÀÌ´Â ¸í·É¾îÀÇ ±â´ÉÀ» ±¸ºÐÇÏ´Â ÄÚµå(op code)µéÀÌ ¸ðµÎ ÇÑ ¹ÙÀÌÆ®À̱⠶§¹®¿¡ ºÙ¿©Áø À̸§ÀÌ´Ù. »ç½Ç»ó ÀÚ¹ÙÀÇ ¹ÙÀÌÆ®Äڵ带 Çϵå¿þ¾îÀûÀ¸·Î ±¸ÇöÇÏ´Â CPU¸¦ ¸¸µå´Â °ÍÀÌ °¡´ÉÇѵ¥ ÀÌ¹Ì ½ã¸¶ÀÌÅ©·Î½Ã½ºÅÛÁî¿¡¼­´Â picoJava¶ó°í ºÒ¸®´Â CPU ÇÙ½É(core)ÀÇ ¼³°è¸¦ ³¡¸¶ÃÄ µÎ°í ÀÖ´Ù. ÀÚ¹Ù °¡»ó±â°è´Â ´Ù¸¥ CPUµé°ú ºñ±³ÇßÀ» ¶§ ´ÙÀ½°ú °°Àº Ư¼ºÀ» °¡Áø´Ù.

Ư¼º

¼³°è ¸ñÀû

À§¿¡ ¿­°ÅÇÑ ÀÚ¹Ù °¡»ó±â°èÀÇ Æ¯¼ºÀº »ç½Ç ´ÙÀ½°ú °°Àº Á¡µéÀ» °í·ÁÇÏ¿© ¼³°èµÈ °ÍÀÌ´Ù.

¼ÒÇÁÆ®¿þ¾îÀûÀÎ ±¸Çö ¹æ¹ýµé

ÇöÀç JDK¿¡ Æ÷ÇԵǾî ÀÖ´Â ÀÚ¹Ù °¡»ó±â°è´Â ÇØ¼®±â·Î ±¸ÇöµÇ¾î ÀÖ¾î ºñ±³Àû ¼Óµµ°¡ ´À¸° ÆíÀÌ´Ù. JDK 1.1¿¡¼­´Â ÇØ¼®±âÀÇ ÀϺθ¦ ¾î¼Àºí¸®·Î ÀÛ¼ºÇÏ¿© ¼Óµµ¸¦ Çâ»ó½ÃÄ×´Ù. ÇöÀç±îÁö ¼ÓµµÇâ»óÀ» À§ÇÑ °¡Àå º¸ÆíÀûÀÎ ¹æ¹ýÀº JIT(Just-In-Time) ÄÄÆÄÀÏ·¯¶ó°í ºÒ¸®¿ì´Â ÀÏÁ¾ÀÇ ÇØ¼®±â¸¦ »ç¿ëÇÏ´Â °ÍÀε¥, ¹ú½á ¸¹Àº ±âÁ¾¿¡¼­ JIT ÄÄÆÄÀÏ·¯°¡ Áö¿øµÇ°í ÀÖ´Ù. ´ÙÀ½Àº ÀÚ¹Ù °¡»ó±â°è¸¦ ¼ÒÇÁÆ®¿þ¾îÀûÀ¸·Î ±¸ÇöÇÏ´Â ´Ù¾çÇÑ ¹æ¹ý¿¡ ´ëÇØ Á¤¸®ÇØ º» °ÍÀÌ´Ù.

ÀÚ¹Ù ¾ð¾î¿ÍÀÇ °ü°è

ÀÚ¹Ù °¡»ó±â°è´Â ºÐ¸íÈ÷ ÀÚ¹Ù ¾ð¾î¿Í ¹ÐÁ¢ÇÑ °ü°è¸¦ °¡Áø´Ù. ±¸Á¶ ÀÚü°¡ °´Ã¼ÁöÇâÀ̶ó´Â Á¡°ú °¡º£Áö ÄÝ·º¼Ç, ¾²·¹µå µ¿±âÈ­ µîÀ» Áö¿øÇÏ´Â °Í µîÀÌ ¹Ù·Î ±× Áõ°ÅÀÌ´Ù. ÇÏÁö¸¸, ÇÑ CPU »ó¿¡¼­ »ç¿ëÇÒ ¼ö ÀÖ´Â ÇÁ·Î±×·¡¹Ö ¾ð¾î°¡ µÑ ÀÌ»óÀÏ ¼ö ÀÖµíÀÌ ÀÚ¹Ù °¡»ó±â°è »ó¿¡¼­µµ ´Ù¸¥ ¾ð¾î¸¦ »ç¿ëÇÏ´Â °ÍÀÌ °¡´ÉÇÏ´Ù. ÇöÀç IBMÀÇ NetRexx¶ó´Â ¾ð¾î°¡ ³ª¿Í ÀÖÀ¸¸ç, ±× ¿Ü¿¡ ADA¸¦ ÄÄÆÄÀÏÇØÁÖ´Â ÄÄÆÄÀÏ·¯µµ »ç¿ëµÇ°í ÀÖ´Ù.

ÀÌ´Â ÇöÀç ADA, FORTRAN µîÀÇ ´Ù¸¥ ¾ð¾î·Î ÀÛ¼ºµÈ ÇÁ·Î±×·¥À» °¡Áö°í ÀÖ´Â ´Üü¿¡¼­ ÀÚ¹Ù·Î ¿Å°Ü°¥ °æ¿ì ±âÁ¸¿¡ ÀÛ¼ºµÈ ÇÁ·Î±×·¥µéÀ» ÀÌ¿ëÇÒ ¼ö ÀÖ´Ù´Â Á¡¿¡¼­ Áß¿äÇÏ´Ù[Âü°í 6]. ¶Ç, NetRexx¿Í °°Àº ¾ð¾îµéÀº ÀÚ¹Ùº¸´Ù´Â ´Ü¼øÇÏ°í °£´ÜÇÑ ÇÁ·Î±×·¡¹ÖÀ» ÇÒ °æ¿ì À¯¿ëÇÏ´Ù. ½ã¿¡¼­´Â Â÷ÈÄ¿¡ ÀÚ¹Ù °¡»ó±â°è¿¡¼­ ´Ù¸¥ ¾ð¾î¸¦ »ç¿ëÇÏ´Â °ÍÀÌ ¿ëÀÌÇϵµ·Ï ÀÚ¹Ù °¡»ó±â°èÀÇ Áö¿øÀ» È®´ëÇÒ °èȹÀÌ ÀÖ´Ù°í ÇÑ´Ù[Âü°í 7].

2.3 ÀÚ¹Ù API (Java Application Programming Interface)

¾Õ¼­ ¹àÈù ¹Ù¿Í °°ÀÌ ÀÚ¹Ù API´Â ÀÚ¹Ù Ç÷§Æû¿¡ À־ ÇʼöºÒ°¡°áÇÑ ¿ä¼ÒÀÌ´Ù. ÇÏÁö¸¸, ÃÖÃÊ¿¡ ¹ßÇ¥µÈ JDK 1.0.2 API´Â Ãʱâ À¥ »ó¿¡¼­ÀÇ °£´ÜÇÑ ÀÛ¾÷ Á¤µµ¸¦ Áö¿øÇÒ ¼ö ÀÖ´Â ¼öÁØÀÇ API¿´°í µû¶ó¼­ ÀÚ¹ÙÀÇ Àû¿ë¹üÀ§¿¡ Å« Á¦¾àÀÌ µÇ¾î¿Ô´Ù. ÀÌ·± ÀÌÀ¯·Î ÀÚ¹Ù¿¡ ´ëÇÑ º»°ÝÀûÀÎ Áö¿øÀÌ °¡¼ÓµÈ µÚ, ÀÚ¹Ù¼ÒÇÁÆ®¿Í ÄÄÇ»ÅÍ ¾÷°èÀÇ ÁÖµÈ ±â¾÷µé¿¡ ÀÇÇØ »õ·Î¿î API°¡ °è¼ÓÇÏ¿© °³¹ßµÇ¾ú°í ¶Ç °³¹ßµÇ°í ÀÖ´Ù. ¾Æ¿ï·¯ ±âÁ¸ ÀÚ¹Ù API¿¡ ´ëÇÑ Àç°ËÅä¿Í º¸¿ÏÀÌ ÀÌ·ç¾îÁ® ¿Ô´Âµ¥, ÀÌ¿Í °°Àº ³ë·ÂÀÇ Ã¹ °á½ÇÀÌ ¹Ù·Î JDK 1.1 APIÀÌ´Ù. ÇöÀç ´Ù¾çÇÑ Á¾·ùÀÇ APIµéÀÌ °³¹ßµÇ°í ÀÖÀ¸¸ç, ±â¾÷ÀÇ ÄÄÇ»ÅÍ¿Í ³×Æ®¿öÅ© Àü¹Ý¿¡¼­ÀÇ Àû¿ëÀ» ÁÖµÈ ¸ñÇ¥·Î ¸ÖƼ¹Ìµð¾î, ÀÓº£µðµå ½Ã½ºÅÛ µî ´Ù¾çÇÑ ºÐ¾ß·Î ±× Ȱ¿ë¹üÀ§¸¦ ³ÐÇô°¡°í ÀÖ´Ù.

ÀÚ¹Ù API¿Í º¸¾È

ÇöÀç ÀÚ¹Ù ¶óÀ̺귯¸®´Â ÀÚ¹Ù»óÀÇ º¸¾È¿¡ À־ ¸Å¿ì Áß¿äÇÑ ¿ä¼ÒÀÌ´Ù. JDK¿¡ Æ÷ÇÔµÈ Ç¥ÁØ ÀÚ¹Ù ¶óÀ̺귯¸® Áß º¸¾È¿¡ À־ À§ÇØ¿ä¼Ò°¡ ÀÖ´Â ÆÄÀÏ ÀÔÃâ·Â, ³×Æ®¿öÅ© Á¢¼Ó µî¿¡ ÇØ´çÇÏ´Â APIµéÀº ³»ºÎ¿¡¼­ java.lang.SecurityManager °´Ã¼¿¡ ÇöÀç ½ÇÇàÇÒ ÀÛ¾÷ÀÇ Àû¹ý¼º ¿©ºÎ¸¦ ¹¯°Ô µÇ¾î ÀÖ´Ù. ÀÌ ¶§ SecurityManager °´Ã¼°¡ ÀÛ¾÷ÀÇ Àû¹ý¼ºÀ» ÀÎÁõÇÏÁö ¾ÊÀ¸¸é ¿ì¸®°¡ ÈçÈ÷ ¾ÖÇø´À» ¶ç¿ï ¶§ ¸¸³ª°Ô µÇ´Â SecurityExceptionÀÌ ¹ß»ýµÇ°Ô µÈ´Ù. ¾ÖÇø´ÀÌ Æ¯Á¤ ÀÛ¾÷À» ÇàÇÒ ¼ö ¾ø´Â ÀÌÀ¯°¡ ¹Ù·Î À¥ ºê¶ó¿ìÀú³ª appletviewer°¡ Àڽſ¡ ¸Â´Â SecurityManager¸¦ »ç¿ëÇϰí Àֱ⠶§¹®´Ù. ¹Ý¸é¿¡ ¾îÇø®ÄÉÀ̼ÇÀº Ưº°ÇÑ °æ¿ì°¡ ¾Æ´Ï¸é ÀÌ SecurityManager°¡ ¾ø´Â »óÅ¿¡¼­ ¼öÇàµÇ¹Ç·Î ¾î¶² ÀÛ¾÷À̵çÁö ÀÓÀÇ·Î ÇàÇÒ ¼ö ÀÖ´Â °ÍÀÌ´Ù. ÀÌ·¯ÇÑ ÀÚ¹ÙÀÇ º¸¾È ¸ðµ¨À» "¸ð·¡»óÀÚ(sandbox)"¸ðµ¨À̶ó°í ÇÑ´Ù. Çʿ信 µû¶ó SecurityManager¸¦ ÀÛ¼ºÇÏ¸é ´Ù¸¥ º¸¾È Á¤Ã¥À» Àû¿ë½Ãų ¼ö ÀÖ´Ù. ÀÏ·Ê·Î JDKÀÇ appletviewer°¡ ¼³Á¤Çϱ⠳ª¸§À¸·Î ƯÁ¤ ÆÄÀÏÀ» ÀÐ°í ¾²´Â °ÍÀÌ Çã¿ëµÇ´Â °ÍÀº ³Ý½ºÄÉÀÌÇÁ¿Í °°Àº À¥ ºê¶ó¿ìÀú¿Í SecurityManager°¡ ´Ù¸£±â ¶§¹®ÀÌ´Ù.

3. ¿Ö ÀÚ¹ÙÀΰ¡?

3.1 ³×Æ®¿öÅ©

¾Õ¼­ ¾ð±ÞÇÑ ¹Ù ÀÖÁö¸¸ ÀÚ¹Ù´Â ´ÙÀ½°ú °°Àº ÀÌÀ¯¿¡¼­ ³×Æ®¿öÅ©¸¦ ÀÌ¿ëÇÏ´Â ÇÁ·Î±×·¥ÀÇ °³¹ß¿¡ ÀûÇÕÇÏ´Ù.

3.2 Ç÷§Æû µ¶¸³¼º

ÀÚ¹Ù °¡»ó±â°è¿Í ¾ð¾îÀÚüÀÇ ¸íÈ®ÇÑ Á¤ÀÇ·Î Çѹø ÀÚ¹Ù ½ÇÇàȯ°æ(°¡»ó±â°è¿Í ¶óÀ̺귯¸®)ÀÌ ÀÌ½ÄµÇ¸é ¾îµð¼­³ª ÀçÄÄÆÄÀϳ»Áö ¼öÁ¤ÀÌ ¾øÀÌ ½ÇÇàÇÒ ¼ö ÀÖ´Ù. ÀϹÝÀûÀ¸·Î ¼ÒÇÁÆ®¿þ¾î °³¹ß½Ã ¿©·¯ Ç÷§ÆûÀ» Áö¿øÇϴµ¥ µå´Â ºñ¿ëÀ» ¾ø¾Ù ¼ö ÀÖ´Ù.

3.3 »ý»ê¼º ¹× ½Å·Úµµ Çâ»ó

4. JDK 1.1

JDKÀÇ ¹öÀü(version)Àº '.'À» ±¸ºÐÀ¸·Î ¼¼ °³ÀÇ ¼ýÀÚ·Î ÀÌ·ç¾îÁ® ÀÖ´Ù. ÀÌ Áß ¸¶Áö¸· ¼ýÀÚ´Â ±× Àü ¹öÀüÀÇ ¿À·ù¸¦ ¼öÁ¤ÇÑ ¿À·ù ¼öÁ¤ÆÇÀÎ °æ¿ì¿¡ Áõ°¡µÈ´Ù. ÀÌ ±ÛÀÌ ÀÛ¼ºµÇ´Â ÇöÀç JDK 1.1.1±îÁö ³ª¿ÍÀִµ¥ ÀÌ´Â JDK 1.1ÀÇ ¿À·ù¸¦ ¼öÁ¤ÇßÀ½À» ¶æÇÑ´Ù. ´ÙÀ½À¸·Î °¡¿îµ¥ ¼ýÀÚ´Â ±â´É»óÀÇ Ãß°¡°¡ ÀÖ¾úÀ» °æ¿ì Çϳª¾¿ Áõ°¡µÈ´Ù. JDK 1.0¿¡¼­ JDK 1.1·Î °¡¸é¼­ API»óÀÇ ±â´É Ãß°¡¿Í ÀÚ¹Ù ¾ð¾î ÀÚüÀÇ º¯È­°¡ ÀÖ¾úÀ½À» »ó±âÇϱ⠹ٶõ´Ù. ÀÌ °æ¿ì ÀÌÀü ¹öÀü¿¡¼­ µ¿ÀÛÇÏ´ø ÇÁ·Î±×·¥µé°ú ÃÖ¼ÒÇÑ »óÀ§ ȣȯ¼ºÀ» À¯ÁöÇÏ°Ô µÈ´Ù. ±×¸®°í ¸¶Áö¸·À¸·Î óÀ½ ¼ýÀÚ´Â ÀÚ¹Ù ÀÚü¿¡ »ó´çÇÑ º¯È­°¡ ÀÖÀ» °æ¿ì¿¡ Áõ°¡ÇÏ°Ô µÇ´Âµ¥, ÀÌ °æ¿ì ÀÌÀü±îÁö ÀÛ¼ºµÈ ÇÁ·Î±×·¥µéÀº »õ ¹öÀü¿¡¼­´Â µ¿ÀÛÇÏÁö ¾ÊÀ» ¼öµµ ÀÖ´Ù. Áï, ÀÌÁø ȣȯ¼º(binary compatibility)ÀÌ º¸ÀåµÇÁö ¾ÊÀ» ¼ö ÀÖ´Ù.[Âü°í 4] ÇöÀç JDK 1.1À̶ó°í ÇÏ¸é ±â´É»ó JDK 1.0°ú ±¸ºÐµÇ´Â ÀÚ¹Ù ¹öÀüÀ» ÁöĪÇÏ´Â °ÍÀ¸·Î ÀÌ ±ÛÀÌ ¾²¿©Áö´Â ½ÃÁ¡¿¡¼­´Â JDK 1.1.1ÀÌ °¡Àå ÃÖ±ÙÀÇ ¿À·ù ¼öÁ¤ÆÇÀÌ´Ù.

¾ÕÀ¸·Î ¼³¸íÇÏ´Â ³»¿ë¿¡ º°µµÀÇ °­Àǰ¡ ÁغñµÇ¾î ÀÖ´Â ÀÚ¹ÙºóÁî(JavaBeans)¿Í RMI(Remote Method Invocation), JDBC µîÀÇ ³»¿ëÀº Æ÷ÇÔÇÏÁö ¾Ê¾Ò´Ù. ¶Ç, Å©°Ô Áß¿äÇÏÁö ¾Ê´Ù°í »ý°¢µÇ´Â ¼¼ºÎÀûÀÎ »çÇ×Àº »ý·«ÇÏ¿´´Ù. ÀÚ ±×·³ JDK 1.1¿¡¼­ Áö¿øÇÏ´Â »õ·Î¿î ±â´ÉµéÀ» »ìÆìº¸µµ·Ï ÇÏÀÚ.

±¹Á¦È­(Internationalization)

±¹Á¦È­´Â ÇÁ·Î±×·¥ÀÇ ÀÛ¼º½Ã »ç¿ëÀÚÀÇ ¹®È­³ª °ü½À ȤÀº ¾ð¾î¿¡ µû¶ó Ʋ·ÁÁú ¼ö ÀÖ´Â ºÎºÐÀ» È¿°úÀûÀ¸·Î ºÐ¸®½ÃŰ´Â °ÍÀ» ¶æÇÑ´Ù. ÀÌ·¸°Ô ÀÛ¼ºµÈ ÇÁ·Î±×·¥µéÀº ½±°Ô ƯÁ¤ ³ª¶ó³ª ¾ð¾î¿¡ ¸Â°Ô ¼öÁ¤µÉ ¼ö ÀÖ°Ô µÈ´Ù. ÀÚ¹Ù¿¡¼­´Â ÀÌ·¯ÇÑ ±¹Á¦È­µÈ ÇÁ·Î±×·¥ÀÇ ÀÛ¼ºÀ» ¿ëÀÌÇÏ°Ô Çϱâ À§ÇÑ »õ·Î¿î API¸¦ Á¦°øÇϴµ¥, À¯´ÏÄڵ带 Áö¿øÇÏ´Â ÀÚ¹ÙÀÇ Æ¯¼º»ó ÇÑ ÇÁ·Î±×·¥¾È¿¡¼­ µ¿½Ã¿¡ ¿©·¯ ¾ð¾î¸¦ »ç¿ëÇÏ´Â °ÍÀÌ ¿ëÀÌÇϵµ·Ï Çϰí ÀÖ´Ù.

À©µµÁ À¯´Ð½ºÀÇ ±¹Á¦È­ Áö¿øÀÌ ½Ã½ºÅÛ Àüü¿¡ ¾ð¾î³ª °ü½À µîÀ» ÅëĪÇÏ´Â ·ÎÄÉÀÏ(locale)À» ¼³Á¤Çϵµ·Ï Çϰí Àִµ¥ ºñÇØ ÀÚ¹Ù´Â ÀÌ ·ÎÄÉÀÏÀ» °´Ã¼ ´ÜÀ§·Î ¼³Á¤Çϵµ·Ï µÇ¾î ÀÖ´Ù. µû¶ó¼­, ÀÚ¹Ù ³»ºÎ¿¡¼­ Á¦°øµÇ´Â ±¹Á¦È­¸¦ Áö¿øÇϱâ À§ÇÑ °´Ã¼µéµµ ¾î¶² ·ÎÄÉÀÏÀÌ ÁÖ¾îÁö´À³Ä¿¡ µû¶ó °¢±â ´Ù¸¥ ·ÎÄÉÀÏÀ» Áö¿øÇÒ ¼ö ÀÖµµ·Ï Çϰí ÀÖ´Ù.

import java.util.*;
import java.text.*;
Locale us = new Locale("en", "US");
Collator usCollator = Collator.getInstance(us);
usCollator.setStrength(Collator.PRIMARY);
if( usCollator.compare("abc", "ABC") == 0 ) {
        System.out.println("Strings are equivalent");
}

À§ÀÇ ¿¹¿¡¼­ º¸´Â ¹Ù¿Í °°ÀÌ ¸ðµç ±¹Á¦È­µÈ °´Ã¼µéÀº java.util.Locale °´Ã¼¸¦ ¹Þ¾Æ¼­ ±×¿¡ ¸Âµµ·Ï ¿òÁ÷¿©¾ß ÇÑ´Ù.

º¸¾È ¹× µðÁöÅ» ¼­¸íµÈ ¾ÖÇø´(Security and Signed Applets)

JDK 1.0.2±îÁö´Â ¾ÖÇø´ÀÌ ÇàÇÒ ¼ö ÀÖ´Â ÀÏ¿¡ ¸¹Àº Á¦¾àÀÌ ÀÖ¾ú´Ù. ÆÄÀÏ ÀÔÃâ·ÂÀº ¹°·ÐÀÌ°í ³×Æ®¿öÅ© ¿¬°á±îÁö ¸¶À½´ë·Î ÇÒ ¼ö ¾ø¾ú´Ù. JDK 1.1¿¡´Â ÀüÀÚ¼­¸í ¹× ¸Þ½ÃÁö ´ÙÀÌÁ¦½ºÆ®(message digest)±îÁö º¸¾È °ü·Ã API°¡ Ãß°¡ µÇ¾ú°í ÀüÀÚ¼­¸íµÈ ¾ÖÇø´Àº ¾ÖÇø´À» ½ÇÇàÇÏ´Â ÂÊ¿¡¼­ ÀÎÁõÇÒ °æ¿ì SecurityManager°¡ ¾ø´Â °Í °°ÀÌ ¾î¶°ÇÑ ÀÏÀÌ¶óµµ ÇÒ ¼ö ÀÖµµ·Ï Çã¿ëµÉ ¼ö ÀÖ´Ù. ÀÌ ±â´ÉÀº ¾ÕÀ¸·Î´Â ÀüÀÚ¼­¸íÀ¸·Î ÀÎÁöµÈ ´ë»ó¸¶´Ù ±ÇÇÑÀ» º¸´Ù ¼¼¹ÐÇÏ°Ô Á¦¾îÇÒ ¼ö ÀÖµµ·Ï º¸°­µÉ ¿¹Á¤À̶ó°í ÇÑ´Ù.

AWT °³¼±

ÀÚ¹ÙÀÇ GUI(Graphical User Interface) ŸŶÀÎ AWT´Â »ó¾÷ÀûÀ¸·Î ÆÇ¸ÅÇÏ´Â ¼öÁØÀÇ ¼ÒÇÁÆ®¿þ¾î¸¦ ÀÛ¼ºÇϴµ¥ À־ °¡Àå Å« °É¸²µ¹ Áß¿¡ Çϳª¿´´Ù. ÃÖ±Ù ³Ý½ºÄÉÀÌÇÁ¿¡ ³»¾î ³õÀº IFC(Internet Foundation Classes)·Î AWT¸¦ º¸ÃæÇÏ´Â ¼öÁØ¿¡¼­ ¸¹Àº °³¼±ÀÌ ÀÌ·ç¾îÁöÀÚ AWT ÀÚü¿¡¼­µµ ÀÌ·¯ÇÑ º¯È­¸¦ ¼ö¿ëÇϱ⠽ÃÀÛÇÏ¿´´Ù. ÇöÀç JDK 1.1¿¡ Æ÷ÇÔµÈ ±â´É ¿Ü¿¡ ¾ÕÀ¸·Î ½ã°ú ³Ý½ºÄÉÀÌÇÁ ±×¸®°í IBMÀÌ °øµ¿À¸·Î IFC¿Í AWT¸¦ ÅëÇÕÇÏ´Â JFC(Java Foundation Classes)¶ó´Â »õ·Î¿î GUI ŸŶÀ» ³»¾î ³õÀ» ¿¹Á¤À̶ó°í ÇÑ´Ù.

ÇöÀç JDK 1.1 AWT¿¡¼­´Â ¼ø¼öÇÏ°Ô ÀÚ¹Ù·Î ¼ÒÇÁÆ®¿þ¾îÀûÀ¸·Î ±¸ÇöµÇ´Â GUI ÄÄÆ÷³ÍÆ®ÀÎ °æ·® ÄÄÆ÷³ÍÆ®(lightweight component)¸¦ Áö¿øÇϵµ·Ï java.awt.Component, java.awt.Container¸¦ »ó¼Ó¹Þ¾Æ ¼öÁ¤ÇÒ ¼ö ÀÖµµ·Ï Çϰí ÀÖ´Ù. ÇÏÁö¸¸, JDK 1.1¿¡´Â °æ·® ÄÄÆ÷³ÍÆ®·Î ±¸ÇöµÈ ¹öư µîÀÇ GUI ÄÄÆ÷³ÍÆ®´Â Æ÷ÇԵǾî ÀÖÁö ¾Ê´Ù. Áö±Ý±îÁöÀÇ ÀÚ¹Ù ÄÄÆ÷³ÍÆ®µéÀÌ À©µµÁ X À©µµ »óÀÇ GUI ºÎǰ°ú 1´ë 1·Î ¿¬°áµÇ¾î ÀÌ µé °íÀ¯ ÄÄÆ÷³ÍÆ®µé°ú ÀÚ¹Ù¸¦ ¿¬°áÇÏ´Â ¿ªÇÒÀ» Çß´øµ¥ ºñÇØ, °æ·® ÄÄÆ÷³ÍÆ®´Â ÇϳªÀÇ À©µµ ¾È¿¡¼­ ¼ø¼öÇÏ°Ô ÀÚ¹Ù ÄÚµå·Î¸¸ ÄÄÆ÷³ÍÆ®ÀÇ À̺¥Æ®¸¦ ó¸®Çϰí ÄÄÆ÷³ÍÆ®¸¦ ±×·ÁÁÖµµ·Ï ÀÛ¼ºµÈ´Ù´Â Á¡¿¡¼­ Ʋ¸®´Ù. X/MotifÀÇ °³Áþ(Gadget)°ú À¯»çÇÑ °³³äÀ̶ó°í »ý°¢Çϸé ÀÌÇØ°¡ ½¬¿ï °ÍÀÌ´Ù. °æ·® ÄÄÆ÷³ÍÆ®´Â ÀÚ¹Ù°¡ ¼öÇàµÇ´Â ¿î¿µÃ¼Á¦³ª Çϵå¿þ¾î¿¡ »ó°ü¾øÀÌ ¶È°°Àº ¸ð¾çÀÇ GUI¸¦ ±¸¼ºÇÒ ¼ö ÀÖ°í, »ó´ëÀûÀ¸·Î ¼Óµµ°¡ ºü¸£´Ù´Â Á¡¿¡¼­ ÀÕÁ¡ÀÌ ÀÖ´Ù. ¶ÇÇÑ, µÞ ¹è°æÀÌ ºñÃĺ¸ÀÌ´Â Åõ¸íÇÑ ÄÄÆ÷³ÍÆ®¸¦ ¸¸µé ¼ö ÀÖ´Ù´Â ÀåÁ¡µµ ÀÖ´Ù.

´ÙÀ½À¸·Î AWT»óÀÇ À̺¥Æ® ó¸® ¹æ½ÄÀÌ ¹Ù²î¾ú´Ù. ÀÌÀü±îÁö´Â ¸¶¿ì½º, Ű µî ¸ðµç À̺¥Æ®°¡ Ç×»ó ÇØ´ç ÄÄÆ÷³ÍÆ®¿¡ Àü´ÞµÇ¾úÀ¸³ª JDK 1.1¿¡¼­´Â À̸¦ ¹Ì¸® ¼±ÅÃÇϵµ·Ï ÇÏ¿© ºÒÇÊ¿äÇÑ À̺¥Æ®°¡ ÀüÇô Àü´ÞµÇÁö ¾Êµµ·Ï ÇÔÀ¸·Î ºÒÇÊ¿äÇÑ À̺¥Æ®·Î ÀÎÇÑ ¼º´É ÀúÇϸ¦ ¹æÁöÇÒ ¼ö ÀÖ´Ù. ¶ÇÇÑ, À§ÀÓ(delegation) À̺¥Æ® ¸ðµ¨À̶ó´Â »õ·Î¿î °³³äÀ» µµÀÔÇÏ¿´´Ù. Áö±Ý±îÁöÀÇ AWT ÇÁ·Î±×·¡¹ÖÀº »ç¿ëÇÏ´Â ÄÄÆ÷³ÍÆ®¸¦ »ó¼ÓÇØ¼­ À̺¥Æ®¸¦ Àü´Þ¹Þ´Â ¸Þ½îµå¸¦ ÀçÁ¤ÀÇÇÏ´Â ¹æ½ÄÀ» »ç¿ëÇÏ¿´´Âµ¥, GUI ÂÊ ÄÚµå¿Í ´Ù¸¥ ÇÁ·Î±×·¥ Äڵ尡 Áö³ªÄ¡°Ô ¿¬°üµÇ´Â ´ÜÁ¡ÀÌ ÀÖ¾ú´Ù. ÀÌ·¯ÇÑ ÀÌÀ¯·Î Å« ÇÁ·Î±×·¥À» ÀÛ¼ºÇϰųª ºó¹øÈ÷ GUI¸¦ ¼öÁ¤ÇÏ´Â ÇÁ·Î±×·¥À» ÀÛ¼ºÇϰųª ÇÏ´Â °æ¿ì ¹®Á¦°¡ ÀÖ¾ú´Ù. ´ÙÀ½Àº À§ÀÓ À̺¥Æ® ¸ðµ¨À» »ç¿ëÇÏ´Â ¿¹Á¦·Î ÀÚ¹Ù¼ÒÇÁÆ®ÀÇ »çÀÌÆ®¿¡¼­ ºô·Á¿Â °ÍÀÌ´Ù.

     
import java.awt.*;
import java.awt.event.*;

public class App {
    public void search() { 
        /* do search operation ...*/ 
        System.out.println("Searching...");
    }
    public void sort() { 
        /* do sort operation ...*/ 
        System.out.println("Sorting....");
    }

    static public void main(String args[]) {
       App app = new App();
       GUI gui = new GUI(app);
    }
}

class Command implements ActionListener  {
    static final int SEARCH = 0;
    static final int SORT = 1;
    int id;
    App app;

    public Command(int id, App app) {
        this.id = id;
        this.app = app;
    }

    public void actionPerformed(ActionEvent e) {
        switch(id) {
          case SEARCH: 
            app.search();
            break;
          case SORT:
            app.sort();
            break;
        }
    }
}

class GUI {

    public GUI(App app) {
        Frame f = new Frame();
        f.setLayout(new FlowLayout());          

        Command searchCmd = new Command(Command.SEARCH, app);
        Command sortCmd = new Command(Command.SORT, app);

        Button b;
        f.add(b = new Button("Search"));
        b.addActionListener(searchCmd);
        f.add(b = new Button("Sort"));
        b.addActionListener(sortCmd);

        List l;
        f.add(l = new List());
        l.add("Alphabetical");
        l.add("Chronological");
        l.addActionListener(sortCmd);
        f.pack();

        f.show();
    }
}

¿¹Á¦¿¡¼­ º¸´Â ¹Ù¿Í °°ÀÌ ÄÄÆ÷³ÍÆ® ÀÚü¸¦ È®Àå½ÃŰ´Â °æ¿ì¸¦ Á¦¿ÜÇϰí´Â ÄÄÆ÷³ÍÆ®¸¦ »ó¼Ó¹ÞÁö ¾Ê¾Æµµ µÈ´Ù. À̺¥Æ®´Â À§ÀÓ ¹ÞÀº °´Ã¼µé¿¡°Ô·Î Àü´ÞµÊÀ» ¾Ë ¼ö ÀÖ´Ù.

¶ÇÇÑ Å°º¸µå¸¦ Áö¸§±æÀ̶óµçÁö ³»ºÎÀûÀ¸·Î À̹ÌÁö 󸮸¦ °³¼±ÇѵçÁö ÇÏ´Â º¯È­°¡ ÀÖ¾úÀ¸¸ç, ½ºÅ©·Ñ ÆäÀÎ(scroll pane), ÆË¾÷ ¸Þ´º(popup menu)µî »õ·Î¿î ÄÄÆ÷³ÍÆ®¿Í Ŭ¸³º¸µå¿¡ ´ëÇÑ Áö¿øµµ Ãß°¡ µÇ¾ú´Ù.

JAR (Java ARchive) ÆÄÀÏ

ÀÚ¹Ù ¹ÙÀÌÆ®ÄÚµåÀÇ Å©±â°¡ ÀÛ´Ù°í´Â ÇÏÁö¸¸, µ¿Àû ¸µÅ©¶ó´Â Ư¼º»ó ¸Þ½îµå À̸§ µîÀÇ ºÎ°¡ÀûÀÎ Á¤º¸°¡ ¸¹¾ÆÁ®¼­ »ç½Ç Ŭ·¡½º ÆÄÀÏÀÇ ÀüüÀûÀÎ Å©±â´Â ¹«½Ã¸øÇÒ Á¤µµ·Î Å©´Ù. ¶ÇÇÑ HTTP ÀÚü°¡ ÇϳªÀÇ Å¬·¡½º¸¶´Ù º°µµÀÇ TCP ¿¬°áÀ» ÇàÇÏ´Â °ü°è·Î Ŭ·¡½ºÀÇ °¹¼ö°¡ ¸¹¾ÆÁö¸¸ Ŭ·¡½º ÆÄÀÏÀÇ °¹¼öµµ ´Ã°í µû¶ó¼­ Àü¼Û ¼Óµµµµ ¶³¾îÁö´Â ¹®Á¦°¡ ÀÖ¾ú´Ù. JAR´Â Ŭ·¡½º ÆÄÀÏÀ» Æ÷ÇÔÇÏ¿© À̹ÌÁö ÆÄÀÏ µîÀÇ ¿©·¯°¡Áö ÆÄÀÏÀ» ¹­°í ¾ÐÃàÇϰí ÀüÀÚ ¼­¸íÇÒ ¼ö ÀÖ´Â ¼ö´ÜÀ» Á¦°øÇÑ´Ù.

°´Ã¼ÁöÇâ ÇÁ·Î±×·¥ÀÇ Æ¯¼º»ó ÇÁ·Î±×·¥À» µÇµµ·Ï ÀÛÀº Ŭ·¡½ºµé·Î ³ª´©°Ô µÇ°í, JDK 1.1¿¡¼­´Â ÀÌ³Ê Å¬·¡½º(inner class)¶ó´Â »õ·Î¿î °³³äÀ» ³»¾î ³õ¾Æ Ŭ·¡½º ÆÄÀÏÀ» °¹¼ö°¡ ´Ã¾î³¯ ¼ÒÁö°¡ ³ô¾ÆÁ³À¸¹Ç·Î Àü¼ÛÈ¿À²»óÀ¸·Î º¸¾ÒÀ» ¶§ JAR ÆÄÀÏÀº ¸Å¿ì Áß¿äÇÏ´Ù. ÇöÀç ½ã ¼ÒÇÁÆ®¿¡¼­ ¼Ö¶ó¸®½º¿¡ žÀçÇϱâ À§ÇØ ¹ßÇ¥ÇÑ JDK 1.1 JIT ÄÄÆÄÀÏ·¯ ÆÐŰÁö´Â ¾Æ¿¹ Àڹ٠Ŭ·¡½º ¶óÀ̺귯¸®¸¦ JAR·Î ¹­¾î¼­ Á¦°øÇϰí ÀÖ´Ù.

ÀÔÃâ·Â ±â´É È®Àå

ÀÌÀü±îÁöÀÇ ÀÚ¹Ù ÀÔÃâ·Â ¶óÀ̺귯¸®ÀÇ ¹®Á¦Á¡Àº À¯´ÏÄÚµåÀÇ ÀÔÃâ·ÂÀ̳ª À¯´ÏÄÚµå¿Í ÀÚ¹Ù°¡ ½ÇÇàµÇ´Â ȯ°æ¿¡¼­ »ç¿ëÇÏ´Â ¹®ÀÚ Äڵ尣ÀÇ º¯È¯À» È¿°úÀûÀ¸·Î ´Ù·ê ¼ö ÀÖ´Â ¸Þ½îµå°¡ ¾ø¾ú´Ù´Â °ÍÀ̾ú´Ù. JDK 1.1Àº ¹®ÀÚ ½ºÆ®¸²(character stream) °è¿­ÀÇ Å¬·¡½º¸¦ Ãß°¡ÇÏ¿© ½±°Ô À¯´ÏÄÚµå·Î µÈ ÆÄÀÏÀ̳ª µ¥ÀÌÅ͸¦ ÀÔÃâ·ÂÇÒ ¼ö ÀÖµµ·Ï ÇÏ¿´´Ù.

Math ÆÐŰÁö

ÀÓÀÇÀÇ Å©±âÀÇ ¼ýÀÚ¸¦ ´Ù·ç±â À§ÇØ BigInteger¿Í BigDecimal Ŭ·¡½º°¡ Ãß°¡ µÇ¾ú´Ù.

°´Ã¼ ¼øÂ÷È­(Object Serialization)

°´Ã¼¸¦ ½ºÆ®¸²È­ÇÏ¿© ÆÄÀÏ¿¡ ÀúÀåÇÏ°í ¶Ç Çʿ信 µû¶ó ´Ù½Ã ÀúÀåµÈ ¿ø·¡ °´Ã¼¸¦ º¹¿øÇÏ´Â ±â´ÉÀÌ´Ù. ÇöÀç RMI(Remote Method Invocation)¿¡¼­ ¸Þ½îµåÀÇ ÀÎÀÚ¸¦ ³×Æ®¿öÅ© »óÀ¸·Î Àü¼ÛÇϱâ À§Çؼ­ »ç¿ëÇϰí ÀÖ´Ù. °´Ã¼¸¦ µ¥ÀÌÅͺ£À̽º¿¡ ÀúÀåÇϰųª ³×Æ®¿öÅ©·Î ÇöÀç »óÅ ±×´ë·Î °´Ã¼¸¦ ÁÖ°í ¹Þ´Â´ÙµçÁö ÇÏ´Â °æ¿ì »ç¿ëµÉ ¼ö ÀÖ´Ù. ´ÙÀ½ ¿¹´Â ÀÚ¹Ù¼ÒÇÁÆ®ÀÇ ¹®¼­¿¡¼­ ¿Å°Ü¿Â °ÍÀÌ´Ù.

// Serialize today's date to a file.
FileOutputStream f = new FileOutputStream("tmp");
ObjectOutput s = new ObjectOutputStream(f);
s.writeObject("Today");
s.writeObject(new Date());
s.flush();

// Deserialize a string and date from a file.
FileInputStream in = new FileInputStream("tmp");
ObjectInputStream s = new ObjectInputStream(in);
String today = (String)s.readObject();
Date date = (Date)s.readObject();

¸®Ç÷º¼Ç(Reflection)

¸Þ½îµåÀÇ À̸§À̳ª ÇʵåÀÇ À̸§À» ¹®ÀÚ¿­·Î °è»êÇÏ¿© ÇØ´ç ¸Þ½îµå¸¦ È£ÃâÇϰųª Çʵ带 »ç¿ëÇÒ ¼ö ÀÖµµ·Ï ÇÏ´Â ±â´ÉÀÌ´Ù. ÀÚ¹ÙºóÁî µî¿¡¼­ »ç¿ëµÇ±â À§Çؼ­ °³¹ßµÇ¾ú´Ù.

ÀÌ³Ê Å¬·¡½º(Inner Classes)

Ŭ·¡½º ³»ºÎ¿¡ Ŭ·¡½º¸¦ Á¤ÀÇÇÏ¿© »ç¿ëÇÒ ¼ö ÀÖ°Ô ÇÏ´Â °ÍÀ¸·Î ¾îµªÅÍ(adapter) °´Ã¼¶ó°í ºÒ¸®´Â ÇÁ·Î±×·¡¹Ö ½ºÅ¸ÀÏÀ» Áö¿øÇϱâ À§Çؼ­ Ãß°¡µÇ¾ú´Ù. ¹ÙÀÌÆ®ÄÚµå °Ë»ç±â(bytecode verifier)ÀÇ ÀϺΠ¼öÁ¤À» Á¦¿ÜÇϰí´Â »ç½Ç»ó ÀÚ¹Ù °¡»ó±â°èÀÇ ¼öÁ¤ÀÌ ÇÊ¿ä¾øµµ·Ï ±¸ÇöÇϰí ÀÖ´Ù. ¾îµªÅÍ´Â ½±°Ô À̾߱âÇϸé ÀÏÁ¾ÀÇ Äݹé(callback) ÇÔ¼ö¿Í ºñ½ÁÇÑ ±â´ÉÀ» ÇÏ´Â °´Ã¼¶ó°í »ý°¢ÇÏ¸é µÈ´Ù. ÀÌ ÀÌ³Ê Å¬·¡½º·ÎºÎÅÍ »ý¼ºµÈ °´Ã¼´Â °´Ã¼¸¦ »ý¼º½ÃŲ °´Ã¼¿Í ¿¬°üµÇ¾î »ç¿ëµÈ´Ù. ´ÙÀ½Àº ÀÚ¹Ù¼ÒÇÁÆ®ÀÇ ¹®¼­¿¡¼­ ¿Å°Ü¿Â ¿¹Á¦ÀÌ´Ù.

   public class FixedStack {
        Object array[];
        int top = 0;
        FixedStack(int fixedSizeLimit) {
            array = new Object[fixedSizeLimit];
        }
    
        public void push(Object item) {
            array[top++] = item;
        }
        public boolean isEmpty() {
            return top == 0;
        }
        // other stack methods go here...
    
        /** This adapter class is defined as part of its target class,
         *  It is placed alongside the variables it needs to access.
         */
        class Enumerator implements java.util.Enumeration {
            int count = top;
            public boolean hasMoreElements() {
                return count > 0;
            }

            public Object nextElement() {
                if (count == 0)
                    throw new NoSuchElementException("FixedStack");
                return array[--count];
            }
        }
        public java.util.Enumeration elements() {
            return new Enumerator();
        }
    }

ÀÌ³Ê Å¬·¡½ºÀÎ Enumerator °´Ã¼´Â µÑ·¯½Î°í ÀÖ´Â FixedStack °´Ã¼ÀÇ Çʵ带 ÀÓÀÇ·Î »ç¿ëÇÒ ¼ö ÀÖ´Ù. FixedStack Ŭ·¡½º¿¡¼­ ³ª¿Â °´Ã¼°¡ ¸î°³À̵çÁö ±× ¾È¿¡¼­ »ý¼ºµÈ Enumerator °´Ã¼´Â ÀÚ½ÅÀ» »ý¼º½ÃŲ FixedStack °´Ã¼ÀÇ Çʵ峪 ¸Þ½îµå¸¦ ÂüÁ¶ÇÏ°Ô µÈ´Ù´Â Á¡À» ¸í½ÉÇÏÀÚ. ÀÌ·± ¸é¿¡¼­ ´Ü¼øÈ÷ C++¿¡¼­ Ŭ·¡½º¸¦ Áßø½ÃŰ´Â °Í°ú´Â Ʋ¸®´Ù.

Java Native Interface

C/C++·Î °íÀ¯ Äڵ带 ÀÛ¼ºÇÏ´Â ±Ô¾àÀÌ´Ù. Ç¥ÁØÀ¸·Î Á¦Á¤µÇ¾úÀ¸¹Ç·Î ÃÖ¼ÒÇÑ ÀÚ¹Ù °¡»ó±â°è°¡ ¾î¶»°Ô ±¸ÇöµÇ¾ú³ª¿¡ »ó°ü¾øÀÌ µ¿ÀÏÇÑ °íÀ¯ÄÚµå ¶óÀ̺귯¸®¸¦ ¿¬°áÇÏ¿© »ç¿ëÇÒ ¼ö ÀÖ´Ù´Â Á¡¿¡¼­ Áß¿äÇÑ Àǹ̸¦ °¡Áø´Ù. ÇöÀç JDK 1.1ÀÇ AWT µîÀÇ ¶óÀ̺귯¸®µµ ÀÌ JNI¿¡ ÁØÇÏ¿© ÀÛ¼ºµÇ¾úÀ¸¹Ç·Î Ȥ ´©±º°¡ JNI¸¦ Áö¿øÇÏ´Â ÀÚ¹Ù °¡»ó±â°è¸¦ ¸¸µç´Ù¸é º°µµ·Î AWT¸¦ À̽ÄÇÒ Çʿ䰡 ¾øÀÌ °ð¹Ù·Î »ç¿ëÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù. ÀÌ·± °íÀ¯ ÄÚµå ÀÛ¼º ±Ô¾à ¿Ü¿¡ JNI¸¦ »ç¿ëÇϸé ÀÚ¹Ù °¡»ó±â°è¸¦ C/C++ ÇÁ·Î±×·¥ ³»¿¡¼­ »ç¿ëÇÒ ¼öµµ ÀÖ´Ù.

4. °á ·Ð

ÀÚ¹Ù´Â ¾ÆÁ÷ ¿ÏÀüÈ÷ ¼º¼÷ÇÏÁö´Â ¸øÇß´Ù°í »ý°¢ÇÑ´Ù. ÇÏÁö¸¸, 2³âÀ̶õ ªÀº ½Ã°£ µ¿¾È ¾ó¸¶³ª ¸¹Àº °³¼±ÀÌ ÀÖ¾ú´Â°¡¸¦ »ý°¢ÇÏ¸é ±â´ëÇØ º½Á÷ÇÑ ¸éµéÀÌ ¸¹´Ù°í ÀÚ½ÅÀÖ°Ô À̾߱âÇÒ ¼ö ÀÖ´Ù.

5. Âü°íÀÚ·á

[1] ¾ÖÇø´¿¡ ´ëÇÑ º¸¾È»óÀÇ Á¦¾à (http://www.javasoft.com:80/sfaq/#applets)

[2] ¿ù°£ ¸¶ÀÌÅ©·Î¼ÒÇÁÆ®¿þ¾î 96³â 8¿ù ÀÚ¹Ù ÇÁ·Î±×·¡¹Ö[7], pp 528~539

[3] ³Ý½ºÄÉÀÌÇÁ 4.0 FAQ (http://home.netscape.com/comprod/products/communicator/faq.html#access)

[4] JDK 1.1°ú ±× ÀÌÀü ¹öÀü°úÀÇ È£È¯¼º ¹®Á¦ (http://www.javasoft.com/products/jdk/1.1/compatibility.html)

[5] ÀÚ¹Ù¿ø 97 ÄÁÆÛ·±½º ½½¶óÀ̵å - Breaking the Speed Barrier: The Future of Java Performance (http://www.javasoft.com/javaone/sessions/slides/TT06/griswold.htm)

[6] ¿ù°£ ¸¶ÀÌÅ©·Î¼ÒÇÁÆ®¿þ¾î 97³â 4¿ù ƯÁý 1ºÎ "97³â, ÀÚ¹ÙÀÇ Çâ±â´Â ±×À¹ÇÏ´Ù", pp 247, NASAÀÇ °í´Ùµå ¿ìÁÖºñÇà ¼¾ÅÍ¿¡¼­ÀÇ ÀÚ¹Ù Àû¿ë ¿¹

[7] Tim Lindholm and Frank Yellin, "Java Virtual Machine Specification" , Addison-Wesley, 1996

[8] ÀÚ¹Ù¼ÒÇÁÆ® JDK 1.1 ¹®¼­ (http://www.javasoft.com:80/products/jdk/1.1/docs/index.html)