Java Tutorial and Overview

ÃÖ¼±¿Ï
°æ±âµµ ¾È¾ç½Ã ¸¸¾È±¸ ¾È¾ç 5µ¿ 708-113
¾È¾ç´ëÇб³ Á¤º¸Åë½Å°øÇаú
E-mail : sunchoi@aycc.anyang.ac.kr
URL : http://ice.anyang.ac.kr/~sunchoi/
Abstract:
Java´Â °´Ã¼ÁöÇâ¾ð¾îÀ̸ç, Ç÷§Æû¿¡ Á¾¼ÓµÇÁö ¾Ê´Â °¡»ó¸Ó½ÅÀ» Áö¿øÇÑ´Ù. ¶ÇÇÑ ³×Æ®¿÷À¸·Î ºÎÅÍ Äڵ带 ´Ù¿î·Îµå ¹ÞÀ» ¼ö ÀÖ´Â mobile Äڵ带 Áö¿øÇÒ ¼ö ÀÖ´Ù. º» ³»¿ëÀº ÀϹÝÀûÀÎ JavaÀÇ °³³ä°ú Ư¼º, ±×¸®°í ±¸Çö ȯ°æ¿¡ ´ëÇØ¼­ ¼³¸íÇÑ´Ù. ÀÌ¿Í ÇÔ²² Java¸¦ ´Ù¸¥ °¢µµ¿¡¼­ »ìÆìº»´Ù.
Keywords:
Java, Virtual Machine, Mobile Code, Applet

1. ¼­·Ð

"Java ÇÁ·Î±×·¡¹Ö °³¹ß ȯ°æ(programming language environment)"À» ÁÙ¿©¼­ "Java"¶ó ÇÑ´Ù. Java´Â C ¶Ç´Â C++¿Í °°Àº ÀÏÁ¾ÀÇ ÇÁ·Î±×·¡¹Ö ¾ð¾îÀÌ¸ç ¿¡´Ï¸ÞÀ̼Ç, ³×Æ®¿öÅ©, °ÔÀÓµî ¸ðµç ÀÀ¿ë ÇÁ·Î±×·¥À» °³¹ßÇϱâ À§ÇÑ ÀÏÁ¾ÀÇ µµ±¸ÀÌ´Ù. JavaÀÇ °¡Àå Å« Ư¡Àº Java·Î ÀÛ¼ºµÈ ¸ðµç ÇÁ·Î±×·¥Àº ¾î¶² ȯ°æ¿¡ Á¾¼ÓµÇÁö ¾Ê°í ½ÇÇàµÉ ¼ö ÀÖ´Â "¹ÙÀÌÆ®ÄÚµå(bytecode)"¶ó ºÒ¸®´Â °¡»ó¸Ó½Å(virtual machine) °³³äÀ» µµÀÔÇß´Ù´Â °ÍÀÌ´Ù. ¹°·Ð Java ¾ð¾î ±× ÀÚü¿¡ ´ëÇÑ ÀåÁ¡µµ ÀÖÀ¸³ª Â÷ÈÄ¿¡ ¼³¸íÇϵµ·Ï ÇÑ´Ù.

1.1 ¹ÙÀÌÆ®ÄÚµå(Bytecode)¿Í Java È帧µµ

¾î¶² ÇÁ·Î±×·¡¹Ö ¾ð¾î·Î ÀÛ¼ºµÈ ÇÁ·Î±×·¥Àº ÀÏ´Ü ÄÄÆÄÀÏ °úÁ¤À» °ÅÃļ­ ¸ñÀû ÄÚµå(object code)¸¦ »ý¼ºÇÏ°Ô µÈ´Ù. ÀϹÝÀûÀ¸·Î À̶§ »ý¼ºµÈ ¸ñÀû ÄÚµå´Â ƯÁ¤ ±âÁ¾¿¡ Á¾¼ÓµÈ´Ù. À¥ ºê¶ó¿ìÀúÀÎ ³×Æ®½ºÄÉÀÌÇÁÀÇ °æ¿ì¸¸ º¸¾Æµµ SunÀÇ Solaris 2.x.x, Sun OS 4.x.x ¿Í °°ÀÌ µ¿ÀÏÇÑ Sun Ç÷§Æû¿¡µµ ºÒ±¸ÇÏ°í ¿î¿µÃ¼Á¦ÀÇ Â÷ÀÌ¿¡ µû¶ó »õ·Ó°Ô °³¹ßÇÏ¿©¾ß ÇÑ´Ù. ±×·¯³ª, Java °³¹ß ȯ°æ¿¡¼­´Â ÄÄÆÄÀÏ °úÁ¤ÈÄ¿¡ »ý¼ºµÈ ¸ñÀû Äڵ尡 ¸ðµç ȯ°æ¿¡ Àû¿ëµÉ ¼ö ÀÖµµ·Ï Äڵ带 »ý¼ºÇϴµ¥ À̸¦ "¹ÙÀÌÆ®ÄÚµå"¶ó ÇÑ´Ù. µû¶ó¼­, Java ȯ°æÀº Java ¾ð¾î·Î ºÎÅÍ ¹ÙÀÌÆ®Äڵ带 ¸ÅÇÎÇÏ´Â Java °¡»ó¸Ó½Å(Virtual Machine)°ú ÀνºÆ®·°¼Ç ÁýÇÕÀ» Á¤ÀÇÇϰí ÀÖ´Ù. ÀÌ·¯ÇÑ ¹ÙÀÌÆ®ÄÚµå °³³äÀº °á±¹ "À̵¿¼º ÄÚµå(mobile code)"ÀÇ °³³äÀ̸ç, Java·Î ÀÛ¼ºµÈ ÇÁ·Î±×·¥Àº ´©°¡ ¾îµð¼­ ¾î¶² ȯ°æ¿¡¼­ °³¹ßÇϰųª °ü°è¾øÀÌ ¼öÇàµÉ ¼ö ÀÖ´Â °³³äÀÌ´Ù. Áï, Java¸¦ ÀÌ¿ëÇÏ¸é °¢ ±âÁ¾(PC, ¿öÅ©½ºÅ×À̼Ç, ¸ÅŲÅä½Ãµî)°ú ¿î¿µÃ¼Á¦(Windows95, SunOS, Solaris, MacOSµî)¿¡ ´ëÇÑ º°µµÀÇ ¼ÒÇÁÆ®¿þ¾î¸¦ Á¦°øÇÏÁö ¾Ê¾Æµµ µÈ´Ù. µû¶ó¼­, »õ·Î¿î ÇÁ·Î±×·¥À» °³¹ßÇÒ¶§ À̽ļº(portability)¿¡ µû¸¥ °³¹ß³ë·ÂÀÇ ´ÜÃà»Ó¸¸ ¾Æ´Ï¶ó ¼ÒÇÁÆ®¿þ¾îÀÇ È®»êÀÌ °¡È÷ Æø¹ßÀûÀ¸·Î Áõ°¡ÇÒ °ÍÀÌ´Ù. ±×·¯³ª Java°¡ ¹ÙÀÌÆ®ÄÚµåÀÇ ½ÃÃÊ´Â ¾Æ´Ï´Ù. 1970³â´ë Áß¹Ý ºÎÅÍ 1980³â´ë ÃʹݱîÁö ¹ÙÀÌÆ®ÄÚµå ÇüŸ¦ üÅÃÇß´ø UCSD P-SystemÀº 8ºñÆ® ÄÄÇ»ÅÍ¿¡ ³Î¸® »ç¿ëµÇ¾úÀ¸³ª, ±× 󸮴ɷÂÀÇ ÇѰè·Î Á¦ÇÑµÉ ¼ö ¹Û¿¡ ¾ø¾ú´Ù. ÇöÀç´Â ¹ÙÀÌÆ®ÄÚµå ÇüÅ·Π¼ÒÇÁÆ®¿þ¾î¸¦ ó¸®ÇÏ°í ¹èÆ÷Çϴµ¥ ÃæºÐÇÑ ÄÄÇ»ÆÃ(³×Æ®¿öÅ© Æ÷ÇÔ) ȯ°æÀ» Á¦°øÇϰí

±×¸² 1. ¹ÙÀÌÆ®ÄÚµå »ý¼º°úÁ¤

ÀÖ´Ù. ±×¸² 1.Àº ¹ÙÀÌÆ®ÄÚµå »ý¼º°úÁ¤À» º¸¿©ÁØ´Ù.

Java·Î ÀÛ¼ºµÈ ¿øÃµÄÚµåÀÇ È­ÀϸíÀº È®ÀåÀÚ .java°¡ Ç×»ó ºÙ´Â´Ù. Java ÄÄÆÄÀÏ·¯¿¡ ÀÇÇØ ÄÄÆÄÀÏµÈ ¹ÙÀÌÆ®ÄÚµåÀÇ È­ÀϸíÀº È®ÀåÀÚ .class°¡ ºÙ´Â´Ù. Áï, ¹ÙÀÌÆ®ÄÚµå´Â °´Ã¼ÁöÇâ ¾ð¾î¿¡¼­ ºÎ¸£´Â ÇѰ³ÀÇ Å¬·¡½ºÀÓÀ» ³ªÅ¸³½´Ù. C °³¹ß ȯ°æ¿¡¼­ C ÄÄÆÄÀÏ·¯°¡ C ¾ð¾î·Î °³¹ßµÇ¾úµíÀÌ Java ÄÄÆÄÀÏ·¯ ¶ÇÇÑ Java¸¦ ÀÌ¿ëÇÏ¿© °³¹ßµÇ¾ú´Ù.

1.2 ¾ÖÇø´(applet)

