JDK 1.1 TutorialÀÚ¹Ù´Â ÀϹÝÀûÀÎ Àνİú´Â ´Þ¸® ÇÁ·Î±×·¡¹Ö ¾ð¾î, °¡»ó±â°è, ±×¸®°í, 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°¡ Æ÷ÇԵǾî¾ß ÇÏ´Â °ÍÀÌ´Ù.
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¿Í À¯»çÇÑ Á¶°ÇÀ¸·Î ¹èÆ÷ÇÒ ¼ö ÀÖµµ·Ï Çϰí ÀÖ´Ù.
¾ÖÇø´Àº HTML ÆäÀÌÁö¿¡ Æ÷ÇԵǾî ÀÚ¹Ù °¡»ó±â°è ¹× ¶óÀ̺귯¸®¸¦ žÀçÇÑ À¥ ºê¶ó¿ìÀú »ó¿¡¼ ½ÇÇàµÇ´Â ÀÚ¹Ù ÇÁ·Î±×·¥À» ¸»ÇÑ´Ù. ³×Æ®¿öÅ©¸¦ ÅëÇØ¼ ¿ø°Å¸®¿¡ ÀÖ´Â ¼¹ö·ÎºÎÅÍ ¾ÖÇø´À» ±¸¼ºÇÏ´Â ÀÚ¹Ù ¹ÙÀÌÆ®Äڵ带 Àü´Þ¹Þ¾Æ ¼öÇàÇÏ´Â ±¸Á¶À̸ç, ÃÊâ±â ´ëºÎºÐÀÇ ÀÚ¹Ù ÇÁ·Î±×·¥µéÀÌ ÀÌ ºÎ·ù¿¡ ¼ÓÇÑ´Ù. ÀÌ¿¡ ºñÇØ ¾îÇø®ÄÉÀ̼ÇÀº ÈçÈ÷ »ç¿ëÇÏ´Â ¿öµåÇÁ·Î¼¼¼ µîÀÇ ÇÁ·Î±×·¥°ú °°ÀÌ µ¶¸³ÀûÀ¸·Î ¼öÇàµÇ´Â ÀÚ¹Ù ÇÁ·Î±×·¥À» ÁöĪÇÏ´Â ¿ë¾î·Î º¸Åë JDK, JRE¿¡ Æ÷ÇÔµÈ ÀÚ¹Ù ½ÇÇàȯ°æÀ» »ç¿ëÇÏ¿© ½ÇÇà½ÃŲ´Ù.
¾ÖÇø´Àº ÀϹÝÀûÀ¸·Î ³×Æ®¿öÅ©¸¦ ÅëÇØ Àü¼ÛµÇ¹Ç·Î Àü¼Û¼Óµµ¸¦ °¨¾ÈÇØ¼ Å©±â°¡ ÀÛÀº °ÍÀÌ º¸ÅëÀ̸ç, ÀÎÅͳݻóÀÇ ºÒƯÁ¤ ¼¹ö·ÎºÎÅÍ ¾ÖÇø´À» Àü¼Û¹Þ¾Æ ½ÇÇàÇÏ´Â °æ¿ì°¡ ¸¹À¸¹Ç·Î ¾îÇø®ÄÉÀ̼ǿ¡ ºñÇØ º¸¾È¿¡ °ü·ÃµÈ Á¦¾àÀÌ ¸¹Àº ÆíÀÌ´Ù. ÇöÀç ³Ý½ºÄÉÀÌÇÁ¸¦ Æ÷ÇÔÇÑ ´ë´Ù¼öÀÇ À¥ ºê¶ó¿ìÀú¿¡¼´Â ÇöÀç JDK 1.0.2¿Í µ¿ÀÏÇÑ ±Ô°ÝÀÇ ÀÚ¹Ù ½ÇÇàȯ°æÀ» žÀçÇϰí Àִµ¥ ÀÌµé ºê¶ó¿ìÀú »ó¿¡¼´Â ¾ÖÇø´¿¡ ´ëÇØ ´ÙÀ½°ú °°Àº Á¦¾àÀ» °¡Çϰí ÀÖ´Ù.
±¸Ã¼ÀûÀÎ ³»¿ëÀº [Âü°í 1]À» Âü°íÇϱ⠹ٶõ´Ù. ÀÌ·± ÀÌÀ¯·Î ¾ÖÇø´ÀÌ µ¥ÀÌÅ͸¦ ÀúÀåÇϰíÀÚ ÇÒ ¶§´Â ¾ÖÇø´À» Á¦°øÇϰí ÀÖ´Â ¼¹öÃø¿¡ ³×Æ®¿öÅ© ¿¬°áÀ» ÇØ¼ ¼¹öÃøÀÇ ÆÄÀÏ¿¡ Á¤º¸¸¦ ÀúÀåÇØ¾ß ÇÑ´Ù. CGI¸¦ ¾²°Å³ª º°µµÀÇ ¼¹ö¸¦ ÀÛ¼ºÇÏ´Â ¹æ¹ýÀÌ Àִµ¥, ÀÌ¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ ¼³¸í°ú ¿¹Á¦´Â [Âü°í 2]¸¦ Âü°íÇϱ⠹ٶõ´Ù. µÚ¿¡ ¾ð±ÞÇÒ JDK 1.1¿¡¼´Â ÀüÀÚ¼¸íÀ» ÀÌ¿ëÇÏ¿© ƯÁ¤ ¾ÖÇø´¿¡°Ô Ãß°¡ÀûÀÎ ±ÇÇÑÀ» ÁÙ ¼ö ÀÖ°Ô Çϰí ÀÖÀ¸¸ç, ÃÖ±Ù ¹ßÇ¥¿¡ µû¸£¸é ¾ÕÀ¸·Î ³Ý½ºÄÉÀÌÇÁ³ª ÀÎÅÍ³Ý ÀͽºÇ÷η¯¿Í °°Àº À¥ ºê¶ó¿ìÀú¿¡¼µµ »ç¿ëÀÚ È®ÀÎÇÏ¿¡ ¾ÖÇø´ÀÌ ÆÄÀÏ ÀÔÃâ·Â µîÀÇ Ãß°¡ÀûÀÎ ±ÇÇÑÀ» °¡Áú ¼ö ÀÖµµ·Ï ÇÒ °ÍÀ̶ó°í ÇÑ´Ù [Âü°í 3].
ÀϹÝÀûÀ¸·Î ¾ÖÇø´°ú ¾îÇø®ÄÉÀ̼ÇÀ» ±¸ºÐÇÏÁö¸¸, À§¿¡ ¾ð±ÞÇÑ Á¦¾àÀ» Á¦¿ÜÇÏ¸é ½ÇÇàµÇ´Â ¹æ¹ýÀÇ Â÷À̰¡ ÀÖÀ» »Ó ±Ùº»ÀûÀ¸·Î ¾ÖÇø´°ú ¾îÇø®ÄÉÀ̼ÇÀº ±× ´É·Â¿¡ ÀÖ¾î¼ Â÷À̰¡ ¾ø´Ù. ¾ÖÇø´ÀÌ À¥ ÆäÀÌÁö »ó¿¡ ±×¸²°ú °°ÀÌ ¿µ¿ªÀ» Â÷ÁöÇϱâ´Â ÇÏÁö¸¸ ¾îÇø®ÄÉÀ̼ǰú ¸¶Âù°¡Áö·Î º°µµ·Î À©µµ¸¦ ¶ç¿ï ¼ö ÀÖÀ¸¸ç, ÀüÀÚ¼¸í µîÀÇ ¹æ¹ýÀ¸·Î Çã°¡¸¦ ¾òÀ¸¸é ÆÄÀÏ ÀÔÃâ·ÂÀ̳ª ³×Æ®¿öÅ© ¿¬°áµµ ÀÚÀ¯·ÎÀÌ ÇàÇÒ ¼ö ÀÖ´Ù. ¾ÕÀ¸·Î ³×Æ®¿öÅ© ÄÄÇ»ÅͰ¡ ÀϹÝÈµÇ¸é ´ëºÎºÐÀÇ ÀÀ¿ëÇÁ·Î±×·¥µéÀº À¥ ÆäÀÌÁö »ó¿¡¼ ¾ÖÇø´ÀÇ ÇüÅ·ΠÁ¦°øµÉ °ÍÀÌ´Ù. ÀÌ·± ÀÎÆ®¶ó³Ý(intranet) ȯ°æ¿¡¼´Â Àü¼Û ½Ã°£ÀÌ Å« ¹®Á¦°¡ µÇÁö ¾ÊÀ» °ÍÀ¸¹Ç·Î ¾ÖÇø´À¸·Î Á¦°øµÇ´Â ÇÁ·Î±×·¥ÀÇ Å©±â ¶ÇÇÑ ¹®Á¦°¡ µÇÁö ¾ÊÀ» °ÍÀÌ´Ù.
ÀÚ¹Ù´Â ³×Æ®¿öÅ©¸¦ À§ÇÑ ¾ð¾î¶ó°í ÀÏľîÁø´Ù. ÀÌ´Â API»óÀÇ ³×Æ®¿öÅ© Áö¿ø°ú ÇÔ²², ¾ÖÇø´°ú °°ÀÌ ³×Æ®¿öÅ©¸¦ ÅëÇØ ½ÇÇàÆÄÀÏÀÌ ¿Å°Ü´Ù´Ï´Âµ¥ ÀÖ¾î¼ ¿©·¯°¡Áö·Î ÁÁÀº Ư¼ºÀ» °¡Áö°í ÀÖÀ½¿¡ ±âÀÎÇÑ´Ù. ¸¶ÀÌÅ©·Î¼ÒÇÁÆ®ÀÇ ¾×Ƽºê X¿Í °°Àº ±â¼ú°ú ºñ±³ÇÒ ¶§, Àü¼Û½ÃÀÇ È¿À², ¾ÈÀü¼º, ±×¸®°í, ½ÇÇà½ÃÀÇ º¸¾È ¹®Á¦ µî¿¡ ÀÖ¾î¼ ¿ùµîÈ÷ ¶Ù¾î³ª´Ù. ÀÌ¿¡ ´ëÇØ¼´Â µÚ¿¡ ÀÚ¼¼È÷ ¾ð±ÞÇϵµ·Ï ÇϰڴÙ.
ÀÚ¹Ù ÇÁ·Î±×·¡¹Ö ¾ð¾î´Â C/C++ÀÇ ¹®¹ýÀ» ±âº»À¸·Î Eiffel, SmallTalk, Objective C, Cedar/Mesa µîÀÇ ¾ð¾î¸¦ Âü°íÇÏ¿© °³¹ßµÇ¾ú´Ù. ÃʱâÀÇ C ¾ð¾î°¡ ±×·¨µíÀÌ ÀÚ¹Ù´Â °´Ã¼ÁöÇâ ¾ð¾îÀ̸鼵µ ¾ð¾îÀÚü´Â ¹«Ã´ °£´ÜÇÏ´Ù. ´ÙÀ½Àº C/C++¸¦ ¿°µÎ¿¡ µÎ°í ÀÚ¹Ù ¾ð¾îÀÇ Æ¯Â¡À» Á¤¸®ÇØ º» °ÍÀÌ´Ù.
ƯÈ÷ À§¿¡¼ Æ÷ÀÎÅͰ¡ ¾ø°í, ¹è¿¿¡¼ ¹üÀ§ °Ë»ç¸¦ ÇàÇϸç, °¡º£Áö ÄÝ·º¼ÇÀ» ÇàÇϴ´ٴ Ư¼ºÀº ÀϹÝÀûÀ¸·Î C/C++·Î ÇÁ·Î±×·¡¹ÖÇÏ´Â °æ¿ì ºÎµúÈ÷´Â ´ëºÎºÐÀÇ ¿À·ùÀÎ ¸Þ¸ð¸® ¿À·ù¸¦ ´ëÆø Á¦°ÅÇÒ ¼ö ÀÖ´Ù´Â Á¡¿¡¼ ¸Å¿ì Áß¿äÇÏ´Ù. °¡º£Áö ÄÝ·º¼ÇÀº °¡Àå ³·Àº ¼øÀ§·Î ½ÇÇàµÇ°í ÀÖ´Â º°µµÀÇ ¾²·¹µå¿¡ ÀÇÇØ ÇàÇØÁö¹Ç·Î º¸Åë »ç¿ëÀÚ ÀÔ·ÂÀ» ±â´Ù¸®´Â ½Ã°£ÀÇ ¸¹Àº ÇÁ·Î±×·¥µé¿¡ À־ °ÅÀÇ ´À³¥ ¼ö ¾øÀ» Á¤µµÀÌ´Ù.
¾Õ¼ ÀÚ¹Ù °¡»ó±â°è¸¦ 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].
¾Õ¼ ¹àÈù ¹Ù¿Í °°ÀÌ ÀÚ¹Ù API´Â ÀÚ¹Ù Ç÷§Æû¿¡ ÀÖ¾î¼ ÇʼöºÒ°¡°áÇÑ ¿ä¼ÒÀÌ´Ù. ÇÏÁö¸¸, ÃÖÃÊ¿¡ ¹ßÇ¥µÈ JDK 1.0.2 API´Â Ãʱâ À¥ »ó¿¡¼ÀÇ °£´ÜÇÑ ÀÛ¾÷ Á¤µµ¸¦ Áö¿øÇÒ ¼ö ÀÖ´Â ¼öÁØÀÇ API¿´°í µû¶ó¼ ÀÚ¹ÙÀÇ Àû¿ë¹üÀ§¿¡ Å« Á¦¾àÀÌ µÇ¾î¿Ô´Ù. ÀÌ·± ÀÌÀ¯·Î ÀÚ¹Ù¿¡ ´ëÇÑ º»°ÝÀûÀÎ Áö¿øÀÌ °¡¼ÓµÈ µÚ, ÀÚ¹Ù¼ÒÇÁÆ®¿Í ÄÄÇ»ÅÍ ¾÷°èÀÇ ÁÖµÈ ±â¾÷µé¿¡ ÀÇÇØ »õ·Î¿î API°¡ °è¼ÓÇÏ¿© °³¹ßµÇ¾ú°í ¶Ç °³¹ßµÇ°í ÀÖ´Ù. ¾Æ¿ï·¯ ±âÁ¸ ÀÚ¹Ù API¿¡ ´ëÇÑ Àç°ËÅä¿Í º¸¿ÏÀÌ ÀÌ·ç¾îÁ® ¿Ô´Âµ¥, ÀÌ¿Í °°Àº ³ë·ÂÀÇ Ã¹ °á½ÇÀÌ ¹Ù·Î JDK 1.1 APIÀÌ´Ù. ÇöÀç ´Ù¾çÇÑ Á¾·ùÀÇ APIµéÀÌ °³¹ßµÇ°í ÀÖÀ¸¸ç, ±â¾÷ÀÇ ÄÄÇ»ÅÍ¿Í ³×Æ®¿öÅ© Àü¹Ý¿¡¼ÀÇ Àû¿ëÀ» ÁÖµÈ ¸ñÇ¥·Î ¸ÖƼ¹Ìµð¾î, ÀÓº£µðµå ½Ã½ºÅÛ µî ´Ù¾çÇÑ ºÐ¾ß·Î ±× Ȱ¿ë¹üÀ§¸¦ ³ÐÇô°¡°í ÀÖ´Ù.
ÇöÀç ÀÚ¹Ù ¶óÀ̺귯¸®´Â ÀÚ¹Ù»óÀÇ º¸¾È¿¡ ÀÖ¾î¼ ¸Å¿ì Áß¿äÇÑ ¿ä¼ÒÀÌ´Ù. JDK¿¡ Æ÷ÇÔµÈ Ç¥ÁØ ÀÚ¹Ù ¶óÀ̺귯¸® Áß º¸¾È¿¡ ÀÖ¾î¼ À§ÇØ¿ä¼Ò°¡ ÀÖ´Â ÆÄÀÏ ÀÔÃâ·Â, ³×Æ®¿öÅ© Á¢¼Ó µî¿¡ ÇØ´çÇÏ´Â APIµéÀº ³»ºÎ¿¡¼ java.lang.SecurityManager °´Ã¼¿¡ ÇöÀç ½ÇÇàÇÒ ÀÛ¾÷ÀÇ Àû¹ý¼º ¿©ºÎ¸¦ ¹¯°Ô µÇ¾î ÀÖ´Ù. ÀÌ ¶§ SecurityManager °´Ã¼°¡ ÀÛ¾÷ÀÇ Àû¹ý¼ºÀ» ÀÎÁõÇÏÁö ¾ÊÀ¸¸é ¿ì¸®°¡ ÈçÈ÷ ¾ÖÇø´À» ¶ç¿ï ¶§ ¸¸³ª°Ô µÇ´Â SecurityExceptionÀÌ ¹ß»ýµÇ°Ô µÈ´Ù. ¾ÖÇø´ÀÌ Æ¯Á¤ ÀÛ¾÷À» ÇàÇÒ ¼ö ¾ø´Â ÀÌÀ¯°¡ ¹Ù·Î À¥ ºê¶ó¿ìÀú³ª appletviewer°¡ Àڽſ¡ ¸Â´Â SecurityManager¸¦ »ç¿ëÇϰí Àֱ⠶§¹®´Ù. ¹Ý¸é¿¡ ¾îÇø®ÄÉÀ̼ÇÀº Ưº°ÇÑ °æ¿ì°¡ ¾Æ´Ï¸é ÀÌ SecurityManager°¡ ¾ø´Â »óÅ¿¡¼ ¼öÇàµÇ¹Ç·Î ¾î¶² ÀÛ¾÷À̵çÁö ÀÓÀÇ·Î ÇàÇÒ ¼ö ÀÖ´Â °ÍÀÌ´Ù. ÀÌ·¯ÇÑ ÀÚ¹ÙÀÇ º¸¾È ¸ðµ¨À» "¸ð·¡»óÀÚ(sandbox)"¸ðµ¨À̶ó°í ÇÑ´Ù. Çʿ信 µû¶ó SecurityManager¸¦ ÀÛ¼ºÇÏ¸é ´Ù¸¥ º¸¾È Á¤Ã¥À» Àû¿ë½Ãų ¼ö ÀÖ´Ù. ÀÏ·Ê·Î JDKÀÇ appletviewer°¡ ¼³Á¤Çϱ⠳ª¸§À¸·Î ƯÁ¤ ÆÄÀÏÀ» ÀÐ°í ¾²´Â °ÍÀÌ Çã¿ëµÇ´Â °ÍÀº ³Ý½ºÄÉÀÌÇÁ¿Í °°Àº À¥ ºê¶ó¿ìÀú¿Í SecurityManager°¡ ´Ù¸£±â ¶§¹®ÀÌ´Ù.

