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ÀÇ ±â´ÉµéÀº ´ÙÀ½°ú °°´Ù:
- #typedef, #defineÀÌ ¾ø´Ù.
- union°ú struct ŸÀÙÀÌ ¾ø´Ù.
- °´Ã¼ÁöÇâ ±â¹ýÀ» ÀÌ¿ëÇÏ¿© function°ú procedure ±â´ÉÀ» Á¦°ÅÇÒ ¼ö ÀÖ´Ù.
- ´ÙÁß »ó¼Ó(multiple inheritance)¸¦ Çã¿ëÇÏÁö ¾Ê´Â´Ù.
- ŸÀ٠ij½ºÆ®¸¦ Çã¿ëÇÏÁö ¾Ê´Â´Ù.
- Æ÷ÀÎÅÍ(pointer)°¡ ¾ø´Ù.
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°¡Áö Ư¼ºÀ» Áö¿øÇÑ´Ù.
- ĸ½¶È(encapsulation): Á¤º¸ Àº´Ð(hiding)°ú ¸ðµâÈ Á¦°ø
- polymorphism: µ¿ÀÏ ¸Þ½ÃÁö¶óµµ ´Ù¸¥ °´Ã¼¿¡ Àü¼ÛµÇ¸é ±×
ÇàÀ§´Â ¹ÞÀº °´Ã¼ÀÇ Æ¯¼º¿¡ Á¾¼ÓµÈ´Ù.
- »ó¼Ó¼º(inheritance): Äڵ带 Àç»ç¿ëÇÏ°í ±¸ÃàÇϱâ À§Çؼ
±âÁ¸ Ŭ·¡½º¿¡ ±Ù°ÅÇÏ¿© »õ·Î¿î Ŭ·¡½º¿Í ÇàÀ§(behavior)¸¦ Á¤ÀÇÇÒ ¼ö ÀÖ´Ù.
- µ¿Àû ¹ÙÀεù(dynamic binding): °´Ã¼´Â ¾îµð¼³ª ¿Ã¼ö ÀÖÀ¸¸ç
ƯÈ÷ ³×Æ®¿öÅ©¸¦ ÅëÇØ¼ ¿Ã¼öµµ ÀÖ´Ù. µû¶ó¼ ÇÁ·Î±×·¥ÀÌ ¼öÇàµÇ´Â µµÁß¿¡
¹ÙÀεùµÇ¸ç ÃÖ´ëÇÑÀÇ À¶Å뼺À» Á¦°øÇÑ´Ù.
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)Àº
¼¹ö·Î ºÎÅÍ ³×Æ®¿öÅ©¸¦ ÅëÇØ¼ ºê¶ó¿ìÀú·Î ´Ù¿î·ÎµùµÇ´Âµ¥
À̶§ ¾ÖÇø´ÀÌ Å¬¶óÀÌ¾ðÆ® ½Ã½ºÅÛÀ» ÆÄ±«ÇÒ ¼ö ¾øµµ·Ï Á¦¾àÀ» µÐ´Ù.
Ŭ·¡½º ·Î´õ
-
Ŭ·¡½º ·Î´õ´Â »ó¼Ó ¹Þ°Å³ª È£ÃâÇÑ Å¬·¡½ºµéÀ» Æ÷ÇÔÇÏ¿©
ÀÀ¿ë ÇÁ·Î±×·¥À» ¼öÇàÇÒ ¶§ ÇÊ¿äÇÑ ¸ðµç Äڵ带 ÇÔ²² ºÒ·¯¿Â´Ù.
À̶§ Ŭ·¡½º ·Î´õ´Â Ŭ·¡½º¸¦ °¢ÀÚÀÇ °íÀ¯ À̸§°ø°£¿¡ µÐ´Ù.
Áï, Ŭ·¡½º ·Î´õ´Â ·ÎÄ® ÆÄÀÏ ½Ã½ºÅÛÀ¸·Î ºÎÅÍ ¿Â Ŭ·¡½ºµé¿¡ ´ëÇÑ
°íÀ¯ À̸§°ø°£°ú °¢ ³×Æ®¿÷À¸·Î ºÎÅÍ ¿Â Ŭ·¡½ºµé¿¡ ´ëÇÑ
°íÀ¯ À̸§°ø°£À» º¸ÀåÇØ¾ß ÇÑ´Ù.
ºê¶ó¿ìÁ®°¡ ³×Æ®¿÷À¸·Î ºÎÅÍ ¾ÖÇø´ Ŭ·¡½ºµéÀ» ·ÎµåÇÒ ¶§
±× ¾ÖÇø´ Ŭ·¡½ºµéÀº ±× ¿ø»êÁö¿Í °ü·ÃµÈ À̸§ °ø°£¿¡ ³õÀ̵µ·Ï ÇÏ¿©
Ŭ·¡½º°£¿¡ Ãæµ¹ÀÌ ¹ß»ýÇÏÁö ¾Êµµ·Ï ÇÑ´Ù.
¸ðµç Ŭ·¡½ºµéÀÌ ºÒ·¯¿Â ÈÄ¿¡ Àüü ½ÇÇà ÆÄÀÏÀ» À§ÇÑ ¸Þ¸ð¸® ¹èÄ¡°¡ °áÁ¤µÈ´Ù.
À̶§ ¸Þ½îµå¿Í »ó¼ö Ç®(constant pool)¿¡ ´ëÇÑ ¸Þ¸ð¸® ¿µ¿ªÀ» °®´Â´Ù.
¸Þ½îµå ¿µ¿ªÀº ÀÚ¹Ù ¸Þ½îµå¸¦ À§ÇÑ ¹ÙÀÌÆ®Äڵ尡 ÀúÀåµÇ°í
»ó¼ö Ç® ¿µ¿ªÀº Ŭ·¡½º À̸§, ¸Þ½îµå¿Í Çʵå À̸§, ¹®ÀÚ¿ »ó¼öµîÀÌ ÀúÀåµÇ¾î
±âÈ£ ÂüÁ¶(symbolic reference)¸¦ ¾Æ¿ëÇÏ¿© ½±°Ô ãÀ» ¼ö ÀÖ´Ù.
¶ÇÇÑ Å¬·¡½º ·Î´õ´Â ·ÎÄ® ÆÄÀÏ ½Ã½ºÅÛÀ¸·Î ºÎÅÍ ·ÎµåµÈ ¾ÖÇø´°ú
³×Æ®¿÷À¸·Î ºÎÅÍ ·ÎµåµÈ ¾ÖÇø´°£¿¡ Á¦¾à¼ºÀÌ ´Ù¸£´Ù.
³×Æ®¿÷À¸·Î ºÎÅÍ ·ÎµåµÈ ¾ÖÇø´Àº Ŭ·¡½º ·Î´õ¿¡ ÀÇÇØ¼ ·ÎµåµÇ°í
¾ÈÀü °ü¸®ÀÚ(security manager)¿¡ ÀÇÇØ Á¦¾àµÈ´Ù.
¹Ý¸é¿¡ ·ÎÄ® µð½ºÅ©·Î ºÎÅÍ ·ÎµåµÈ ¾ÖÇø´Àº ÆÄÀÏ ½Ã½ºÅÛ ·Î´õ¿¡
ÀÇÇØ¼ ·ÎµåµÈ´Ù.
¾ÈÀü °ü¸®ÀÚ´Â ´ÙÀ½°ú °°Àº Á¢±Ù Á¦ÇÑ À§¹ÝÀ» °Ë»çÇÑ´Ù.
- ¾ÖÇø´ÀÌ Å¬¶óÀÌ¾ðÆ® ÆÄÀÏ ½Ã½ºÅÛ»ó¿¡ Àбâ¿Í ¾²±â ±ÝÁö ¿©ºÎ
- ¾ÖÇø´ÀÌ ½Ã½ºÅÛ Á¤º¸ Àϱ⠿©ºÎ
- ¾ÖÇø´ÀÌ ÀÎÅÍ³Ý»ó¿¡ ´Ù¸¥ ÄÄÇ»ÅÍ¿ÍÀÇ Á¢¼Ó ¿©ºÎ
- ¾ÖÇø´ÀÌ Å¬¶óÀÌ¾ðÆ®»ó¿¡ ´Ù¸¥ ÀÀ¿ëÀ» ½Ãµ¿ÇÏ´Â °¡ ¿©ºÎ
- ¾ÖÇø´ÀÌ Å¬¶óÀÌ¾ðÆ®»ó¿¡ ¶óÀ̺귯¸®¸¦ ·ÎµåÇÒ ¼ö Àִ°¡ ¿©ºÎ
- ¾ÖÇø´ÀÌ À©µµ¿ì¸¦ »ý¼ºÇÒ ¶§ ±âÁ¸ À©µµ¿ì¿ÍÀÇ Â÷ÀÌ ¼³Á¤ ¿©ºÎ
¹ÙÀÌÆ®ÄÚµå °ËÁõ±â
-
À̵¿ ÄÚµåÀÇ °¡Àå Å« ¹®Á¦´Â ¾ÈÁ¤¼ºÀÌ´Ù.
Áï, ³×Æ®¿÷À¸·Î ºÎÅÍ °¡Á®¿Â ¹ÙÀÌÆ®Äڵ尡 À߸øµÈ ÄÄÆÄÀÏ·¯,
ºÒ°ÇÀüÇÑ ÀǵµÀÇ ÄÄÆÄÀÏ·¯¿¡ µû¸¥ ÄÚµåÀÇ Ä§ÀÔÀ¸·Î ºê¶ó¿ìÁ®°¡
µ¿ÀÛÇÏ´Â ·ÎÄ® ½Ã½ºÅÛ¿¡ Ä¡¸íÀûÀÎ ÆÄ±«¸¦ ¹ß»ýÇÒ ¼ÒÁö°¡ ÀÖ´Ù.
µû¶ó¼ ¹ÙÀÌÆ®Äڵ尡 ¼öÇàµÇ±â Àü¿¡ öÀúÇÏ°Ô ¾ÈÀü¼ºÀÌ
º¸ÀåµÇ¾î¾ß ÇÑ´Ù. ¹ÙÀÌÆ®ÄÚµå °ËÁõ±â´Â ÀÚ¹Ù ¾ð¾îÀÇ
¾ÈÀü ±ÔÄ¢(safety rules)À» ÆÄ±«ÇÏ´Â(violate) Äڵ带 »ý»êÇÑ
ÄÄÆÄÀÏ·¯·Î ºÎÅÍ ÁöŰ´Â ´ÙÀ½ ±â´ÉÀ» ´ã´çÇÑ´Ù.
- ¹ÙÀÌÆ®Äڵ尡 À߸øµÈ Æ÷ÀÎÅ͸¦ »ç¿ëÇÏ´Â °¡ ¿©ºÎ
- °´Ã¼(objects)°¡ ÀǹÌÇÏ´Â ¹Ù´ë·Î ¼öÇàµÉ °ÍÀÎÁö ¿©ºÎ
- ¹ÙÀÌÆ®Äڵ尡 ÀûÀûÇÑ Å¸ÀÙ°ú ÀûÁ¤ÇÑ ÀÎÀÚ¸¦ °¡Áø ¸Þ½îµå¸¦ È£ÃâÇÏ´ÂÁö ¿©ºÎ
- ½ºÅà ¿À¹öÇÃ·Î¿ì ¿©ºÎ
³×Æ®¿÷À¸·Î ·ÎµåµÈ ¹ÙÀÌÆ®Äڵ尡 ¹ÙÀÌÆ®ÄÚµå °ËÁõ±â¸¦
Åë°úÇÏ¸é ±× ÄÚµå´Â ´ÙÀ½À» º¸ÀåÇÏ°Ô µÈ´Ù.
- ±× ÄÚµå´Â ÇÇ¿¬»êÀÚ(operand) ¿À¹öÇ÷οì¿Í ¾ð´õÇ÷ο츦 ¾ß±âÇÏÁö ¾Ê´Â´Ù.
- ¸ðµç ¿¬»êÀÚ¿¡ ´ëÇÑ ÆÄ¶ó¹ÌÅÍÀÇ Å¸ÀÙÀº Ç×»ó Á¤È®ÇÏ´Ù.
- ¾î¶°ÇÑ ºÒ¹ýÀûÀÎ µ¥ÀÌÅÍ º¯È¯µµ ÇàÇÏÁö ¾Ê´Â´Ù.
- °´Ã¼ Çʵå Á¢±ÙÀº Ç×»ó ÇÕ¹ýÀûÀÌ´Ù. (¿¹, private, public, protectedµî)
ÀÌ·¸°Ô °ËÁõµÈ ¹ÙÀÌÆ®ÄÚµå´Â ÀÚ¹Ù °¡»ó¸Ó½ÅÀ¸·Î Àü´ÞµÇ¾î
±× Äڵ尡 ½ÇÁ¦·Î ¼öÇàµÈ´Ù.
ºê¶ó¿ìÁ®¿Í ¾ÈÀü¼º
- ÀÚ¹Ù ½ÇÇà½Ã°£ ȯ°æ
- Ŭ·¡½º ·Î´õ: À¥ ºê¶ó¿ìÁ®´Â ÇÑ °³ÀÇ Å¬·¡½º Ŭ·¡½º
·Î´õ¸¸À» ÀÌ¿ëÇÏ¸ç ½Ãµ¿(start-up)½Ã¿¡ ¼³Á¤µÈ´Ù.
±×·¡¼ ½Ã½ºÅÛ Å¬·¡½º ·Î´õ´Â È®ÀåµÇ°Å³ª(extended),
¿À¹ö·Îµå µÇ°Å³ª(overloaded), ¿À¹ö¶óÀÌµå µÇ°Å³ª(override) ¶Ç´Â
´ëÄ¡µÉ(replaced) ¼ö ¾ø´Ù.
¾ÖÇø´Àº ±× ÀÚ½ÅÀÇ Å¬·¡½º ·Î´õ¸¦ »ý¼ºÇϰųª ÂüÁ¶ÇÒ ¼ö ¾ø´Ù.
- ¾ÈÀü °ü¸®ÀÚ(security manager): ¾ÖÇø´ Á¦¾à»çÇ×À» °ü¸®ÇÏ´Â
ÀÚ¹Ù ¸ÞÄ«´ÏÁòÀÌ´Ù. ºê¶ó¿ìÁ®´Â ´ÜÁö ÇÑ °³ÀÇ ¾ÈÀü °ü¸®ÀÚ¸¦
ÀÌ¿ëÇÒ °ÍÀÌ´Ù. ¾ÈÀü °ü¸®ÀÚ´Â ½Ãµ¿½Ã¿¡ ¼³Á¤µÇ°í,
±× ÈÄ¿¡ ´ëÄ¡µÇ°Å³ª ¿À¹ö·Îµå µÇ°Å³ª ¿À¹ö¶óÀÌµå µÇ°Å³ª
È®ÀåµÉ ¼ö ¾ø´Ù. ¾ÖÇø´Àº ±× ÀÚ½ÅÀÇ ¾ÈÀü °ü¸®ÀÚ¸¦ »ý¼ºÇϰųª
ÂüÁ¶ÇÒ ¼ö ¾ø´Ù.
- ¹ÙÀÌÆ®Äڵ忡 ¾Ïȣȸ¦ ÀÌ¿ëÇÏ´Â °æ¿ì¿¡ À̸¦ ÇØ¼®Çϰí
ó¸®ÇÒ ¼ö ÀÖ¾î¾ß ÇÑ´Ù.
- ¾ÖÇø´ Á¦¾à»çÇ׿¡ ´ëÇÑ ºê¶ó¿ìÁ®ÀÇ ¼±ÅûçÇ×
- ºê¶ó¿ìÁ®´Â ¾ÖÇø´ÀÌ ÆÄÀÏÀ» Àеµ·Ï Ãß°¡ ±â´ÉÀÌ ¿ä±¸µÈ´Ù.
- ºê¶ó¿ìÁ®´Â ¾ÖÇø´ÀÌ ÆÄÀÏÀ» Àӽà µð½ºÅ©¿¡ ÀúÀåÇÏ´Â °ÍÀ»
Çã¿ëÇϵµ·Ï Ãß°¡ ±â´ÉÀÌ ¿ä±¸µÈ´Ù.
- ºê¶ó¿ìÁ®´Â ¾ÖÇø´ÀÌ ÆÄÀÏ Á¤º¸¸¦ Àϵµ·Ï Ãß°¡ ±â´ÉÀÌ ¿ä±¸µÈ´Ù.
- ºê¶ó¿ìÁ®´Â ¾ÖÇø´ÀÌ ÆÄÀÏÀ» »èÁ¦ ÇÒ ¼ö ¾øµµ·Ï ÇÑ´Ù.
- ºê¶ó¿ìÁ®´Â ¾ÖÇø´ÀÌ »ç¿ëÀÚÀÇ °èÁ¤À» ÀÐÀ» ¼ö ¾øµµ·Ï ÇÑ´Ù.
- ºê¶ó¿ìÁ®´Â ¾ÖÇø´ÀÌ Å¬¶óÀÌ¾ðÆ® Æ÷Æ®¿¡ Á¢¼ÓÇÒ ¼ö ¾øµµ·Ï ÇÑ´Ù.
- ºê¶ó¿ìÁ®´Â ¾ÖÇø´ÀÌ ´Ù¸¥ È£½ºÆ®¿¡ ÀÖµµ·Ï ¼±Åà »çÇ×À¸·Î Á¦°øÇÑ´Ù.
- ºê¶ó¿ìÁ®´Â ¾ÖÇø´ÀÌ ¶óÀ̺귯¸®¸¦ ·ÎµåÇÒ ¼ö ¾øµµ·Ï ÇÑ´Ù.
- ºê¶ó¿ìÁ®´Â ¾ÖÇø´ÀÌ Å¬¶óÀ̾ðÆ®ÀÇ ´Ù¸¥ ÀÀ¿ëÀ» ½Ãµ¿½Ãų ¼ö ¾øµµ·Ï ÇÑ´Ù.
- ºê¶ó¿ìÁ®´Â ¾ÖÇø´ÀÌ Å¬¶óÀÌ¾ðÆ®¿¡ pop-up ¸Þ´º¸¦ °æ°í¾øÀÌ
»ý¼º½ÃŰÁö ¾Êµµ·Ï ÇÑ´Ù.
°á±¹ Java¿¡¼ ¾ÈÀü¼ºÀ» º¸ÀåÇÑ´Ù´Â Àǹ̴ ¾ð¾î ÀÚü°¡
¿ÏÀüÇÑ Å¸ÀÙ Á¤ÀǸ¦ ¿ä±¸ÇÏ¿© ÄÄÆÄÀÏ °úÁ¤¿¡ ¸íÈ®ÇÑ
¹ÙÀÌÆ®Äڵ带 »ý¼ºÇÔÀ¸·Î½á À߸øµÈ Äڵ尡 »ý¼ºµÇ´Â °ÍÀ» Å©°Ô
ÁÙÀϼö ÀÖ´Ù´Â °ÍÀÌ´Ù. ¶ÇÇÑ ¹ÙÀÌÆ®ÄÚµå °ËÁõ±â°¡ ´Ù½Ã ¹ÙÀÌÆ®Äڵ带
°Ë»çÇϱ⠶§¹®¿¡ ¿ÏÀüÇÑ ¾ÈÀü¼ºÀ» º¸ÀåÇÑ´Ù.
2.2.6 ¸ÖƼ½º·¹µå(multithread) Áö¿ø
"½º·¹µå"¶õ "ÇÑ ÇÁ·Î¼¼½º³»¿¡¼ µ¶¸³ÀûÀÎ Á¦¾î°¡ °¡´ÉÇÑ È帧"À̶ó°í Á¤ÀÇÇÑ´Ù.
º¸Åë execution context ¶Ç´Â lightweight ÇÁ·Î¼¼½º¶ó ÇÑ´Ù.
ÀÌ·± ¹®±¸»óÀÇ Á¤ÀÇ¿¡µµ ºÒ±¸Çϰí ÇѰ³ÀÇ ½º·¹µå·Î ±¸¼ºµÈ ÇÁ·Î¼¼½º¿¡¼
½º·¹µå¿Í ÇÁ·Î¼¼½ºÀÇ Â÷ÀÌ´Â ¾ø´Ù. ´ÜÁö ¸ÖƼ½º·¹µå¿¡¼´Â
½º·¹µåµé°£¿¡ ¸Þ¸ð¸®¸¦ °øÀ¯ÇÑ´Ù´Â Â÷ÀÌ´Â ÀÖ´Ù.
¸ÖƼ½º·¹µå´Â ÇÁ·Î¼¼½º°£ Åë½ÅÀÌ º¸´Ù ½±°í ƯÁ¤ Äڵ带
°øÀ¯ÇÔÀ¸·Î½á ºÎÇϸ¦ ÁÙÀÌ´Â lightweight ÇÁ·Î¼¼½º¸¦ Áö¿øÇÑ´Ù.
Java ¶ÇÇÑ ÀÌ·¯ÇÑ ¸ÖƼ½º·¹µå ±â´ÉÀ» Áö¿øÇÔÀ¸·Î½á ¼¹ö·Î ºÎÅÍ
µ¥ÀÌÅ͸¦ ´Ù¿î·ÎµùÇÏ¸é¼ ÆäÀÌÁö¸¦ ³Ñ±â´Â µµÁß¿¡ À½¾ÇÀ» µè°í
¿¡´Ï¸ÞÀ̼ÇÀ» ¼öÇàÇÏ´Â ´ëÈÇü ±×·¡ÇÈ ÀÀ¿ë ÇÁ·Î±×·¥À» È¿°úÀûÀ¸·Î
°³¹ßÇÒ ¼ö ÀÖ´Ù. Java ½º·¹µå´Â java.lang ÆÐŰÁöÀÇ ÀϺÎÀÎ
Thread Ŭ·¡½º¸¦ ±¸ÇöÇÑ °ÍÀÌ´Ù. ÀÌ Thread Ŭ·¡½º´Â ½Ã½ºÅÛ µ¶¸³ÀûÀÎ
Java ½º·¹µå¸¦ ±¸ÇöÇÑ °ÍÀÌ¸ç ½ÇÁ¦·ÎÀÇ µ¿ÀÛÀº ½Ã½ºÅÛ¿¡ Á¾¼ÓµÈ´Ù.
Java¿¡¼ »õ·Î¿î ½º·¹µå¸¦ »ý¼ºÇϱâ À§Çؼ "new Thread()"¸¦ È£ÃâÇÑ´Ù.
Java´Â ¸ÖƼ½º·¹µå¸¦ À§ÇÑ ½º·¹µåÀÇ °ü¸®,
¿ì¼±¼øÀ§ Ã¥Á¤(MIN_PRIORITY¿Í MAX_PRIORITY »çÀÌ),
µ¿±âȸ¦ À§ÇÑ Å¬·¡½º¿Í ¸Þ½îµå¸¦ Á¦°øÇϸç Áß¿äÇÑ ¸Þ½îµåµéÀº ´ÙÀ½°ú °°´Ù.
- start() ¸Þ½îµå: ½º·¹µå¸¦ ½ÇÇà½Ãų¶§ ÇÊ¿äÇÑ
½Ã½ºÅÛ ÀÚ¿øÀ» »ý¼ºÇÏ°í ½º·¹µå°¡ ½ÇÇàµÉ Áغñ¸¦ ÇÑ´Ù.
- stop() ¸Þ½îµå: ½º·¹µå¸¦ Á¤ÁöÇÑ´Ù.
- run() ¸Þ½îµå: ½º·¹µå¿¡¼ °¡Àå Áß¿äÇÑ ºÎºÐÀÌ´Ù.
½º·¹µå°¡ »ý¼ºµÇ°í ½ÃÀÛµÈ ÈÄ¿¡ ½º·¹µåÀÇ ÇൿÀ» °áÁ¤ÇÏ´Â
½º·¹µåÀÇ ¸öü(body) ºÎºÐÀÌ´Ù. Áï, ½º·¹µå¿¡¼ ¹«ÇÑ ·çÇÁ¸¦ µ¹¸é¼
ÀÔÃâ·ÂÀ» ÇàÇϰųª, ½º·¹µå¸¦ Àá½Ã Á¤Áö½ÃŲ ÈÄ¿¡
´Ù½Ã Àç°³½Ã۴µîÀÇ ±â´ÉµéÀ» run() ¸Þ½îµå¾È¿¡¼ ÁöÁ¤ÇÒ ¼ö ÀÖ´Ù.
- suspend() ¸Þ½îµå: Àá½Ã ½º·¹µå¸¦ Á¤ÁöÇÑ´Ù.
- resume() ¸Þ½îµå: Á¤ÁöµÈ ½º·¹µå¸¦ Àç°³ÇÑ´Ù.
- sleep() ¸Þ½îµå: 1000ºÐÀÇ 1ÃÊ ´ÜÀ§·Î¼ ½º·¹µå¸¦ Á¤ÁöÇÑ´Ù.
- wait() ¸Þ½îµå: Á¶°Ç º¯¼ö(condition variable)ÀÇ »óŰ¡
true°¡ µÇ¸é ½º·¹µå¸¦ ±ú¿î´Ù.
- yield() ¸Þ½îµå: ÇöÀç ½ÇÇàÁßÀÎ ½º·¹µå¸¦ ¸ØÃß°í
´ÙÀ½ ½ºÄÉÁ층½Ã¿¡ ½ÇÇà½ÃŲ´Ù.
±×¸² 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 ¶óÀ̺귯¸®·Î ºÐ·ùµÈ´Ù.
- Core ´Â °³¹ßÀÚµéÀÌ °¡Á¤ÇÒ ¼ö ÀÖ´Â APIÀÇ ÃÖ¼ÒÇÑÀÇ ÁýÇÕÀ¸·Î, Java Ç÷§Æû ±¸Çö½Ã
¸ðµç °æ¿ì¿¡ ³ªÅ¸³´Ù. ±×·¯³ª Core API´Â ½Ã°£ÀÌ Áö³²¿¡ µû¶ó¼ È®Àå µÇ°í
ÇöÀç core API´Â JDK1.0¿¡ ±Ù°ÅÇÑ´Ù. ´ÙÀ½ core API´Â JDK 1.1ÀÌ ±âº»ÀÌ µÉ °ÍÀÌ´Ù.
- Standard ExtensionÀº Java Soft°¡ Á¤ÀÇÇϰí API Ç¥ÁØÀ¸·Î ¹ßÇàµÈ Core API¸¦
Á¦¿ÜÇÑ ºÎºÐÀ̰í, ½Ã°£ÀÌ Áö³²¿¡ µû¶ó ÀÌ ºÎºÐÀÌ Core API·Î ¿Å°Ü°¥ ¼ö ÀÖ´Ù.
ÇöÀç ´ÙÀ½°ú °°Àº Java API°¡ Á¤ÀǵǾî ÀÖ´Ù.
JDK 1.0.2´Â Ŭ·¡½ºµéÀÇ Æ¯¼º¿¡ µû¶ó ´ÙÀ½ 8 Á¾·ùÀÇ
API ÆÐŰÁö(¹ÙÀδõ 3±Ç ºÐ·®)¸¦ Á¦°øÇÑ´Ù. Core APIÀÌ´Ù.
- java.lang ÆÐŰÁö
- Java ¾ð¾î¿¡¼ built-inÀ¸·Î Á¦°øµÇ´Â Ŭ·¡½ºÀÌ´Ù.
Boolean, character¿Í °°Àº ÀÏ¹Ý ÇÁ·Î±×·¡¹Ö ¾ð¾îÀÇ
built-in ±â´É°ú ½º·¹µå °ü·Ã Ŭ·¡½º, ±×¸®°í ¿¹¿Ü»óȲ
(exception handling)¿¡ °ü·ÃµÈ Ŭ·¡½ºµé·Î ±¸¼ºµÈ´Ù.
- java.io ÆÐŰÁö
- ÈÀÏ , ½ºÆ®¸µ, ´Ù¸¥ ¼Ò½º·Î(ºÎÅÍ) µ¥ÀÌÅ͸¦ Àаųª ¾²±â À§Çؼ
ÀÔÃâ·ÂÀ» °ü¸®Çϴ Ŭ·¡½º¿Í ÀÎÅÍÆäÀ̽º·Î ±¸¼ºµÈ´Ù.
- java.net ÆÐŰÁö
- ³×Æ®¿öÅ© ÇÁ·Î±×·¡¹ÖÀ» À§ÇÑ
URLs, TCP ¼ÒÄÏ(sockets), UDP ¼ÒÄÏ, IP ÁÖ¼Ò, binary-to-text º¯È¯µîÀ»
Æ÷ÇÔÇϴ Ŭ·¡½º·Î ±¸¼ºµÇ°í °ü·Ã ÀÎÅÍÆäÀ̽ºµéµµ Æ÷ÇԵȴÙ.
- java.util ÆÐŰÁö
- Java ÇÁ·Î±×·¡¹ÖÀ» Çϴµ¥ À¯¿ëÇÑ µ¥ÀÌÆ®, »çÀü, ½ºÅÃ,
³¼ö ÃßÃâ, ½Ã½ºÅÛ Æ¯¼ºµî°ú °°Àº Ŭ·¡½º¿Í
ÀÎÅÍÆäÀ̽ºµé·Î ±¸¼ºµÈ´Ù.
- java.awt ÆÐŰÁö
- AWT´Â Abstract Window ToolkitÀÇ ¾àÀÚ·Î
À©µµ¿ì, ´ëÈ »óÀÚ, üũ ¹Ú½º, ¸®½ºÆ®, ¸Þ´º, ¹öư, ÆÐ³Î,
½ºÅ©·Ñ, ·¹À̾ƿô, ÅØ½ºÆ® Çʵå¿Í °°Àº
»ç¿ëÀÚ ÀÎÅÍÆäÀ̽º¸¦ °ü¸®Çϴ Ŭ·¡½º¿Í ÀÎÅÍÆäÀ̽º¸¦ Á¦°øÇÑ´Ù.
- java.awt.image ÆÐŰÁö
- »ö»ó, Çȼ¿µî°ú °°ÀÌ À̹ÌÁö µ¥ÀÌÅ͸¦ °ü¸®Çϴ Ŭ·¡½ºµéÀ» Á¦°øÇÑ´Ù.
- java.awt.peer ÆÐŰÁö
- AWT ÄÄÆ÷³ÍÆ®¸¦ Motif widget ¶Ç´Â MSÀÇ Windows control°ú °°ÀÌ
Ç÷§Æû¿¡ Á¾¼ÓµÇ´Â ºÎºÐ°ú ¿¬°á½ÃŲ´Ù.
- java.applet ÆÐŰÁö
- Applet Ŭ·¡½º¸¦ ÅëÇØ¼ ¾ÖÇø´À» »ý¼º½ÃŰ´Â Ŭ·¡½º¿Í ÀÎÅÍÆäÀ̽º¸¦
Á¦°øÇÑ´Ù. ¾ÖÇø´Àº HTML ÆäÀÌÁö³»¿¡ ¼û°ÜÁö°í ±×·¸Áö ¾ÊÀ¸¸é
³×Æ®¿÷À» ÅëÇØ¼ Àü´ÞµÈ´Ù.
- ±âŸ: sun.tool.debug ÆÐŰÁö
- Sun¿¡¼ Á¦°øÇÏ´Â µð¹ö±ëÀ» À§ÇÑ Å¬·¡½º¿Í ÀÎÅÍÆäÀ̽ºµéÀ» Æ÷ÇÔÇÑ´Ù.
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°¡ ÀÖ´Ù.
- JDBC´Â
Java Database ConnectivityÀÇ ¾àÀÚÀÌ´Ù. Ç¥ÁØ SQL DB¸¦ Á¢±ÙÇϱâ
À§ÇÑ ÀÎÅÍÆäÀ̽º·Î¼ °ü°èÇü DB Á¢±ÙÀ» À§ÇÑ ¹æ¹ýÀ» Á¦°øÇÑ´Ù.
- Java IDL˼
OMG(Object Management Group) Interface Definition Language »ç¾çÀ¸·Î
°³¹ßµÇ¾ú´Ù. ´Ù¸¥ Ç÷§Æû»ó¿¡ °´Ã¼¿Í Ŭ¶óÀÌ¾ðÆ® »çÀÌ¿¡ ÀÎÅÍÆäÀ̽º¸¦ Á¤ÀÇÇÏ´Â
¾ð¾î-Á߸³(language-neutral) ¹æ¹ýÀÌ´Ù.
- Java RMI´Â
invocationÀÇ ¾çÂÊÀÇ ÀÀ¿ëÀÌ Java·Î ÀÛ¼ºµÉ¶§ peer »çÀÌ¿¡ ¶Ç´Â
Ŭ¶óÀÌ¾ðÆ®¿Í ¼¹ö »çÀÌ¿¡ remote method invocation À» Á¦°øÇÑ´Ù
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
°³¹ßÀÚ¿Í »ç¿ëÀÚ°¡ À¥»ó¿¡¼ ´Ù¾çÇÑ ¹Ìµð¾î¸¦ ½±°Ô ÀÌ¿ëÇÒ ¼ö ÀÖµµ·Ï ÇÑ´Ù.
- Java 2D ´Â ±âÁ¸ 1.0.2 AWT ÆÐŰÁö¸¦ È®ÀåÇÑ ¸ðµ¨·Î¼
line art, image, color, transform, compositionÀ» Æ÷ÇÔÇÑ´Ù.
Core API ÀÌ¸ç ¾ÆÁ÷ »ç¾çÀº ÀÛ¼ºµÇÁö ¾Ê¾Ò´Ù.
- Java Media Framework´Â µ¿±âȸ¦ À§ÇÑ Å¬·°À» °®´Â´Ù. ¶ÇÇÑ ¿Àµð¿À, ºñµð¿À,
±×¸®°í MIDI¸¦ À§ÇÑ ¹Ìµð¾î Àç»ý±â¸¦ °®´Â´Ù. ¾ÆÁ÷ API´Â ÀÛ¼ºµÇÁö ¾Ê¾Ò´Ù.
Ŭ·° API´Â ¿ÃÇØ ³ª¿Ã ¿¹Á¤ÀÌ°í ¹Ìµð¾î Àç»ý±â API´Â ³»³â »ó¹Ý±â¿¡ ³ª¿Ã ¿¹Á¤ÀÌ´Ù.
Ŭ·° API°¡ CoreÀÎ ¹Ý¸é ¹Ìµð¾î Àç»ý±â API¿¡¼
¿Àµð¿À´Â Core ÀÎ ¹Ý¸é ºñµð¿À¿Í MIDI´Â Standard Extension ¶óÀ̺귯¸®ÀÌ´Ù.
- Java Share´Â ÈÀÌÆ®º¸µå ó·³ ¿©·¯ »ç¿ëÀÚµé »çÀÌ¿¡ ÀÀ¿ëÀ» °øÀ¯ÇÏ´Â ±â´ÉÀ»
Á¦°øÇÑ´Ù. ¾ÆÁ÷ API´Â ¿Ï¼ºµÇÁö ¾Ê¾Ò°í Standard Extension ÀÌ´Ù.
- Java AnimationÀº 2D °´Ã¼¿¡ ´ëÇÑ ¾Ö´Ï¸ÞÀ̼ÇÀ» Á¦°øÇϸç
Java Media Framework¸¦ Á¦°øÇÑ´Ù.
-
Java Telephony API´Â
ÀÏ¹Ý ÀüÈ È£Ãâ, ¿ø°Ý ȸÀǵî°ú °°Àº ÀüÈ ¼ºñ½º¸¦ À§ÇÑ ±â´ÉÀ»
Á¦°øÇÑ´Ù. Standard Extension ÀÌ´Ù.
- Java 3D´Â 3D °´Ã¼¿¡ ´ëÇÑ °¡´ÉÀ» Á¦°øÇÑ´Ù. ¾ÆÁ÷ API´Â ¿Ï¼ºµÇÁö ¾Ê¾ÒÀ¸¸ç
Standard Extension ÀÌ´Ù.
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 ÇÁ·Î±×·¡¹ÖÀ» À§ÇÑ µµ±¸µéÀº ´ÙÀ½°ú °°´Ù.
- javac: Java ÄÄÆÄÀÏ·¯ÀÌ´Ù. Java·Î ÀÛ¼ºµÈ ÇÁ·Î±×·¥(*.java)À»
ÄÄÆÄÀÏÇÏ¿© ¹ÙÀÌÆ®ÄÚµå(*.class)¸¦ »ý¼ºÇÑ´Ù.
- javac_g: µð¹ö±ëÀÌ °¡´ÉÇϵµ·Ï Java ÇÁ·Î±×·¥À» ÄÄÆÄÀÏÇÏ¿© ¹ÙÀÌÆ®Äڵ带 »ý¼ºÇÑ´Ù.
- java: Java ÀÎÅÍÇÁ¸®ÅÍÀÌ´Ù. ¹ÙÀÌÆ®Äڵ带 ÇØ¼®ÇÏ°í ¼öÇàÇÑ´Ù.
- java_g: µð¹ö±ëÀ» À§ÇÑ Java ÀÎÅÍÇÁ¸®ÅÍÀÌ´Ù.
- javah: ±âÁ¸ÀÇ ´Ù¸¥ ÇÁ·Î±×·¥°úÀÇ ¸µÅ©¸¦ Áö¿øÇϱâ À§Çؼ
¹ÙÀÌÆ®ÄÚµå(Ŭ·¡½º ÈÀÏ)·Î ºÎÅÍ Çì´õÈÀÏ(*.h)°ú ¼Ò½ºÈÀÏ(*.c)À» »ý¼ºÇÑ´Ù.
Java¿¡¼´Â À̰ÍÀ» "native ¸Þ½îµå"¶ó ÇÑ´Ù.
- javah_g: µð¹ö±ëÀ» À§ÇÑ Çì´õ¿Í ¼Ò½ºÈÀÏÀ» »ý¼ºÇÑ´Ù.
- javaprof: java ¸í·É¾î¸¦ ¼öÇà½Ã -prof ¿É¼ÇÀ» ÁÖ¸é *.prof ÈÀÏÀÌ »ý¼ºµÈ´Ù.
ÀÌ ÈÀÏÀº ¸Þ½îµå¿Í Ŭ·¡½ºÀÇ È£Ãâ Ƚ¼ö, µ¥ÀÌÅÍ Å¸ÀÙ¿¡ ´ëÇÑ ¸Þ¸ð¸® »ç¿ëµî
Åë°è ÀڷḦ À§ÇÑ Á¤º¸¸¦ Æ÷ÇÔÇÑ´Ù.
- javap: Java ÇÁ·Î±×·¥À¸·Î ºÎÅÍ Å¬·¡½ºÀÇ °¢ Çʵ带 ¿É¼Ç¿¡ µû¶ó ºÐ¸®ÇÑ´Ù.
- javadoc: Java ÇÁ·Î±×·¥À¸·Î ºÎÅÍ ÇÏÀÌÆÛÅØ½ºÆ® ÇüÅ·ΠAPI ¹®¼¸¦ »ý¼ºÇÑ´Ù.
ÀϹÝÀûÀÎ API ¹®¼ÇüÅ´ Ŭ·¡½º¿Í ÀÎÅÍÆäÀ̽º ºÎºÐ, ¸Þ½îµå,
±×¸®°í º¯¼ö(variables)·Î ±¸¼ºµÈ´Ù.
- appletviewer: À¥ ºê¶ó¿ìÀú¸¦ ÀÌ¿ëÇÏÁö ¾Ê°í ¸í·É¾î·Î ¾ÖÇø´À» ½ÇÇà½ÃŲ´Ù.
- jdb: 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 Ŭ·¡½ºÀÇ ¿¹ÀÌ´Ù.
Hello World
This is the applet:
À§ÀÇ 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´Ü°è¸¦ °ÅÄ¡°Ô µÉ °ÍÀÌ´Ù.
- ´Ü°è 1: ¾ÖÇø´Àº ³×Æ®¿öÅ© ¶Ç´Â ·ÎÄ® ÈÀϽýºÅÛÀ¸·Î ºÎÅÍ ·ÎµùµÈ´Ù.
¾ÖÇø´ÀÌ ·ÎµåµÉ¶§ ¸ÕÀú ±× ¾ÖÇø´ÀÌ Á¦¾îÇϴ Ŭ·¡½ºÀÇ ÀνºÅϽº°¡ »ý¼ºµÈ´Ù.
´ÙÀ½¿¡ ±× ¾ÖÇø´À» ÃʱâÈ(init() ¸Þ½îµå ÀÌ¿ë) ÇÑ´Ù.
´ÙÀ½¿¡ start() ¸Þ½îµå¸¦ È£ÃâÇÏ¿© ¾ÖÇø´À» ½ÇÇà¸ðµå·Î À̵¿½ÃŲ´Ù.
- ´Ü°è 2: ¿¡Çø´ÀÌ ÀÚ½ÅÀÇ ºê¶ó¿ìÀú¿¡¼ ¼öÇàµÇ´Â µµÁß¿¡ ¿ì¸®´Â
´Ù¸¥ À¥ ÆäÀÌÁö·Î °¡°Å³ª ±× À¥¿¡¼ ºüÁ®³ª¿Ã °ÍÀÌ´Ù.
´Ù¸¥ ÆäÀÌÁö·Î À̵¿ÇÏ´Â °æ¿ì¿¡ ±× ¾ÖÇø´ÀÇ ¼öÇàÀ» ¸ØÃâ Çʿ䰡 Àִµ¥
stop() ¸Þ½îµå¸¦ ÀÌ¿ëÇÑ´Ù. ±× ÈÄ¿¡ ´Ù½Ã ±× ÆäÀÌÁö·Î µ¹¾Æ¿À¸é start()
¸Þ½îµå¸¦ È£ÃâÇÏ¿© ¾ÖÇø´À» ´Ù½Ã ½ÇÇà½ÃŲ´Ù.
»ç¿ëÀÚ´Â ±× ÆäÀÌÁö¸¦ Àç·Îµå(ºê¶ó¿ìÀú¿¡¼ "reload" ¹öư)¸¦ ÇÒ ¼öµµ ÀÖ´Ù.
À̶§ stop() ¸Þ½îµå¸¦ È£ÃâÇÑÈÄ¿¡ destroy() ¸Þ½îµå¸¦ È£ÃâÇÏ¿©
±× ¾ÖÇø´¿¡ ÇÒ´çµÇ¾ú´ø ¸ðµç ÀÚ¿øÀ» ÇØÁ¦ÇÑ ÈÄ¿¡ ù¹øÂ° °úÁ¤À» ´Ù½Ã ¼öÇàÇÏ¿©
¾ÖÇø´À» »õ·Ó°Ô ¼öÇà½ÃŲ´Ù(unloaded & reloaded).
- ´Ü°è 3: ¸¶Áö¸·À¸·Î ¿ì¸®´Â ºê¶ó¿ìÀú¸¦ ¿ÏÀüÈ÷ ºüÁ®³ª¿Ã °ÍÀÌ´Ù.
À̶§ stop() ¸Þ½îµå¿Í destroy() ¸Þ½îµå¸¦ ÀÌ¿ëÇÏ¿© ¸ðµç ÀÚ¿øÀ» ÇØÁ¦ÇÏ°Ô µÈ´Ù.
"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°¡ óÀ½ ³ª¿ÔÀ»¶§ ±× °ü½ÉÀº ´ë´ÜÇÑ °Í À̾ú´Ù.
ÀåÁ¡Àº ´ÙÀ½°ú °°´Ù.
- ÄÚµåÀÇ µ¶¸³¼º
- ´Ù¿î·Îµù¿¡ ÀÇÇÑ ¹«±¸Çö(no implementation)/À̵¿¼º ÄÚµå(mobile code)
- °´Ã¼ÁöÇâ¾ð¾î.
- ±âÁ¸ C¿Í C++¿Í ȣȯ¼º ¾øÀ½(?).
Á¤Á¡¿¡µµ ºÒ±¸ÇÏ°í ¿ì¸®´Â ´Ù¸¥ °üÁ¡¿¡¼ Java¸¦ ºÐ¼®ÇÒ Çʿ䰡 ÀÖ´Ù.
- Java´Â ¾ð¾îÀÌ´Ù. ¹Ý¸é¿¡ HTMLÀº Æ÷¸ÅÅÍ(?) ÀÌ´Ù.
- ÀÎÅͳÝÀÇ È®»êÀ» ÁÖµµÇß´ø À¥ ±¸¼º ¾ð¾îÀÎ HTMLÀº ºñ·Ï ¾ð¾î·Î
ȣĪµÇ°í ÀÖÀ¸³ª ±âÁ¸ÀÇ latex, postscript ÇüÅÂ, ¶Ç´Â ¾Æ·¡ Çѱ۰ú °°Àº
ÅØ½ºÆ® Æ÷¸ÅÅÍÀÌ´Ù. ´ÜÁö Â÷ÀÌ´Â ¸µÅ©¸¦ °®´Â´Ù´Â °ÍÀÌ´Ù. ±× °á°ú
»ç¿ëÀÚÀÇ Á¦ÇÑÀÌ Å©Áö ¾Ê´Ù´Â °ÍÀ̾ú´Ù.
¹Ý¸é¿¡ ¿µ¾î, ÀϾîó·³ ¾ð¾î¶ó´Â °ÍÀº ¹è¿ì±â°¡ ¸Å¿ì ¾î·Æ´Ù´Â °ÍÀÌ´Ù.
Á÷Á¢ »ç¿ëÇÏ°í ¼÷´ÞÇϴµ¥ ½Ã°£À» ¿ä±¸ÇÏ´Â ºÐ¾ßÀÎ °ÍÀÌ´Ù.
Java´Â ÀÌ·± °üÁ¡¿¡¼ ¾ð¾îÀ̱⠶§¹®¿¡ »ç¿ëÀÚ°¡ Á¦ÇÑµÉ ¼ö ¹Û¿¡ ¾ø°í,
±× °á°ú È®»ê¿¡ ¹®Á¦°¡ ÀÖ´Ù.
- °´Ã¼ÁöÇâ¾ð¾îÀÎ 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