¾ÖÇø´Àº À̵¿¼º ÄÚµåÀÇ °áÁ¤ÆÇÀÌ´Ù. ¾ÖÇø´À̶ó ÇÔÀº "HTML ³»¿¡¼­ ÀÛ¼ºµÈ Java ÇÁ·Î±×·¥ ¶Ç´Â Java¸¦ ó¸®ÇÒ ¼ö ÀÖ´Â À¥ ºê¶ó¿ìÀú³»¿¡¼­ ¼öÇàµÇµµ·Ï ÀÛ¼ºµÈ Java ÇÁ·Î±×·¥" À¸·Î Á¤ÀÇÇÑ´Ù. Áï, ºê¶ó¿ìÀú¿¡¼­ À¥À» °Ë»öÇÒ¶§ HTML ³»¿¡¼­ <applet> À̶ó´Â tag¸¦ ¸¸³ª¸é À̶§ºÎÅͰ¡ Java ÇÁ·Î±×·¥ÀÓÀ» ÀǹÌÇϸç </applet>Àº ±× ³¡À» ÀǹÌÇÑ´Ù. À̶§ ¾ÖÇø´Àº ¼­¹ö¿¡¼­ ÀÌ¹Ì ÄÄÆÄÀÏµÇ¾î ¹ÙÀÌÆ®ÄÚµå·Î »ý¼ºµÇ¾î ÀÖ´Â »óÅ·μ­ ±× ¹ÙÀÌÆ®ÄÚµå´Â À¥ ¼­¹ö·Î ºÎÅÍ ºê¶ó¿ìÀú·Î ´Ù¿î·ÎµùµÇ°í ºê¶ó¿ìÀú´Â ±× ¹ÙÀÌÆ®Äڵ带 ÇØ¼®ÇÑ´Ù. µû¶ó¼­, ºê¶ó¿ìÀú »ç¿ëÀÚ´Â ÀÚ½ÅÀÌ Æ¯Á¤ ÇÁ·Î±×·¥¿¡ ´ëÇÑ Äڵ带 °®Áö ¾Ê°íµµ Áï½Ã ¿øÇÏ´Â ÇÁ·Î±×·¥À» ¼öÇàÇÒ ¼ö Àִ ȹ±âÀûÀÎ °³³äÀÎ °ÍÀÌ´Ù. À̰ÍÀº °á±¹ ¹ÙÀÌÆ®Äڵ尡 Á¦°øÇÏ´Â ÄÚµåÀÇ Á߸³¼º(neutral) ¶§¹®¿¡ °¡´ÉÇÏ´Ù. ±×¸² 2.´Â ¾ÖÇø´ÀÌ ºê¶ó¿ìÀú(Ŭ¶óÀ̾ðÆ®)¿¡¼­ ¼öÇàµÇ´Â °úÁ¤À» º¸¿©ÁÖ¸ç ·±-ŸÀÓ¿¡ ¹ß»ýÇÔÀ» ¾Ë ¼ö ÀÖ´Ù.

±×¸² 2. ¾ÖÇø´ ¼öÇà °úÁ¤°ú Java ȯ°æ

"Ŭ·¡½º ·Î´õ"´Â À¥ ºê¶ó¿ìÀú¿Í ¼­¹ö°¡ °°Àº ½Ã½ºÅÛ¿¡ ÀÖÀ¸¸é ·ÎÄ® È­ÀϽýºÅÛÀ¸·Î ºÎÅÍ ¹ÙÀÌÆ®Äڵ带 ·ÎµùÇÏ°í ´Ù¸¥ ½Ã½ºÅÛ¿¡ ÀÖÀ¸¸é ³×Æ®¿öÅ©¸¦ ÅëÇØ¼­ ´Ù¿î·ÎµùÇÑ´Ù. "¹ÙÀÌÆ®ÄÚµå °ËÁõ±â(verifier)"´Â ·ÎµùµÈ ¹ÙÀÌÆ®ÄÚµåÀÇ ±¸¹®ÀÌ ¸Â´Â°¡¸¦ °Ë»çÇÑ´Ù. ¹ÙÀÌÆ®ÄÚµå´Â ¿©·¯ Java ÄÄÆÄÀÏ·¯¿¡ µû¶ó ´Ù¸¥ °á°ú¸¦ »ý¼ºÇÒ ¼ö ÀÖÀ¸¹Ç·Î À߸øµÈ ÄÄÆÄÀÏ °úÁ¤À» °Ë»çÇÏ´Â °ÍÀÌ´Ù. °ËÁõÀÌ ³¡³¯¶§ ±îÁö "ÀÎÅÍÇÁ¸®ÅÍ"¿¡°Ô ¹ÙÀÌÆ®ÄÚµå´Â Àü´ÞµÇÁö ¾Ê´Â´Ù. ±× ÀÎÅÍÇÁ¸®ÅÍ´Â ¹ÙÀÌÆ®Äڵ带 ÇØ¼®Çϸ鼭 Áï½Ã ¼öÇàÇÑ´Ù. À̶§ Çϵå¿þ¾î Á¾¼ÓµÈ ±â´ÉÀÌ ¿ä±¸µÇ¸ç ·±-ŸÀÓ ½Ã½ºÅÛÀÌ ±× ÀÛ¾÷À» ¼öÇàÇÑ´Ù. ·±-ŸÀÓ ½Ã½ºÅÛÀº POSIX-C¿Í ÀÏÄ¡ÇÏ´Â ANSI C ¾ð¾î·Î ÀÛ¼ºµÈ´Ù.

1.3 ¾ÖÇø´°ú ³×Æ®¿öÅ© ÄÄÇ»ÅÍ

ºê¶ó¿ìÀú¸¦ ÅëÇÑ À¥ÀÇ °Ë»öÀº Á¤ÀûÀΠŬ¶óÀ̾ðÆ®/¼­¹ö ¸ðµ¨ÀÌ´Ù. ¼­¹ö¿¡¼­ Á¦°øÇÏ´Â URLÀ» ÅëÇØ¼­ ÀÚ·á °Ë»öµîÀ» ¼öÇàÇÏ°í ¸¹Àº ±â´ÉµéÀÌ Å¬¶óÀ̾ðÆ®(ºê¶ó¿ìÀú)¿¡¼­ ¿ÜºÎ ºä¾î¸¦ °®Ãß°í ÀÖ¾î¾ß ÇÑ´Ù. ±×·¯³ª ¾ÖÇø´Àº ±× Äڵ尡 ¼­¹ö¿¡¼­ ´Ù¿î·ÎµùµÇ¹Ç·Î Ŭ¶óÀ̾ðÆ®(ºê¶ó¿ìÀú)´Â ´ÜÁö ÀÎÅÍÇÁ¸®Å͸¸ ÀÖÀ¸¸é ¸ðµç Java ÇÁ·Î±×·¥À» ¼öÇà½Ãų¼ö ÀÖ´Ù. ÀÌ °³³äÀº ÃÖ±Ù¿¡ °ü½É ´ë»óÀÌ µÇ°í ÀÖ´Â ³×Æ®¿öÅ© ÄÄÇ»ÅÍÀÇ °³³ä°ú °°´Ù. Áï, ³×Æ®¿öÅ© ÄÄÇ»ÅÍ´Â ¾ÖÇø´ »Ó¸¸ ¾Æ´Ï¶ó ¿î¿µÃ¼Á¦, Åë½Åµî ¸ðµç Äڵ带 ¼­¹ö·Î ºÎÅÍ Ç×»ó ´Ù¿î·ÎµùÇÑ Äڵ带 ÀÌ¿ëÇϱ⠶§¹®¿¡ Ŭ¶óÀÌ¾ðÆ®¿¡ ÇÁ·Î±×·¥ÀÌ ¾ø¾îµµ µÇ´Â ¹«±¸Çö(no implementation) °³³äÀÌ´Ù. ±×¸² 3Àº Java ±¸Á¶ÀÌ´Ù.

±×¸² 3. Java ±¸Á¶

2. Java °³¿ä

1Àå¿¡¼­´Â JavaÀÇ Áß¿äÇÑ Æ¯Â¡ÀÎ ¹ÙÀÌÆ®ÄÚµå¿Í ¾ÖÇø´¿¡ ´ëÇÑ °³³äÀ» »ìÆì º¸¾Ò´Ù. º» Àå¿¡¼­´Â JavaÀÇ Æ¯¼ºÀ» ±â¼úÇÑ´Ù.

2.1 JavaÀÇ ¿ª»ç: ¼û°ÜÁø À̾߱â