¾Õ¼ ¾ð±ÞÇÑ ¹Ù ÀÖÁö¸¸ ÀÚ¹Ù´Â ´ÙÀ½°ú °°Àº ÀÌÀ¯¿¡¼ ³×Æ®¿öÅ©¸¦ ÀÌ¿ëÇÏ´Â ÇÁ·Î±×·¥ÀÇ °³¹ß¿¡ ÀûÇÕÇÏ´Ù.
ÀÚ¹Ù °¡»ó±â°è¿Í ¾ð¾îÀÚüÀÇ ¸íÈ®ÇÑ Á¤ÀÇ·Î Çѹø ÀÚ¹Ù ½ÇÇàȯ°æ(°¡»ó±â°è¿Í ¶óÀ̺귯¸®)ÀÌ ÀÌ½ÄµÇ¸é ¾îµð¼³ª ÀçÄÄÆÄÀϳ»Áö ¼öÁ¤ÀÌ ¾øÀÌ ½ÇÇàÇÒ ¼ö ÀÖ´Ù. ÀϹÝÀûÀ¸·Î ¼ÒÇÁÆ®¿þ¾î °³¹ß½Ã ¿©·¯ Ç÷§ÆûÀ» Áö¿øÇϴµ¥ µå´Â ºñ¿ëÀ» ¾ø¾Ù ¼ö ÀÖ´Ù.
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¿¡¼ Áö¿øÇÏ´Â »õ·Î¿î ±â´ÉµéÀ» »ìÆìº¸µµ·Ï ÇÏÀÚ.
±¹Á¦È´Â ÇÁ·Î±×·¥ÀÇ ÀÛ¼º½Ã »ç¿ëÀÚÀÇ ¹®È³ª °ü½À ȤÀº ¾ð¾î¿¡ µû¶ó Ʋ·ÁÁú ¼ö ÀÖ´Â ºÎºÐÀ» È¿°úÀûÀ¸·Î ºÐ¸®½ÃŰ´Â °ÍÀ» ¶æÇÑ´Ù. ÀÌ·¸°Ô ÀÛ¼ºµÈ ÇÁ·Î±×·¥µéÀº ½±°Ô ƯÁ¤ ³ª¶ó³ª ¾ð¾î¿¡ ¸Â°Ô ¼öÁ¤µÉ ¼ö ÀÖ°Ô µÈ´Ù. ÀÚ¹Ù¿¡¼´Â ÀÌ·¯ÇÑ ±¹Á¦ÈµÈ ÇÁ·Î±×·¥ÀÇ ÀÛ¼ºÀ» ¿ëÀÌÇÏ°Ô Çϱâ À§ÇÑ »õ·Î¿î 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 °´Ã¼¸¦ ¹Þ¾Æ¼ ±×¿¡ ¸Âµµ·Ï ¿òÁ÷¿©¾ß ÇÑ´Ù.
JDK 1.0.2±îÁö´Â ¾ÖÇø´ÀÌ ÇàÇÒ ¼ö ÀÖ´Â ÀÏ¿¡ ¸¹Àº Á¦¾àÀÌ ÀÖ¾ú´Ù. ÆÄÀÏ ÀÔÃâ·ÂÀº ¹°·ÐÀÌ°í ³×Æ®¿öÅ© ¿¬°á±îÁö ¸¶À½´ë·Î ÇÒ ¼ö ¾ø¾ú´Ù. JDK 1.1¿¡´Â ÀüÀÚ¼¸í ¹× ¸Þ½ÃÁö ´ÙÀÌÁ¦½ºÆ®(message digest)±îÁö º¸¾È °ü·Ã API°¡ Ãß°¡ µÇ¾ú°í ÀüÀÚ¼¸íµÈ ¾ÖÇø´Àº ¾ÖÇø´À» ½ÇÇàÇÏ´Â ÂÊ¿¡¼ ÀÎÁõÇÒ °æ¿ì SecurityManager°¡ ¾ø´Â °Í °°ÀÌ ¾î¶°ÇÑ ÀÏÀÌ¶óµµ ÇÒ ¼ö ÀÖµµ·Ï Çã¿ëµÉ ¼ö ÀÖ´Ù. ÀÌ ±â´ÉÀº ¾ÕÀ¸·Î´Â ÀüÀÚ¼¸íÀ¸·Î ÀÎÁöµÈ ´ë»ó¸¶´Ù ±ÇÇÑÀ» º¸´Ù ¼¼¹ÐÇÏ°Ô Á¦¾îÇÒ ¼ö ÀÖµµ·Ï º¸°µÉ ¿¹Á¤À̶ó°í ÇÑ´Ù.
ÀÚ¹ÙÀÇ 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)µî »õ·Î¿î ÄÄÆ÷³ÍÆ®¿Í Ŭ¸³º¸µå¿¡ ´ëÇÑ Áö¿øµµ Ãß°¡ µÇ¾ú´Ù.
ÀÚ¹Ù ¹ÙÀÌÆ®ÄÚµåÀÇ Å©±â°¡ ÀÛ´Ù°í´Â ÇÏÁö¸¸, µ¿Àû ¸µÅ©¶ó´Â Ư¼º»ó ¸Þ½îµå À̸§ µîÀÇ ºÎ°¡ÀûÀÎ Á¤º¸°¡ ¸¹¾ÆÁ®¼ »ç½Ç Ŭ·¡½º ÆÄÀÏÀÇ ÀüüÀûÀÎ Å©±â´Â ¹«½Ã¸øÇÒ Á¤µµ·Î Å©´Ù. ¶ÇÇÑ HTTP ÀÚü°¡ ÇϳªÀÇ Å¬·¡½º¸¶´Ù º°µµÀÇ TCP ¿¬°áÀ» ÇàÇÏ´Â °ü°è·Î Ŭ·¡½ºÀÇ °¹¼ö°¡ ¸¹¾ÆÁö¸¸ Ŭ·¡½º ÆÄÀÏÀÇ °¹¼öµµ ´Ã°í µû¶ó¼ Àü¼Û ¼Óµµµµ ¶³¾îÁö´Â ¹®Á¦°¡ ÀÖ¾ú´Ù. JAR´Â Ŭ·¡½º ÆÄÀÏÀ» Æ÷ÇÔÇÏ¿© À̹ÌÁö ÆÄÀÏ µîÀÇ ¿©·¯°¡Áö ÆÄÀÏÀ» ¹°í ¾ÐÃàÇϰí ÀüÀÚ ¼¸íÇÒ ¼ö ÀÖ´Â ¼ö´ÜÀ» Á¦°øÇÑ´Ù.
°´Ã¼ÁöÇâ ÇÁ·Î±×·¥ÀÇ Æ¯¼º»ó ÇÁ·Î±×·¥À» µÇµµ·Ï ÀÛÀº Ŭ·¡½ºµé·Î ³ª´©°Ô µÇ°í, JDK 1.1¿¡¼´Â ÀÌ³Ê Å¬·¡½º(inner class)¶ó´Â »õ·Î¿î °³³äÀ» ³»¾î ³õ¾Æ Ŭ·¡½º ÆÄÀÏÀ» °¹¼ö°¡ ´Ã¾î³¯ ¼ÒÁö°¡ ³ô¾ÆÁ³À¸¹Ç·Î Àü¼ÛÈ¿À²»óÀ¸·Î º¸¾ÒÀ» ¶§ JAR ÆÄÀÏÀº ¸Å¿ì Áß¿äÇÏ´Ù. ÇöÀç ½ã ¼ÒÇÁÆ®¿¡¼ ¼Ö¶ó¸®½º¿¡ žÀçÇϱâ À§ÇØ ¹ßÇ¥ÇÑ JDK 1.1 JIT ÄÄÆÄÀÏ·¯ ÆÐŰÁö´Â ¾Æ¿¹ Àڹ٠Ŭ·¡½º ¶óÀ̺귯¸®¸¦ JAR·Î ¹¾î¼ Á¦°øÇϰí ÀÖ´Ù.
ÀÌÀü±îÁöÀÇ ÀÚ¹Ù ÀÔÃâ·Â ¶óÀ̺귯¸®ÀÇ ¹®Á¦Á¡Àº À¯´ÏÄÚµåÀÇ ÀÔÃâ·ÂÀ̳ª À¯´ÏÄÚµå¿Í ÀÚ¹Ù°¡ ½ÇÇàµÇ´Â ȯ°æ¿¡¼ »ç¿ëÇÏ´Â ¹®ÀÚ Äڵ尣ÀÇ º¯È¯À» È¿°úÀûÀ¸·Î ´Ù·ê ¼ö ÀÖ´Â ¸Þ½îµå°¡ ¾ø¾ú´Ù´Â °ÍÀ̾ú´Ù. JDK 1.1Àº ¹®ÀÚ ½ºÆ®¸²(character stream) °è¿ÀÇ Å¬·¡½º¸¦ Ãß°¡ÇÏ¿© ½±°Ô À¯´ÏÄÚµå·Î µÈ ÆÄÀÏÀ̳ª µ¥ÀÌÅ͸¦ ÀÔÃâ·ÂÇÒ ¼ö ÀÖµµ·Ï ÇÏ¿´´Ù.
ÀÓÀÇÀÇ Å©±âÀÇ ¼ýÀÚ¸¦ ´Ù·ç±â À§ÇØ BigInteger¿Í BigDecimal Ŭ·¡½º°¡ Ãß°¡ µÇ¾ú´Ù.
°´Ã¼¸¦ ½ºÆ®¸²ÈÇÏ¿© ÆÄÀÏ¿¡ ÀúÀåÇÏ°í ¶Ç Çʿ信 µû¶ó ´Ù½Ã ÀúÀåµÈ ¿ø·¡ °´Ã¼¸¦ º¹¿øÇÏ´Â ±â´ÉÀÌ´Ù. ÇöÀç 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();
¸Þ½îµåÀÇ À̸§À̳ª ÇʵåÀÇ À̸§À» ¹®ÀÚ¿·Î °è»êÇÏ¿© ÇØ´ç ¸Þ½îµå¸¦ È£ÃâÇϰųª Çʵ带 »ç¿ëÇÒ ¼ö ÀÖµµ·Ï ÇÏ´Â ±â´ÉÀÌ´Ù. ÀÚ¹ÙºóÁî µî¿¡¼ »ç¿ëµÇ±â À§Çؼ °³¹ßµÇ¾ú´Ù.
Ŭ·¡½º ³»ºÎ¿¡ Ŭ·¡½º¸¦ Á¤ÀÇÇÏ¿© »ç¿ëÇÒ ¼ö ÀÖ°Ô ÇÏ´Â °ÍÀ¸·Î ¾îµªÅÍ(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++¿¡¼ Ŭ·¡½º¸¦ Áßø½ÃŰ´Â °Í°ú´Â Ʋ¸®´Ù.
C/C++·Î °íÀ¯ Äڵ带 ÀÛ¼ºÇÏ´Â ±Ô¾àÀÌ´Ù. Ç¥ÁØÀ¸·Î Á¦Á¤µÇ¾úÀ¸¹Ç·Î ÃÖ¼ÒÇÑ ÀÚ¹Ù °¡»ó±â°è°¡ ¾î¶»°Ô ±¸ÇöµÇ¾ú³ª¿¡ »ó°ü¾øÀÌ µ¿ÀÏÇÑ °íÀ¯ÄÚµå ¶óÀ̺귯¸®¸¦ ¿¬°áÇÏ¿© »ç¿ëÇÒ ¼ö ÀÖ´Ù´Â Á¡¿¡¼ Áß¿äÇÑ Àǹ̸¦ °¡Áø´Ù. ÇöÀç JDK 1.1ÀÇ AWT µîÀÇ ¶óÀ̺귯¸®µµ ÀÌ JNI¿¡ ÁØÇÏ¿© ÀÛ¼ºµÇ¾úÀ¸¹Ç·Î Ȥ ´©±º°¡ JNI¸¦ Áö¿øÇÏ´Â ÀÚ¹Ù °¡»ó±â°è¸¦ ¸¸µç´Ù¸é º°µµ·Î AWT¸¦ À̽ÄÇÒ Çʿ䰡 ¾øÀÌ °ð¹Ù·Î »ç¿ëÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù. ÀÌ·± °íÀ¯ ÄÚµå ÀÛ¼º ±Ô¾à ¿Ü¿¡ JNI¸¦ »ç¿ëÇϸé ÀÚ¹Ù °¡»ó±â°è¸¦ C/C++ ÇÁ·Î±×·¥ ³»¿¡¼ »ç¿ëÇÒ ¼öµµ ÀÖ´Ù.
ÀÚ¹Ù´Â ¾ÆÁ÷ ¿ÏÀüÈ÷ ¼º¼÷ÇÏÁö´Â ¸øÇß´Ù°í »ý°¢ÇÑ´Ù. ÇÏÁö¸¸, 2³âÀ̶õ ªÀº ½Ã°£ µ¿¾È ¾ó¸¶³ª ¸¹Àº °³¼±ÀÌ ÀÖ¾ú´Â°¡¸¦ »ý°¢ÇÏ¸é ±â´ëÇØ º½Á÷ÇÑ ¸éµéÀÌ ¸¹´Ù°í ÀÚ½ÅÀÖ°Ô À̾߱âÇÒ ¼ö ÀÖ´Ù.
[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)