Java¸¦ ÀÌÇØÇϱâ À§Çؼ­ ¸ÕÀú ±× ź»ý ¹è°æÀ» »ìÆìº»´Ù. ¾Æ¹«¸® ¶Ù¾î³­ ¿¬±¸µµ ±× ½Ã´ëÀÇ Á¤Ä¡, °æÁ¦, ±â¼úÀûÀÎ »óȲ°ú ÀÏÄ¡ÇÒ¶§ ºñ·Î¼Ò ºûÀ» º¸°ÔµÈ´Ù. JavaÀÇ ÃÖ±Ù °ü½Éµµ °á±¹ À¥ÀÇ Æø¹ßÀûÀÎ È®»êÀÌ ¾ø¾ú´Ù¸é »çÀåµÉ »·ÇÑ ½Ã´ë¸¦ ¾Õ¼­´Â °³³äÀ̾ú´Ù. ƯÈ÷, JavaÀÇ ¼û°ÜÁø À̾߱â´Â ¿ì¸®ÀÇ °³¹ß ȯ°æ Çö½ÇÀ» ´Ù½Ã±Ý µ¹¾Æº¸°Ô ÇÑ´Ù. Java´Â 1990³â ¼± ¸¶ÀÌÅ©·Î½Ã½ºÅÛÁî(»ç)ÀÇ James Gosling¿¡ ÀÇÇØ¼­ ½ÃÀ۵Ǿú°í °¡Á¤¿ë ÀüÀÚÁ¦Ç°(1991³â)°ú ½Ö¹æÇâ TV(1993³â)¿¡ À̸¦ Àû¿ëÇÏ¿´´Ù. ±×·¯³ª ±× ±â¼úÀÇ ¿ì¿ù¼º¿¡µµ ºÒ±¸ÇÏ°í ½ÇÆÐÇÒ »· ÇÑ ÇÁ·ÎÁ§Æ®¿´À¸³ª ³×Æ®½ºÄÉÀÌÇÁ¿¡¼­ Java¸¦ ¼ö¿ëÇÔÀ¸·Î½á ºûÀ» º¸°í ÀÖ´Â ¼ÀÀÌ´Ù. James GoslingÀº IBM¿¡¼­ 1984³â SunÀ¸·Î ¿Å°å°í NeWS À©µµ¿ì ½Ã½ºÅÛ°ú EMACS ¿¡µðÅÍ ÇÁ·ÎÁ§Æ®¿¡ Âü¿©ÇÏ¿´´Ù. 1990³â ÃÊ¿¡ SunÀº °í°¡À̸鼭 ¸¹Àº power¸¦ ÇÊ¿ä·Î ÇÏ´Â ¿öÅ©½ºÅ×ÀÌ¼Ç ½ÃÀ庸´Ù´Â °¡ÀüÁ¦Ç° ½ÃÀå¿¡ Âü¿©Çϱ⸦ ¹Ù·¨´Ù. µû¶ó¼­ °¡Á¤¿ë °¡ÀüÁ¦Ç°À» º¸´Ù ½Å·Ú¼ºÀÖ°í, Àú·ÅÇϰí, Ç¥ÁØÈ­µÇ°í, ´Ü¼øÇϰí, ½Ç½Ã°£À̰í, °³¹ßÇϱ⠽¬¿î ȯ°æÀ» À§ÇÑ Green ÇÁ·ÎÁ§Æ®¿¡ James GoslingÀÌ Âü¿©ÇÏ°Ô µÇ¾ú´Ù. °¡ÀüÁ¦Ç°Àº Èæ¹é°ú Ä÷¯ TVÀÇ backward compatibility°¡ º¸ÀåµÇ°í ±ä ¼ö¸íÀ» °®´Â Ư¼ºÀ» °®´Â´Ù. 1991³â Áß¹Ý, Green ÇÁ·ÎÁ§Æ®¿¡¼­´Â ¾î¶°ÇÑ Ç÷§Æû¿¡µµ Á¾¼ÓµÇÁö ¾Ê´Â °³¹ß ȯ°æÀ» À§Çؼ­ C++¸¦ È®ÀåÇÏ¿´À¸³ª ÃæºÐÄ¡ ¾Ê¾Æ °¡ÀüÁ¦Ç°ÀÇ ´ë±Ô¸ð, ºÐ»ê, ÀÌÁ¾ÀÇ ³×Æ®¿öÅ© ȯ°æ¿¡ ÀûÇÕÇÑ "Oak"¸¦ °³¹ßÇÏ¿´´Ù. 1992³â °¡À»¿¡ SunÀÇ Open Window's ÇÁ·ÎÁ§Æ® Ã¥ÀÓÀÚÀÌ´ø Patrick NaughtonÀ» Ã¥ÀÓÀÚ·Î Oak, Green OS, »ç¿ëÀÚ ÀÎÅÍÆäÀ̽º, Çϵå¿þ¾î¿¡ ´ëÇÑ °üÁ¡¿¡¼­ ¸®¸ðÆ® ÄÜÆ®·Ñ ÇѰ³·Î ¸ðµç °¡Àü Á¦Ç°À» Á¶ÀÛÇÒ¼ö ÀÖ´Â "*7"À̶ó´Â Çϵå¿þ¾î µð¹ÙÀ̽º¸¦ ¸¸µé±â À§Çؼ­ ¾à 75¸íÀÇ ¿¬±¸¿øÀÌ ÅõÀԵǾú´Ù. 1993³â ÃÊ¿¡ ŸÀÓ ¿ö³Ê(»ç)·Î ºÎÅÍ ¼ÂÅé ¹Ú½º ¿î¿µÃ¼Á¦¿Í VOD ±â¼ú¿¡ ´ëÇÑ Á¦¾ÈÀ» ¹Þ°í SunÀº FirstPerson Inc.¸¦ ¼³¸³ÇÏ¿´À¸³ª SGIÀÇ ·Îºñ·Î ÇÁ·ÎÁ§Æ®¸¦ ¹ÞÁö ¸øÇØ 1994³âÃÊ¿¡ ´ëºÎºÐÀÌ Sun InteractiveÀÇ µðÁöÅ» ºñµð¿À µ¥ÀÌÅÍ ¼­¹ö °³¹ß ÆÀ¿¡ ÇÕ·ùÇÏ¿´°í ³ª¸ÓÁö´Â ½Ö¹æÇâ TV¿¡ ´ëÇÑ ¿¬±¸¸¦ °è¼ÓÇÏ¿´À¸³ª ½ÃÀåÀÌ ¼º¼÷µÇÁö ¾Ê¾Ò´Ù. ÇÑÆí ±× ÀϺδ °è¼Ó Oak¸¦ ÀÌ¿ëÇÑ ¿¬±¸¸¦ ÁøÇàÇÏ¿´´Âµ¥ 1993³â µîÀåÇÑ Mosaic °ú 1994³â ³×Æ®½ºÄÉÀÌÇÁÀÇ Æø¹ßÀû Áõ°¡·Î ¹æÇâÀ» ¼±È¸ÇÏ¿© À¥À» ¸ñÇ¥·Î "Liveoak" ÇÁ·ÎÁ§Æ®¸¦ ½ÃÀÛÇØ¼­ Oak¸¦ ÀÌ¿ëÇÑ À¥ ºê¶ó¿ìÀúÀÎ WebRunner(ÈÄ¿¡ HotJava·Î ºÒ¸²)¸¦ 1994 ³â °¡À» ù¹øÂ° µ¥¸ð¸¦ °¡Á³´Ù. ÀÌ °úÁ¤¿¡¼­ Oak¶ó´Â À̸§Àº ¹ö¸®°í James Gosling°ú Arthur van Hoff´Â Java¿Í Java compiler¸¦ °³¹ßÇÏ¿´°í SunÀº 1995³â 5¿ù SunWorld '95¿¡¼­ °ø½ÄÀ¸·Î Java¿Í HotJava¸¦ ¹ßÇ¥ÇÏ¿´´Ù. Java´Â ÃÖÃÊ ¾ËÆÄ ¹öÁ¯À¸·Î Ãâ¹ßÇÏ¿© 1996³â ÇöÀç Á¤½ÄÀ¸·Î ÀÚ¹Ù°³¹ßȯ°æ(JDK1.0.2, Java Developers Toolkit)À» ¹ßÇ¥ÇÏ¿´´Ù. HotJava´Â Java·Î ÀÛ¼ºµÈ À¥ ºê¶ó¿ìÀú·Î¼­ ¾ËÆÄ ¹öÁ¯À¸·Î °³¹ßµÇ¾úÀ¸¸ç ÇöÀç HotJava ÇÁ¸®º£Å¸ ¹öÁ¯À» ¹ßÇ¥Çß´Ù.

2.2 JavaÀÇ Æ¯¼º

JavaÀÇ ±âº» ¸ðµ¨Àº C++ÀÌ¸ç ±âÁ¸ÀÇ Effel, SmallTalk, Objective C, Cedar/Mesa·Î ºÎÅÍ ¸¹Àº ¾ÆÀ̵ð¾î¸¦ ¾ò¾úÀ¸¸ç ±× °á°ú ³×Æ®¿öÅ© ÀåÄ¡·Î ºÎÅÍ À¥, µ¥½ºÅ© Åé¿¡ À̸£´Â ´Ù¾çÇÑ È¯°æ¿¡¼­ Àû¿ëÇÒ ¼ö ÀÖÀ¸¸ç ±× ¸ñÀûÀº 1) ´Ü¼øÇϰí(simple) Ä£¼÷Çϸç(familiar), 2) °´Ã¼ÁöÇâ (object-oriented) ¾ð¾îÀ̰í, 3) ½Ã½ºÅÛ¿¡ µ¶¸³ÀûÀ̰í(architecture neutral, portable, robust), 4) ÀÎÅÍÇÁ¸®Æ® ÇüÀ̰í(interpreted) µ¿ÀûÀ̸ç(dynamic), 5) ¾ÈÀü¼ºÀ» º¸ÀåÇϰí(secure), 6) ¸ÖƼ½º·¹µå¸¦ Áö¿øÇϰí(multithread), 7) ´Ù¸¥ ¾ð¾î¿Í ºñ±³ÇÏ¿© °í¼º´ÉÀÌ´Ù(high performance).

2.2.1 ´Ü¼ø¼º(simple)°ú Ä£¼÷¼º(familiar)

Java¿¡¼­´Â ±âÁ¸ÀÇ C¸¦ ¹è¿ì´Â ³ë·Â°ú C++¿Í °°Àº °´Ã¼ÁöÇâ¾ð¾î¿¡ °ÅÀÇ »ç¿ëµÇÁö ¾Ê°Å³ª È¥µ¿½º·´°Å³ª, ÀÌÇØÇϱ⠾î·Á¿î ºÎºÐÀº »ý·«ÇÏ¿´´Ù. ¶ÇÇÑ ±âÁ¸ÀÇ C¿Í C++¿Í À¯»çÇϱ⠶§¹®¿¡ ½±°Ô ÀÌ¿ëÇÒ ¼ö ÀÖ´Ù. Java ¾ð¾î´Â ÀÏ¹Ý ¾ð¾î¿Í ¸¶Âù°¡Áö·Î ÁÖ¼®(//, /* */, //* */), ÇÁ¸®¹ÌƼºê µ¥ÀÌÅÍ Å¸ÀÙ(integer, floting point, character, boolean, string), ¼öÄ¡¿Í °ü°èÇü ¿¬»êÀÚ( ++, --, !, ~, *, /, %, +, -, <<, >>, >>>, <>, <=, >=, ==, !=, &, |, &&, ||, =, *=, +=, -=, /=, %=), ¹è¿­([]), multi-level break(if else, switch, for, while, do while, break, continue, try-catch)¸¦ Á¦°øÇÑ´Ù. ƯÈ÷, C¿Í C++¿¡¼­´Â ¸Þ¸ð¸®¸¦ ÇÒ´ç ¹Þ°Å³ª(memory allocation) ÇØÁ¦ÇÒ¶§(release) Á÷Á¢ ±¸ÇöÀÚ°¡ ÇÁ·Î±×·¥¿¡ ¸íÈ®È÷ ÀÛ¼ºÇØ¾ß ÇÏÁö¸¸ Java¿¡¼­´Â ÀÚµ¿ÀûÀÎ ¸Þ¸ð¸® °ü¸®¸¦ ¼öÇàÇÑ´Ù. Áï, C¿¡¼­ÀÇ malloc°ú free¿Í °°Àº ÇÔ¼ö¸¦ ÀÌ¿ëÇÒ Çʿ䰡 ¾ø´Ù. ÀÌ·¯ÇÑ ¸Þ¸ð¸®ÀÇ Ã³¸®(garbage collection)´Â »ç¿ëÀÚ°¡ ½¬°í ÀÖ´Â(idle) »óÅ¿¡¼­ ¼öÇàÇϹǷΠ±× È¿°ú°¡ Å©´Ù. C ¿Í C++¿¡¼­ Á¦°ÅµÈ JavaÀÇ ±â´ÉµéÀº ´ÙÀ½°ú °°´Ù:

2.2.2 °´Ã¼ÁöÇâ(object-oriented)

°´Ã¼ÁöÇâ¿¡ ´ëÇÑ °³³äÀº ´Ù¾çÇÑ ºÐ¾ß¿¡¼­ »ç¿ëµÇ°í ÀÖÀ¸¹Ç·Î ÀÚ¼¼ÇÑ ³»¿ëÀº »ý·«ÇÑ´Ù. "Ŭ·¡½º"´Â "µ¥ÀÌÅÍ"¿Í ±× µ¥ÀÌÅÍ»óÀÇ "µ¿ÀÛ(operation)"À» Æ÷ÇÔÇÑ µ¥ÀÌÅÍ Å¸ÀÙÀ» ¸»ÇÑ´Ù. ¿©±â¼­ µ¿ÀÛÀº ÇÔ¼ö(function)¸¦ °¡¸®Å²´Ù. "°´Ã¼"¶õ Ŭ·¡½º°¡ ±¸Ã¼È­µÈ °æ¿ì, Áï ÀνºÅϽº¸¦ ¸»ÇÑ´Ù. "¸Þ½îµå(method)"´Â Ŭ·¡½ºÀÇ ÇÔ¼ö(function)/µ¿ÀÛ(operation)/ÇàÀ§(behavior)À» °¡¸®Å²´Ù. Ŭ·¡½º´Â »óÀ§ Ŭ·¡½º(superclass)·Î ºÎÅÍ »óÅÂ(state)¿Í ÇàÀ§¸¦ »ó¼Ó¹ÞÀ¸¸ç À̰ÍÀº ÇÁ·Î±×·¡¹ÖÀ» ±¸Á¶È­´Âµ¥ ¸Å¿ì °­·ÂÇÑ ¼ö´ÜÀ» Á¦°øÇÑ´Ù. µû¶ó¼­, ¸ðµç Ŭ·¡½º´Â ¾î¶² Ŭ·¡½º·Î ºÎÅÍ ±× Ư¼ºÀ» ºÎ¿©¹Þ°í À̸¦ ÀÌ¿ëÇϴµ¥ À̸¦ Ŭ·¡½º °èÃþ±¸Á¶·Î¼­ ³ªÅ¸³»°Ô µÈ´Ù. ±×¸² 4´Â C·Î ÀÛ¼ºµÈ ÇÁ·Î±×·¥°ú °´Ã¼ÇüÅ·ΠÀÛ¼ºµÈ ÇÁ·Î±×·¥À» º¸¿©ÁØ´Ù.

          struct t1 {                       // DATA
              int id;                        int id;
              char keydata[100];             char keydata[100];
          };
                                             // METHOD 
          load_record(struct t1 *r);         load();
          store_record(struct t1 *r);        store();
          print_record(struct t1 *r);        print();

                  °´Ã¼ Àü                     °´Ã¼ ÈÄ

                        ±×¸² 4. °´Ã¼ÀÇ ÇÑ ¿¹

°´Ã¼ÁöÇâ ¼³°è´Â ÀÎÅÍÆäÀ̽ºÀÇ ¸íÈ®ÇÑ Á¤ÀÇ¿Í ¼ÒÇÁÆ®¿þ¾îÀÇ Àç»ç¿ëÀ» Á¦°øÇÑ´Ù. ƯÈ÷ ºÐ»ê Ŭ¶óÀ̾ðÆ®-¼­¹ö ¸ðµ¨¿¡ ¾ÆÁÖ ÀûÇÕÇÑ ¸ðµ¨ÀÌ´Ù. Áï, ¾îµð¼±°¡ »ý¼ºµÈ °´Ã¼´Â ³×Æ®¿öÅ©¸¦ ÅëÇØ¼­ Àü´ÞµÇ°í ¾îµð¼±°¡ ÀúÀåµÇ¾î ÀÖ´Ù°¡ ÀÛ¾÷½Ã¿¡ ÃßÃâÇÏ¿© ÀÌ¿ëÇÏ°Ô µÈ´Ù. Java ¿¡¼­ÀÇ °´Ã¼ÁöÇâ ±â´ÉµéÀº Eiffel, SmallTalk, Objective C, C++ÀÇ ÀåÁ¡À» ÀÌ¿ëÇÏ¿´´Ù. ƯÈ÷, C++·Î ºÎÅÍ °´Ã¼ ¸ðµ¨À» È®ÀåÇÏ¿´°í ¾ÕÀå¿¡¼­ ±â¼úÇÑ ¸¹Àº ±â´ÉµéÀº Á¦°ÅÇÏ¿´´Ù. Java ¿¡¼­ Á¦°øÇÏ´Â °´Ã¼ÁöÇâÀº ÃÖ¼ÒÇÑ ´ÙÀ½ 4°¡Áö Ư¼ºÀ» Áö¿øÇÑ´Ù.

2.2.3 Á߸³¼º(architecture neutral), À̽ļº(portable), °ß°í¼º(robust)

³×Æ®¿öÅ©ÀÇ Æø¹ßÀûÀÎ Áõ°¡´Â ÄÄÇ»ÅÍ¿¡¼­ ¼öÇàµÇ´Â ÀÀ¿ë ¶Ç´Â ÀÀ¿ë ÀϺΰ¡ ´Ù¾çÇÑ ÄÄÇ»ÅÍ ½Ã½ºÅÛ, ´Ù¾çÇÑ Çϵå¿þ¾î ±¸Á¶, ´Ù¾çÇÑ ¿î¿µÃ¼Á¦, ´Ù¾çÇÑ À©µµ¿ì ½Ã½ºÅÛ¿¡ ½±°Ô À̽ĵDZ⸦ ¿ä±¸ÇÑ´Ù. ±×·¯³ª, ±âÁ¸ÀÇ ¹æ¹ýÀº ƯÁ¤ ¸ñÀû ½Ã½ºÅÛ¿¡ Á¾¼ÓµÈ ¼ÒÇÁÆ®¿þ¾î¸¦ °³¹ßÇÏ°í ±× ÀÌÁøÄÚµå(binary code)µéÀ» ¹èÆ÷ÇÏ¿´À¸¹Ç·Î ÀÚ½ÅÀÇ ±âÁ¾¿¡ ¸Â´Â ¼ÒÇÁÆ®¿þ¾î°¡ ³ª¿Ã ¶§±îÁö ±â´Ù·Á¾ß¸¸ ÇÏ¿´´Ù. ÀÌ·¯ÇÑ ¹®Á¦¸¦ ÇØ°áÇϱâ À§ÇÑ ¹æ¹ýÀÌ Æ¯Á¤ ½Ã½ºÅÛ¿¡ Á¾¼ÓµÇÁö ¾Ê´Â ÀÌÁøÄÚµå Çü½ÄÀ̸ç À̸¦ "±âÁ¾ Á߸³(architecture neutral)"À̶ó ÇÑ´Ù. À̸¦ ÇØ°áÇÑ °ÍÀÌ ¹ÙÀÌÆ®ÄÚµåÀÌ´Ù. Java ÄÄÆÄÀÏ·¯´Â ƯÁ¤ ¸Ó½ÅÄڵ带 »ý¼ºÇÏÁö ¾Ê°í »óÀ§ ´Ü°èÀÇ ÀÏÁ¾ÀÇ °¡»óÀÇ ¸Ó½Å µ¶¸³ÀûÀÎ ÄÚµåÀÎ ¹ÙÀÌÆ®Äڵ带 »ý¼ºÇÑ´Ù. ÀÎÅÍÇÁ¸®Æ®µÈ ¹ÙÀÌÆ®ÄÚµå ¹æ¹ýÀÇ Å« ÀåÁ¡Àº ÄÄÆÄÀÏµÈ Java ÇÁ·Î±×·¥ÀÌ Java ÀÎÅÍÇÁ¸®ÅÍ¿Í ·±-ŸÀÓ ½Ã½ºÅÛÀÌ ±¸ÇöµÈ ¾î¶² ½Ã½ºÅÛ¿¡µµ À̽Ä(portable)µÉ ¼ö ÀÖ´Ù´Â °ÍÀÌ´Ù. ±âÁ¸ÀÇ C ¿Í C++·Î ÇÁ·Î±×·¡¹ÖÀ» ÇÒ¶§ ÇÁ·Î±×·¡¸Ó´Â ½Ã½ºÅÛ¿¡ Á¾¼ÓÀûÀÎ »çÇ׿¡ ´ëÇÏ¿© º°µµÀÇ ±¸ÇöÀ» ¿ä±¸ÇÑ´Ù. Java¿¡¼­´Â ¸ðµç Ç÷§Æû¸¶´Ù µ¥ÀÌÅÍ Å¸ÀÙÀ» »õ·Ó°Ô Àû¿ëÇÏ´Â °ÍÀ» Á¦°ÅÇϱâ À§ÇÏ¿© ´ÙÀ½°ú °°ÀÌ ¸ðµç ÇÁ¸®¹ÌƼºê µ¥ÀÌÅÍ Å¸ÀÙ°ú ±× ÇàÀ§¸¦ Á¤ÀÇÇϰí ÀÖÀ¸¸ç ¸ðµç Java ±¸Çö¿¡ Ç¥ÁØÀÌ´Ù.
     byte        8-bit ÀÌÁøº¸¼ö
     short       16-bit ÀÌÁøº¸¼ö
     int         32-bit ÀÌÁøº¸¼ö
     long        64-bit ÀÌÁøº¸¼ö
     float        32-bit IEEE 754 ºÎµ¿Á¡
     double      64-bit IEEE 754 ºÎµ¿Á¡
     char        16-bit Unicode ¹®ÀÚ
Java´Â °ß°íÇÑ(robust) ¾ð¾îÀÌ´Ù. Java´Â C¿Í °°Àº ¹¬½ÃÀû(implicit)ÀΠŸÀÙ ¼±¾ðÀ» Çã¿ëÇÏÁö ¾Ê´Â °­·ÂÇÑ Å¸ÀÙ ¾ð¾îÀÌ´Ù. µû¶ó¼­, ÄÄÆÄÀÏ ½Ã°£¿¡ ´ëºÎºÐÀÇ Å¸ÀÙ ¿¡·¯¸¦ ¹ß°ßÇÏ¿© ½ÇÇà½Ã°£(run-time)¿¡ ¹ß»ýÇÏ´Â ¿¡·¯¸¦ ÃÖ¼ÒÈ­ÇÑ´Ù. C/C++¿Í JavaÀÇ Å« Â÷ÀÌ´Â Java¿¡¼­´Â Æ÷ÀÎÅÍ ¹æ½Ä ´ë½Å¿¡ ¹è¿­(array)¸¸À» °®±â ¶§¹®¿¡ Æ÷ÀÎÅÍ¿¡ ÀÇÇØ ¸Þ¸ð¸®°¡ Áߺ¹µÇ°í µ¥ÀÌÅͰ¡ ±úÁö´Â °¡´É¼ºÀ» Á¦°ÅÇÑ´Ù.

2.2.4 ÀÎÅÍÇÁ¸®Æ®µÇ°í( interpreted) ¿Í µ¿ÀûÀÓ(dynamic)

±âÁ¸ÀÇ ¼ÒÇÁÆ®¿þ¾î °³¹ßÁÖ±â(life-cycle)´Â ¿¡µðÆ®-ÄÄÆÄÀÏ-¸µÅ©-·Îµå-·± °úÁ¤À» °ÅÄ¡¸ç ÄÄÆÄÀÏ ½Ã°£¿¡ ¸ðµç ¿¡·¯¸¦ ãÁö ¸øÇß´Ù. Javaȯ°æ¿¡¼­´Â ¸ðµç Çϵå¿þ¾î¿Í ¿î¿µÃ¼Á¦¿¡¼­ Java ÀÎÅÍÇÁ¸®Å͸¦ ¿ä±¸ÇÏÁö¸¸ Çѹø ±× Java ÀÎÅÍÇÁ¸®ÅÍ¿Í ·±-ŸÀÓ ½Ã½ºÅÛÀ» °®Ãß¸é ¸ðµç Java ÇÁ·Î±×·¥À» ½ÇÇà½Ãų ¼ö ÀÖ´Ù. Java¿¡¼­ ¸µÅ©´Â »õ·Î¿î Ŭ·¡½º¸¦ ·ÎµùÇÏ´Â °úÁ¤À» ÀǹÌÇÑ´Ù. JavaÀÇ À̽ļº°ú ÀÎÅÍÇÁ¸®Æ®µÇ´Â Ư¼ºÀº ¸Å¿ì µ¿ÀûÀÎ ½Ã½ºÅÛÀ» Á¦°øÇÑ´Ù. Ŭ·¡½º´Â ¿ä±¸ÇÏ´Â ½ËÁ¡¿¡ ³×Æ®¿öÅ©·Î ºÎÅÍ ´Ù¿î·ÎµùµÇ¾î ¸µÅ©µÉ ¼öµµ ÀÖ´Ù. JavaÀÇ ¶Ç ÇѰ¡Áö Ư¡Àº C++¿Í ´Þ¸® ¼öÆÛ-Ŭ·¡½º ¹®Á¦°¡ ¹ß»ýÇÏÁö ¾Ê´Â´Ù. C++¿¡¼­´Â Ŭ·¡½º¿¡ »õ·Î¿î ¸Þ½îµå (method)¿Í ÀνºÅϽº(instance)¸¦ Ãß°¡ÇÏ¸é ±× Å¬·¡½º¸¦ ÂüÁ¶ÇÑ ¸ðµç Ŭ·¡½º´Â ´Ù½Ã ÀçÄÄÆÄÀÏÀ» ¿ä±¸ÇÏÁö¸¸ Java´Â Ŭ·¡½º ¹ÙÀεùÀ» ·±-ŸÀÓ¿¡ ¼öÇàÇÑ´Ù. ¶ÇÇÑ Java´Â ÄÄÆÄÀϽÿ¡ °´Ã¼ÀÇ ÀúÀå¼Ò ¹èÄ¡(storage layout)¸¦ °áÁ¤ÇÏÁö ¾Ê°í ·±-ŸÀӽÿ¡ ÀÎÅÍÇÁ¸®ÅͰ¡ °áÁ¤ÇÑ´Ù.

2.2.5 ¾ÈÀü¼º(security)

Java¿¡¼­ÀÇ ¾ÈÀü¼ºÀº ÀÏ¹Ý ¾Ïȣȭ¿Í´Â ±¸º°µÈ´Ù. Java¿¡¼­´Â Java ÄÄÆÄÀÏ·¯¿Í ·±-ŸÀÓ ½Ã½ºÅÛÀÌ À߸øµÈ Äڵ带 »ý¼ºÇÏ´Â ÀÀ¿ë ÇÁ·Î±×·¡¸Ó¸¦ ¾î¶»°Ô Á¦ÇÑÇÒ °ÍÀΰ¡ÀÇ °üÁ¡¿¡¼­ ¾ÈÀü¼ºÀ» Ãß±¸ÇÑ´Ù. ù¹øÂ° ¹æ¹ýÀº ¾Õ¿¡¼­ ±â¼úÇÑ ¹Ù¿Í °°ÀÌ ¸Þ¸ð¸® ÇÒ´çÀ» ·±-ŸÀÓ¿¡ ½ÇÇàÇÏ°í Æ÷ÀÎÅ͸¦ »ç¿ëÇÏÁö ¾ÊÀ½À¸·Î½á ÄÄÆÄÀÏ Å¸ÀÓ¿¡ »ý¼ºµÈ ¹ÙÀÌÆ®Äڵ尡 ¸Þ¸ð¸®¸¦ ÆÄ±«ÇÏ´Â °ÍÀ» ¸·À» ¼ö ÀÖ´Ù. µÎ¹øÂ°´Â "¹ÙÀÌÆ®ÄÚµå °ËÁõ±â"¸¦ ÀÌ¿ëÇÏ¿© À߸øµÈ ¹ÙÀÌÆ®Äڵ尡 ¼öÇàµÇ±â Àü¿¡ ¹ß°ßÇÏ´Â ¹æ¹ýÀÌ´Ù. ¼¼¹øÂ°´Â "Ŭ·¡½º ·Î´õ"°¡ ¹ÙÀÌÆ®Äڵ带 ·ÎÄ® È­ÀϽýºÅÛ°ú °¢ ³×Æ®¿öÅ©·Î ºÎÅÍ ·ÎµùÇÒ¶§ ¹ß»ýÇÏ°Ô µÉ Ŭ·¡½º(¹ÙÀÌÆ®ÄÚµå)ÀÇ Áߺ¹À» ¹æÁö ÇÒ ¼ö ÀÖ´Â À̸§¿µ¿ª(name space)À» µÎ´Â ¹æ¹ýÀÌ´Ù. ³×¹øÂ°´Â ³×Æ®¿öÅ·¿¡ µû¸¥ ¹®Á¦ÀÌ´Ù. Áï, ºê¶ó¿ìÀú¿Í ¼­¹ö°¡ ´Ù¸¥ ½Ã½ºÅÛ¿¡ ÀÖ´Â °æ¿ì¿¡ ¾ÖÇø´(applet)Àº ¼­¹ö·Î ºÎÅÍ ³×Æ®¿öÅ©¸¦ ÅëÇØ¼­ ºê¶ó¿ìÀú·Î ´Ù¿î·ÎµùµÇ´Âµ¥ À̶§ ¾ÖÇø´ÀÌ Å¬¶óÀÌ¾ðÆ® ½Ã½ºÅÛÀ» ÆÄ±«ÇÒ ¼ö ¾øµµ·Ï Á¦¾àÀ» µÐ´Ù.

Ŭ·¡½º ·Î´õ

¹ÙÀÌÆ®ÄÚµå °ËÁõ±â

ºê¶ó¿ìÁ®¿Í ¾ÈÀü¼º

°á±¹ Java¿¡¼­ ¾ÈÀü¼ºÀ» º¸ÀåÇÑ´Ù´Â Àǹ̴ ¾ð¾î ÀÚü°¡ ¿ÏÀüÇÑ Å¸ÀÙ Á¤ÀǸ¦ ¿ä±¸ÇÏ¿© ÄÄÆÄÀÏ °úÁ¤¿¡ ¸íÈ®ÇÑ ¹ÙÀÌÆ®Äڵ带 »ý¼ºÇÔÀ¸·Î½á À߸øµÈ Äڵ尡 »ý¼ºµÇ´Â °ÍÀ» Å©°Ô ÁÙÀϼö ÀÖ´Ù´Â °ÍÀÌ´Ù. ¶ÇÇÑ ¹ÙÀÌÆ®ÄÚµå °ËÁõ±â°¡ ´Ù½Ã ¹ÙÀÌÆ®Äڵ带 °Ë»çÇϱ⠶§¹®¿¡ ¿ÏÀüÇÑ ¾ÈÀü¼ºÀ» º¸ÀåÇÑ´Ù.

2.2.6 ¸ÖƼ½º·¹µå(multithread) Áö¿ø

"½º·¹µå"¶õ "ÇÑ ÇÁ·Î¼¼½º³»¿¡¼­ µ¶¸³ÀûÀÎ Á¦¾î°¡ °¡´ÉÇÑ È帧"À̶ó°í Á¤ÀÇÇÑ´Ù. º¸Åë execution context ¶Ç´Â lightweight ÇÁ·Î¼¼½º¶ó ÇÑ´Ù. ÀÌ·± ¹®±¸»óÀÇ Á¤ÀÇ¿¡µµ ºÒ±¸Çϰí ÇѰ³ÀÇ ½º·¹µå·Î ±¸¼ºµÈ ÇÁ·Î¼¼½º¿¡¼­ ½º·¹µå¿Í ÇÁ·Î¼¼½ºÀÇ Â÷ÀÌ´Â ¾ø´Ù. ´ÜÁö ¸ÖƼ½º·¹µå¿¡¼­´Â ½º·¹µåµé°£¿¡ ¸Þ¸ð¸®¸¦ °øÀ¯ÇÑ´Ù´Â Â÷ÀÌ´Â ÀÖ´Ù. ¸ÖƼ½º·¹µå´Â ÇÁ·Î¼¼½º°£ Åë½ÅÀÌ º¸´Ù ½±°í ƯÁ¤ Äڵ带 °øÀ¯ÇÔÀ¸·Î½á ºÎÇϸ¦ ÁÙÀÌ´Â lightweight ÇÁ·Î¼¼½º¸¦ Áö¿øÇÑ´Ù. Java ¶ÇÇÑ ÀÌ·¯ÇÑ ¸ÖƼ½º·¹µå ±â´ÉÀ» Áö¿øÇÔÀ¸·Î½á ¼­¹ö·Î ºÎÅÍ µ¥ÀÌÅ͸¦ ´Ù¿î·ÎµùÇϸ鼭 ÆäÀÌÁö¸¦ ³Ñ±â´Â µµÁß¿¡ À½¾ÇÀ» µè°í ¿¡´Ï¸ÞÀ̼ÇÀ» ¼öÇàÇÏ´Â ´ëÈ­Çü ±×·¡ÇÈ ÀÀ¿ë ÇÁ·Î±×·¥À» È¿°úÀûÀ¸·Î °³¹ßÇÒ ¼ö ÀÖ´Ù. Java ½º·¹µå´Â java.lang ÆÐŰÁöÀÇ ÀϺÎÀÎ Thread Ŭ·¡½º¸¦ ±¸ÇöÇÑ °ÍÀÌ´Ù. ÀÌ Thread Ŭ·¡½º´Â ½Ã½ºÅÛ µ¶¸³ÀûÀÎ Java ½º·¹µå¸¦ ±¸ÇöÇÑ °ÍÀÌ¸ç ½ÇÁ¦·ÎÀÇ µ¿ÀÛÀº ½Ã½ºÅÛ¿¡ Á¾¼ÓµÈ´Ù. Java¿¡¼­ »õ·Î¿î ½º·¹µå¸¦ »ý¼ºÇϱâ À§Çؼ­ "new Thread()"¸¦ È£ÃâÇÑ´Ù. Java´Â ¸ÖƼ½º·¹µå¸¦ À§ÇÑ ½º·¹µåÀÇ °ü¸®, ¿ì¼±¼øÀ§ Ã¥Á¤(MIN_PRIORITY¿Í MAX_PRIORITY »çÀÌ), µ¿±âÈ­¸¦ À§ÇÑ Å¬·¡½º¿Í ¸Þ½îµå¸¦ Á¦°øÇϸç Áß¿äÇÑ ¸Þ½îµåµéÀº ´ÙÀ½°ú °°´Ù. ±×¸² 5´Â Java ½º·¹µåÀÇ »óÅÂõÀ̵µÀÌ´Ù. "New Thread" »óÅ´ ½Ã½ºÅÛ ÀÚ¿øÀ» ÇÒ´ç¹ÞÁö ¸øÇÑ ºó Thread °´Ã¼¸¦ ÀǹÌÇÑ´Ù. ±× Thread °´Ã¼´Â start() ¸Þ½îµå¿¡ ÀÇÇØ ½Ã½ºÅÛ ÀÚ¿øÀ» ÇÒ´ç¹Þ°í ½ÇÇàµÇµµ·Ï ½ºÄÉÁ층µÈ´Ù. À̶§ start() ¸Þ½îµå´Â run() ¸Þ½îµå¸¦ È£ÃâÇÑ´Ù. Ư±âÇÒ »çÇ×Àº ½º·¹µå°¡ "Running"ÀÌ ¾Æ´Ñ "Runnable" »óÅ·Π°£´Ù´Â °ÍÀÌ´Ù. RunnableÀÇ Àǹ̴ ½º·¹µå°¡ »ý¼ºµÇ°í ½ÃÀ۵Ǿ ½ÇÁ¦·Î ÇѰ³ÀÇ CPU¸¦ °®´Â ȯ°æ¿¡¼­´Â Áï½Ã ±× CPU¸¦ ÇÒ´ç¹ÞÁö ¸øÇÏ¿© ±â´Ù¸®°í ÀÖ´Â »óŸ¦ ÀǹÌÇÑ´Ù. ½º·¹µå´Â suspend() ¸Þ½îµå, sleep() ¸Þ½îµå, wait() ¸Þ½îµå, I/O ºí·°Å·ÁßÀÇ ÇѰ¡Áö °æ¿ì¿¡ "Not Runnable" »óÅ·Π°£´Ù. Runnable »óÅ·ÎÀÇ º¹±Í´Â resume() ¸Þ½îµå ¶Ç´Â Á¶°Çº¯¼öµéÀÇ »óŸ¦ ¾Ë¸®´Â notify()/notyfyAll() ¸Þ½îµå, ¶Ç´Â I/O°¡ ÇØÁ¦µÈ °æ¿ì¿¡ ¹ß»ýÇÑ´Ù. ¸¸ÀÏ ½º·¹µåÀÇ ÇöÀç »óŸ¦ ¾Ë±â À§Çؼ­´Â isAlive() ¸Þ½îµå¸¦ ÀÌ¿ëÇϸç New Thread¿Í DeadÀÎ °æ¿ì¿¡´Â "false" °ªÀÌ Runnable°ú Not RunnableÀÎ °æ¿ì¿¡´Â "true" °ªÀÌ ¸®ÅϵȴÙ.

±×¸² 5. Java ½º·¹µåÀÇ »óÅÂõÀ̵µ

2.2.7 °í¼º´É(high performance)

Java °³¹ßȯ°æÀÇ Å« Ư¡Àº Äڵ尡 ¸Å¿ì ÀÛ´Ù´Â °ÍÀÌ´Ù. ÀÎÅÍÇÁ¸®ÅÍ¿Í Å¬·¡½ºÀÇ Å©±â°¡ ¾à 40K ¹ÙÀÌÆ®¸é ÃæºÐÇÏ°í ¸¶ÀÌÅ©·Î Ä¿³Î¿¡¼­ ÀÌ¹Ì Áö¿øÇÏ´Â ±âŸ ¶óÀ̺귯¸®¿Í ½º·¹µå¸¦ À§Çؼ­ Ãß°¡ÀûÀ¸·Î 175K ¹ÙÀÌÆ®¸¸ÀÌ ¿ä±¸µÈ´Ù. ƯÈ÷, ¹ÙÀÌÆ®ÄÚµå ¾ç½ÄÀÌ ¸Å¿ì ´Ü¼øÇÏ¿© ó¸®ÇϱⰡ ½±´Ù.

2.3 Java Application Programming Interface(API)

Java·Î ÀÛ¼ºµÈ ¸ðµç ÇÁ·Î±×·¥Àº ƯÁ¤ Ŭ·¡½º¸¦ »ý¼ºÇÑ´Ù. Java´Â ÇÁ·Î±×·¡¸Ó¿¡°Ô ´Ù¾çÇÑ Å¬·¡½º¸¦ Á¦°øÇϴµ¥ ÀÌ Å¬·¡½ºµé°ú ÀÎÅÍÆäÀ̽ºµéÀÌ ¸ð¿©¼­ ƯÁ¤ ÆÐŰÁö°¡ µÈ´Ù. Java API´Â ÆÐŰÁö(pacakge)¿¡ ´ëÇÑ ÇÁ·Î±×·¡¹Ö ÀÎÅÍÆäÀ̽º¸¦ ¸»ÇÑ´Ù. ±×¸² 6Àº ÇÑ ÆÐŰÁö¸¦ ±¸¼ºÇÏ´Â °èÃþµµ¸¦ º¸¿©ÁØ´Ù.

±×¸² 6. ÆÐŰÁö °èÃþµµ

Java API´Â Core ¶óÀ̺귯¸®¿Í Standard Extension ¶óÀ̺귯¸®·Î ºÐ·ùµÈ´Ù.

ÇöÀç ´ÙÀ½°ú °°Àº Java API°¡ Á¤ÀǵǾî ÀÖ´Ù.

2.3.1 JDK 1.0.2 API

JDK 1.0.2´Â Ŭ·¡½ºµéÀÇ Æ¯¼º¿¡ µû¶ó ´ÙÀ½ 8 Á¾·ùÀÇ API ÆÐŰÁö(¹ÙÀδõ 3±Ç ºÐ·®)¸¦ Á¦°øÇÑ´Ù. Core APIÀÌ´Ù.

2.3.2 JDK 1.1 API(Preview)

JDK 1.1 API´Â Java Developments KitÀÇ ´ÙÀ½ ¹öÁ¯À¸·Î JDK 1.0.2º¸´Ù ±â´É, ¼º´É, ±×¸®°í ÁúÀûÀ¸·Î È®ÀåµÈ ¹öÁ¯ÀÌ´Ù. JAR È­ÀÏ, ±¹Á¦È­, ¾Ïȣȭ, AWT È®Àå, ³×Æ®¿÷ ±â´É È®Àå, RMI(Remote Method Invocation), Object Serialization, Reflection, JDBC(Java Database Connectivity), »õ·Î¿î native method, ¼º´É Çâ»ó, ±âŸ Byte, Short, Void Ŭ·¡½º Ãß°¡, ¹®¼­»óÀÇ ÁÖ¼®À» À§ÇÑ @deprecated tag µîÀÌ Á¦°øµÈ´Ù. Core API ÀÌ´Ù.

2.3.3 Java Enterprise API

Java Enterprise API´Â µ¥ÀÌÅÍ º£À̽º¿Í ±âŸ ÀÀ¿ë¿¡ Á¢¼ÓÇÒ ¼ö ÀÖµµ·Ï ÇÑ´Ù. À̵é API¿Í ÇÔ²², °³¹ßÀÚµéÀº ±â¾÷ü³»ÀÇ ¾î¶² ¿î¿µÃ¼Á¦ ¶Ç´Â Çϵå¿þ¾î Ç÷§Æû¿¡¼­ ½ÇÇàµÇ´Â Java·Î µÈ ºÐ»ê Ŭ¶óÀ̾ðÆ®/¼­¹ö ¾ÖÇø´ ¶Ç´Â ÀÀ¿ëÀ» ±¸ÃàÇÑ´Ù. ÇöÀç JDBC, Java IDL, Java RMI°¡ ÀÖ´Ù.

2.3.4 Java Server API

Java Server API´Â Java¸¦ ÀÌ¿ëÇÑ ÀÎÅÍ³Ý ¶Ç´Â ÀÎÆ®¶ó³Ý ¼­¹ö¸¦ ±¸ÃàÇϱâ À§ÇÑ ÇÁ·¹ÀÓ¿÷À» Á¦°øÇÑ´Ù. Áï, API´Â °³¹ßÀÚ°¡ Java 'servlets(»ç¿ëÀÚ°¡ ³×Æ®¿÷ ¶Ç´Â ¼­¹ö¸¦ ½ÇÇà½Ã۱â À§Çؼ­ uploadÇÏ´Â ½ÇÇà ÇÁ·Î±×·¥)À» »¡¸® °³¹ßÇϱâ À§Çؼ­ ¿ä±¸µÇ´Â ¼­¹ö¿Í °ü¸® ½Ã½ºÅÛ ÀÚ¿øÀ¸·ÎÀÇ ÀÏÁ¤ÇÏ°í °íÀ¯ÇÑ Á¢±Ù ¹æ¹ýÀ» Á¦°øÇÑ´Ù. Standard Extension API ÀÌ´Ù.

2.3.5 Java Security API

Java Security API´Â °³¹ßÀÚµéÀÌ ½±°í ¾ÈÀüÇÏ°Ô ¾ÖÇø´°ú ÀÀ¿ë¿¡ ¾Ïȣȭ ±â´ÉÀ» Æ÷ÇÔÇϵµ·Ï ÇÏ´Â ÇÁ·¹ÀÓ¿÷ÀÌ´Ù. Digital signature, encryption, authentication ±â´ÉÀ» Æ÷ÇÔÇÑ´Ù. ¾ÆÁ÷ API´Â Á¦°øµÇÁö ¾Ê´Â´Ù.

2.3.6 Java Beans API

Java Beans API´Â ¼ÒÇÁÆ®¿þ¾î ÄÞÆ÷³ÍÆ®¸¦ À§ÇÑ Æ÷Åͺí API¸¦ Á¦°øÇÑ´Ù. Áï, Java Bean ÄÞÆ÷³ÍÆ®´Â MSÀÇ OLE/COM/Active-X, OpenDoc, ³Ý½ºÄÉÀÌÇÁÀÇ LiveConnect¿Í °°Àº ±âÁ¸ ÄÞÆ÷³ÍÆ® ±¸Á¶¿¡ plug µÉ ¼ö ÀÖ´Ù.

2.3.7 Java Commerce API

Java Commerce API´Â À¥»ó¿¡ ±¸¸Å¿Í ÀçÁ¤¿¡ °üÇÑ API¸¦ Á¦°øÇÑ´Ù. Ãʱâ ÄÞÆ÷³ÍÆ®´Â JavaWallet ÀÌ´Ù. JavaWalletÀº ½Å¿ë Ä«µå, ÀüÀÚ È­Æó Æ®·£Àè¼ÇÀ» À§ÇÑ Å¬¶óÀ̾ðÆ®ÃøÀÇ ÇÁ·¹ÀÓ¿÷À» Á¤ÀÇÇÏ°í ±¸ÇöÇÑ´Ù. Core/Standard Extension API ÀÌ´Ù.

2.3.8 Java Management API

Java Management API´Â ÀÎÅÍ³Ý»ó¿¡ enterprise networkÀ» °ü¸®ÇÒ ¼ö ÀÖ´Â ¾ÖÇø´À» ±¸ÃàÇϱâ À§ÇÑ java °´Ã¼¿Í ¸Þ½îµå¸¦ Á¦°øÇÑ´Ù. SunSoft¸¦ ºñ·Ô 19°³ÀÇ È¸»ç°¡ Âü¿©ÇÏ¿´´Ù. Standard Extension APIÀÌ´Ù.

2.3.9 Java Media API

°³¹ßÀÚ¿Í »ç¿ëÀÚ°¡ À¥»ó¿¡¼­ ´Ù¾çÇÑ ¹Ìµð¾î¸¦ ½±°Ô ÀÌ¿ëÇÒ ¼ö ÀÖµµ·Ï ÇÑ´Ù.

2.3.10 Java Embedded API

¾ÆÁ÷Àº ¿Ï¼ºµÇÁö ¾Ê¾Ò´Ù. Java API°¡ ¾î¶»°Ô embedded device¿¡ Àû¿ëµÉ °ÍÀΰ¡¸¦ ¸í½ÃÇÑ´Ù. À̰ÍÀº java.lang, java.util, ±×¸®°í java.ioÀÇ ÀϺο¡ ±Ù°ÅÇÏ¿© ÃÖ¼Ò embedded API ¸¦ Æ÷ÇÔÇÑ´Ù.

3. Java °³¹ßȯ°æ(JDK: The Java Developers Kit)

Java ÇÁ·Î±×·¡¹ÖÀ» À§ÇÑ Ãֱ٠ȯ°æÀº JDK1.0.2 ÀÌ´Ù. JDK¿¡¼­ Á¦°øÇÏ´Â µµ±¸¸¦ »ç¿ëÇϱâ À§Çؼ­´Â ¸ÕÀú ȯ°æÀ» ÁöÁ¤ÇØ¾ß ÇÑ´Ù. ù°·Î JDK¿¡¼­ Á¦°øÇÏ´Â API Ŭ·¡½ºµéÀÌ ÀÖ´Â µð·ºÅ丮(path)¸¦ "setenv CLASSPATH pathname:pathname:.."·Î ÁöÁ¤ÇØ¾ß ÇÑ´Ù. Java ÀÎÅÍÇÁ¸®ÅÍ´Â ¹ÙÀÌÆ®Äڵ带 ó¸®Çϸ鼭 ÇÊ¿äÇÑ Å¬·¡½ºµéÀ» ÁöÁ¤µÈ path·Î ºÎÅÍ Ã£´Â´Ù. ¶ÇÇÑ µ¶ÀÚÀûÀ¸·Î °³¹ßµÈ Ŭ·¡½º¿¡ ´ëÇØ¼­µµ À§Ä¡ÇÑ µ¥¸¯Å丮ÀÇ path¸¦ ÁöÁ¤Çϸé ÀÎÅÍÇÁ¸®ÅÍ´Â ÁöÁ¤µÈ ¼ø¼­´ë·Î ã´Â´Ù. JDK1.0.2¿¡¼­ Java ÇÁ·Î±×·¡¹ÖÀ» À§ÇÑ µµ±¸µéÀº ´ÙÀ½°ú °°´Ù.

3.1 Java ÇÁ·Î±×·¡¹Ö

Java ÇÁ·Î±×·¥Àº Java ÀÀ¿ë(application)°ú Java ¾ÖÇø´À¸·Î ±¸ºÐµÈ´Ù. Java ÀÀ¿ëÀº µ¶ÀÚÀûÀÎ Java ÇÁ·Î±×·¥À¸·Î main()ÀÌ ÀÖ´Ù. ¾ÖÇø´Àº HTML³»¿¡¼­ ÀÛ¼ºµÈ Java ÇÁ·Î±×·¥À¸·Î main()ÀÌ ¾ø´Ù. °£´ÜÇÑ Java ÀÀ¿ë°ú ¾ÖÇø´ÀÇ ¿¹·Î¼­ "HelloWorld" Ŭ·¡½º°¡ ÁÖ·Î »ç¿ëµÈ´Ù.

3.1.1 Java ÀÀ¿ë: HelloWorld

         // HelloWorld.java
         class HelloWorld
         {
              public static void main(String args[])
             {
                 Systems.out.println("Hello World");
             }
         }
HelloWorld Ŭ·¡½º¸¦ HelloWorld.java È­ÀÏ¿¡ ±¸ÇöÇÏ¿© ÀúÀåÇÑ Java ÀÀ¿ëÀÇ ¿¹ÀÌ´Ù. À̶§ Ŭ·¡½º À̸§°ú È­ÀÏ À̸§ÀÌ °°À» ÇÊ¿ä´Â ¾ø´Ù. Java ÀÎÅÍÇÁ¸®ÅÍ(java)´Â ´ÜÁö Ŭ·¡½º À̸§À» ÀÌ¿ëÇÏ¿© ¼öÇàÇÑ´Ù. "//"´Â ÁÖ¼®À» ³ªÅ¸³½´Ù. HelloWorld Ŭ·¡½º´Â main() ¸Þ½îµå¸¦ Æ÷ÇÔÇÑ´Ù. C¾ð¾î¿Í °°ÀÌ ±× main() ¸Þ½îµå´Â ÇÁ·Î±×·¥ÀÌ ½ÃÀ۵Ǵ ÁöÁ¡ÀÌ´Ù. À̶§ main() ¸Þ½îµå´Â public À̶ó´Â Á¢±Ù ¼ö´ÜÀ» Á¦°øÇϴµ¥ ´©±¸³ª(¾îµð¼­³ª) È£ÃâÇÒ ¼ö ÀÖ´Ù´Â ÀǹÌÀÌ´Ù. ¸¸ÀÏ protected·Î ¼±¾ðµÇ¸é subclass¿¡ ÀÇÇØ¼­ È£ÃâµÉ ¼ö ÀÖ°í private´Â ±× Ŭ·¡½º¸¸ÀÌ È£ÃâÇÒ ¼ö ÀÖ´Ù. ¶ÇÇÑ C¿Í °°ÀÌ void´Â ¸®ÅϰªÀÌ ¾øÀ½À» ³ªÅ¸³½´Ù. ¸í·É¾î»óÀÇ ÀÎÀÚ(argument)´Â main() ¸Þ½îµå¿¡°Ô args¶ó´Â ½ºÆ®¸µ ¹è¿­·Î Àü´ÞµÈ´Ù. ÀÌ È­Àϸ¦ ÄÄÆÄÀÏÇϸé HelloWorld.class È­ÀÏÀÌ »ý¼ºµÈ´Ù. ¸í·É¾î "java HelloWorld"¿¡ ÀÇÇØ HelloWorld.classÀÇ ¹ÙÀÌÆ®Äڵ尡 ÇØ¼®µÇ°í 󸮵ȴÙ. C ¾ð¾îÀÎ °æ¿ì¿¡ ¶óÀλóÀÇ Ä¿¸ÇµåÀÇ ÀÎÀÚargs[0]Àº "java"À̰í args[1]Àº "HelloWorld"°¡ main¿¡ Àü´ÞµÇÁö¸¸ Java¿¡¼­´Â "java HelloWorld test"ÀÎ °æ¿ì¿¡ args[0]Àº "test"¸¦ ÀǹÌÇÑ´Ù. System.out.printlnÀº Java API Áß¿¡¼­ java.lang ÆÐŰÁö³»¿¡ system Ŭ·¡½ºÀÇ ÇѰ¡Áö·Î¼­ C¿¡¼­ÀÇ printf°ú °°Àº Àǹ̸¦ °°´Â´Ù. µû¶ó¼­ º» Java ÀÀ¿ëÀÇ °á°ú´Â "Hello World"°¡ È­¸é¿¡ ³ªÅ¸³­´Ù.

3.1.2 HelloWorldApplet: Java ¾ÖÇø´

¾Æ·¡ ¿¹´ÂHTML ³»¿¡¼­ HelloWorldApplet Ŭ·¡½º¸¦ Æ÷ÇÔÇÑ Java ¾ÖÇø´ÀÇ ¿¹ÀÌ´Ù. Java ¾ÖÇø´ÀÌ ¼öÇàµÇ±â À§Çؼ­´Â ¸ÕÀú Java ¿øÃµÄÚµåÀÎ HelloWorldApplet.java È­ÀÏÀ» ÄÄÆÄÀÏÇØ¾ß ÇÑ´Ù. ´ÙÀ½¿¡ ±× ¾ÖÇø´À» Æ÷ÇÔÇÑ HTML È­ÀÏÀ» ¸¸µé¾î¾ß ÇÑ´Ù. À¥ ºê¶ó¿ìÀú°¡ HTML È­ÀÏ¿¡¼­ <APPLET> ű×À» ¸¸³ª¸é ¾ÖÇø´ÀÇ ½ÃÀÛÀÓÀ» ¾È´Ù. "codebase"´Â ¾ÖÇø´ÀÌ ¾îµð¿¡ Àִ°¡¸¦ ³ªÅ¸³»´Âµ¥ µðÆúÆ® path´Â "setenv CLASSPATH"¿¡ Á¤ÀÇµÈ µð·ºÅ丮ÀÌ´Ù. ¿©±â¼­´Â µðÆúÆ® µð·¹Å丮 ¾Æ·¡¿¡ ÀÖ´Â classes µð·ºÅ丮¿¡ ÀÖ´Ù´Â ÀǹÌÀÌ´Ù. "code"´Â ãÀ» Ŭ·¡½º È­ÀÏ À̸§À» °¡¸®Å²´Ù. HelloWorld.class È­ÀÏÀ» ãÀ¸¸é ±× ¹ÙÀÌÆ®ÄÚµå´Â ³×Æ®¿öÅ©¸¦ ÅëÇØ¼­ ¶Ç´Â ·ÎÄ® È­ÀϽýºÅÛÀ¸·Î ºÎÅÍ ºê¶ó¿ìÀú¿¡°Ô ·ÎµùµÈ´Ù. À̶§ ºê¶ó¿ìÀú³»¿¡¼­ ¾ÖÇø´ÀÌ ¼öÇàµÉ ¿µ¿ªÀ» "width"¿Í "height"·Î¼­ ÁöÁ¤ÇØ¾ß ÇÑ´Ù. ¶ÇÇÑ ÆÄ¶ó¹ÌÅ͸¦ ¾ÖÇø´¿¡ Àü´ÞÇÒ ¼ö°¡ Àִµ¥ "paramname"¿¡ À̸§À» ¸í½ÃÇϰí "value"¿¡ ±× °ªÀ» ¸í½ÃÇÑ´Ù. Áï, ¾ÖÇø´ÀÌ ¼öÇàÁß¿¡ "Howdy there!"°¡ ¾ÖÇø´¿¡ Àü´ÞµÈ´Ù. ´ÙÀ½Àº HelloWorldApplet Ŭ·¡½ºÀÇ ¿¹ÀÌ´Ù.
<HTML> <HEAD> <TITLE> Hello World </TITLE> </HEAD> <BODY> This is the applet: <APPLET codebase="classes" code="HelloWorldApplet.class" width=200 height=200> <paramname =message value="Howdy there!"> </APPLET> </BODY> </HTML>
À§ÀÇ HTML È­ÀÏ¿¡¼­ ±â¼úÇÑ "HelloWorldApplet.class"´Â ´ÙÀ½°ú °°´Ù.

         // HelloWorldApplet.java 
         import java.applet.Applet
         import java.awt.Graphics
         public class HelloWorldApplet extends Applet {
         String input_from_Page;
         public void init() {
               System.out.println("initializing..");
               input_from_Page=getParameter("String");
         }
         public void start() {
               System.out.println("starting...");
         }
         public void stop() {
               System.out.println("stopping..");
         }
         publci void destroy() {
               System.out.println("preparing for unloading...");
         }
         public void paint(Graphics g) {
               g.drawString("Hello world!", 50, 25);
         }
     }
"HelloWorldApplet.java"ÀÇ µÎ¹øÂ° ÁÙ¿¡ "import"´Â °ü·Ã ÆÐŰÁöÀÇ Å¬·¡½ºµéÀ» HelloWorldApplet Ŭ·¡½º¿¡¼­ ÀÌ¿ëÇÑ´Ù´Â ÀǹÌÀÌ´Ù. µû¶ó¼­ "public ..... extends Applet"Àº HelloWorld Ŭ·¡½º°¡ Applet Ŭ·¡½ºÀÇ Æ¯¼ºÀ» »ó¼Ó¹Þ°Ú´Ù´Â ¶æÀÌ´Ù. ´Ù¸¥ ¹æ¹ýÀ¸·Î´Â "import java.applet. Applet"À» Á¤ÀÇÇÏÁö ¾Ê´Â ´ë½Å "public class ... extends java.applet.Applet"À¸·Î »ç¿ëÇØµµ ¹«¹æÇÏ´Ù. ´ÙÀ½Àº ½º·¹µå¿¡¼­ ¼³¸íÇÑ ¸Þ½îµåµéÀÌ ÀÌ¿ëµÇ´Âµ¥ ¿ì¸®°¡ ºê¶ó¿ìÀú¿¡¼­ ¾ÖÇø´À» ¸¸³­ °æ¿ì¸¦ º¸ÀÚ. ´ÙÀ½ 3´Ü°è¸¦ °ÅÄ¡°Ô µÉ °ÍÀÌ´Ù. "input_from_Page=getParameter("String");" ¹®Àº ÀÇ HTML ¹®¼­³»ÀÇ ¾ÖÇø´³»¿¡¼­ ¿¡ µû¶ó Àü´ÞµÈ ½ºÆ®¸µ "Howdy there!"¸¦ ÀоîµéÀÌ´Â getParameter() ¸Þ½îµåÀÇ ¿¹ÀÌ´Ù. paint() ¸Þ½îµå´Â "java.awt.Graphics" Ŭ·¡½ºÀÇ ÇÑ ¸Þ½îµå·Î¼­ ºê¶ó¿ìÀú¿¡¼­ ¾ÖÇø´À» Ç¥ÇöÇÏ´Â ±âº»ÀûÀÎ µð½ºÇ÷¹ÀÌ ¸Þ½îµåÀÌ´Ù. "g.drawString("Hello world!", 50, 25);" Àº ½ºÆ®¸µ "Hello world"¸¦ x ÁÂÇ¥ 50, y ÁÂÇ¥ 25¿¡ ±×¸®¶ó´Â ¸Þ½îµåÀÌ´Ù.

3.2 Native ¸Þ½îµå

Java ȯ°æ¿¡¼­ ¸Þ½îµå¸¦ ´Ù¸¥ ÇÁ·Î±×·¥À¸·Î ±¸ÇöÇÒ ¼ö ÀÖÀ¸¸ç À̸¦ "native ¸Þ½îµå"¶ó ÇÑ ´Ù. ±× ¼ø¼­´Â ´ÙÀ½°ú °°Àº 7´Ü°è¸¦ °ÅÄ£´Ù. ´Ü°è 1: Java Äڵ带 ÀÛ¼ºÇÑ´Ù: ¾Æ·¡¿Í °°ÀÌ HelloWorld¶ó´Â Java Ŭ·¡½º¸¦ ¸¸µé°í ±× Ŭ ·¡½º¿¡¼­ "displayHelloWorld()"¶ó´Â native ¸Þ½îµå¸¦ ¼±¾ðÇÑ´Ù.
         // HelloWorld.java
          class HelloWorld {
            public native void displayHelloWorld();
            static {
             System.loadLibrary("hello");
            }
          }
¶ÇÇÑ ´ÙÀ½°ú °°ÀÌ HelloWorld °´Ã¼¸¦ »ý¼ºÇÏ´Â ¸ÞÀÎ ÇÁ·Î±×·¥À» ¸¸µé°í ±× native ¸Þ½îµå¸¦ È£ÃâÇÑ´Ù.
          // Main.java
          class Main {
            public static void main(String args[] ) {
             new HelloWorld().displayHelloWorld();
            }
          }
´Ü°è 2: Java ÇÁ·Î±×·¥À» ÄÄÆÄÀÏÇÑ´Ù: javac HelloWorld.java; javac Main.java

´Ü°è 3: HelloWorld Java Ŭ·¡½º·Î ºÎÅÍ C Çì´õÈ­ÀÏÀ» »ý¼ºÇÑ´Ù: javah HelloWorld. »ý¼ºµÈ È­ÀÏ À̸§Àº "HelloWorld.h" ÀÌ´Ù. ±× Çì´õÈ­ÀÏÀº HelloWorld Ŭ·¡½º¸¦ ³ªÅ¸³»´Â ±¸Á¶¸¦ Á¤ÀÇÇϰí, ¶ÇÇÑ ±× Ŭ·¡½º¿¡¼­ Á¤ÀÇÇÑ native ¸Þ½îµådisplayHelloWorld()ÀÇ ±¸Çö¿¡ ´ëÇÑ C ÇÔ¼öÁ¤ÀÇ(function definition)¸¦ Á¦°øÇÑ´Ù.

´Ü°è 4: ½ºÅͺê(stub) È­ÀÏÀ» »ý¼ºÇÑ´Ù: javah -stubs HelloWorld. ½ºÅͺê È­ÀÏÀº Java Ŭ·¡½º¿Í ±× Ŭ·¡½ºÀÇ º´·Ä C ±¸Á¶¸¦ Æ÷ÇÔÇϸç È­ÀÏ À̸§Àº "HelloWorld.c" ÀÌ´Ù.

´Ü°è 5: Native ¸Þ½îµå HelloWorld_displayHelloWorld()¿¡ ´ëÇÑ C ÇÁ·Î±×·¥À» ÀÛ¼ºÇÑ´Ù. º» ¿¹¿¡¼­´Â È­ÀÏ À̸§À» "HelloWorldImp.c" ÀÌ´Ù.

         /* HelloWorldImp.c */
          #include 
          #include "HelloWorld.h"
          #include 
          void HelloWorld_displayHelloWorld(struct Hhellowprld *this) {
            printf("Hello World!\n");
            return;
          }

´Ü°è6: ±× native ¸Þ½îµå°¡ ¶óÀ̺귯¸®¸¦ ÀÌ¿ëÇÑ´Ù¸é ·±-ŸÀÓ¿¡ ÀÌ ¶óÀ̺귯¸®¸¦ ·ÎµåÇϱâ À§Çؼ­ ¸Þ½îµå loadLibrary()¸¦ ÀÛ¼ºÇÑ´Ù.

´Ü°è 7: C ÄÚµå¿Í ¶óÀ̺귯¸®¸¦ ÄÄÆÄÀÏÇÑ´Ù: cc -g HelloWorld.c HelloWorldImp.c -o libhello.so

´Ü°è 8: ½ÇÇà½ÃŲ´Ù: java Main.

"Hell World!" °¡ È­¸é¿¡ ³ªÅ¸³­´Ù.

4. °á¾î

Java°¡ óÀ½ ³ª¿ÔÀ»¶§ ±× °ü½ÉÀº ´ë´ÜÇÑ °Í À̾ú´Ù. ÀåÁ¡Àº ´ÙÀ½°ú °°´Ù. Á¤Á¡¿¡µµ ºÒ±¸ÇÏ°í ¿ì¸®´Â ´Ù¸¥ °üÁ¡¿¡¼­ Java¸¦ ºÐ¼®ÇÒ Çʿ䰡 ÀÖ´Ù. Java ÇÁ·Î±×·¡¹ÖÀÇ ¾î·Á¿ò ¶§¹®¿¡ GUI¸¦ ÀÌ¿ëÇÏ¿© Äڵ带 »ý¼ºÇÏ´Â µµ±¸µéÀÌ Á¦°øµÇ°í ÀÖ´Ù. ¶ÇÇÑ Áß°£ÄÚµå ¹®Á¦ÀÇ ¼º´ÉÀ» Çâ»ó½ÃŰ À§Çؼ­ ÀÎÅÍÇÁ¸®Æ® °úÁ¤À» °ÅÄ¡Áö ¾Ê°í Áï½Ã ¸Ó½ÅÄÚµå·Î ¹Ù²Ù´Â JIT(Just In Time) compiler¸¦ ÀÌ¿ëÇÏ´Â ¹æ¹ýÀÌ ÀϹÝÈ­µÇ°í ÀÖ´Ù.

Âü°í¹®Çå

[1] JavaSoft, Writing Java Programs.
[2] JavaSoft, The Java Language Environement, Oct. 1995.
[3] JavaSoft, The Java Language: A White Paper, 1994.
[4] JavaSoft, Java API Documentation 1.0.2.
[5] JavaSoft, The Java Virtual Machine Specification.
[6] JavaSoft, The Java Language Specification.
[7] JavaSoft, Java(tm): Java Ȩ ÆäÀÌÁö(Programming for the Internet, http://java.sun.com).
[8] JavaSoft, The Java Tutorial.
[9] Netscape Communications Corporation, NETSCAPE JAVASCRIPT.
[10] M. O'Connell, "Java: The inside story," SunWorld Online, July 1995.

Last-Modified : Tuesday, 09-Dec-2014 17:26:46 UTC