Advanced Java Programming & Technology

Àå±Ô¿À
¼­¿ï½Ã ¼­´ë¹®±¸ ÃæÁ¤·Î 3°¡ 32-11 ÃæÁ¤ B/D 6Ãþ
¿¤¸²³×Æ® ÀÎÅͳݻç¾÷º»ºÎ À¥¼­ºñ½ºÆÀ
E-mail: kojang@ctkhost.ctk.co.kr
URL: http://www.elim.net/~kojang/
Abstract
ÀÚ¹Ù·Î ÇÑ ¹ø ÀÛ¼ºµÈ ÇÁ·Î±×·¥Àº ÀÚ¹Ù¸¦ Áö¿øÇÏ´Â ¸ðµç Ç÷§Æû¿¡¼­ ½ÇÇà °¡´ÉÇÕ´Ï´Ù. ±×¸®°í, ÀÚ¹ÙÇÁ·Î±×·¡¹ÖÀ» À§Çؼ­´Â Win95, À¯´Ð½º, ¸ÅŲÅä½Ã µî ¾î´À ȯ°æ¿¡¼­¶óµµ ¿ÀÁ÷ ÇѰ¡Áö API ÆÐŰÁö¸¸ ¹è¿ì¸é µË´Ï´Ù. ¶ÇÇÑ, ¾²·¹±â ó¸®(garbage collection)³ª, »ç¿ëÀÌ °£ÆíÇÑ ÆÐŰÁö´Â ÇÁ·Î±×·¡¸Ó¿¡°Ô ÁÁÀº ÇÁ·Î±×·¡¹Ö ȯ°æÀ» Á¦°øÇÕ´Ï´Ù.
ÀÎÅÍ³Ý ÇÁ·Î±×·¡¹Ö ¾ð¾î·Î½á ¾ÕÀ¸·ÎÀÇ ÀÚ¹ÙÀÇ °¡´É¼ºÀº ½Ç·Î ¹«ÇÑÇÏ´Ù°í º¼ ¼ö ÀÖ½À´Ï´Ù. º» ¹®¼­¿¡¼­´Â, ÀÚ¹Ù ¾ð¾î¸¦ ÀÌ¿ëÇÑ ÇÁ·Î±×·¡¹Ö ±â¹ýÁß¿¡¼­ Ãʺ¸ÀÚ°¡ ¾Æ´Ï´õ¶óµµ ´Ù·ç±â Èûµç ºÎºÐµé, Áï ÀÚ¹Ù¸¦ Á¢ÇÏ´Ù º¸¸é ¾ðÁ¦³ª ºÎ´ÚÄ¡´Â ¹®Á¦Á¡µéÀ» ¾Ë¾Æº¸°Ú½À´Ï´Ù. ¶ÇÇÑ, ÀÚ¹Ù¸¦ ¹è¿ì°íÀÚ ÇÏ´Â »ç¶÷µéÀÇ ÃÖ°íÀÇ °ü½É»ç·Î ¶°¿À¸£´Â ÀÚ¹Ù¸¦ ÀÌ¿ëÇÑ ¸ÖƼ¹Ìµð¾î ±â¹ý°ú, DB¿ÍÀÇ ¿¬µ¿°ü°è µî¿¡ ´ëÇØ¼­µµ Â÷±ÙÂ÷±Ù ¾Ë¾Æº¸°Ú½À´Ï´Ù. ±×¸®°í ¸¶Áö¸·À¸·Î ½Ç½Ã°£ ȯ°æ¿¡¼­ÀÇ ÀÚ¹Ù¿¡ ´ëÇØ¼­µµ Àá½Ã ¾Ë¾Æº¸°Ú½À´Ï´Ù.
Keywords:
WWW, Java, Thread, Multimedia, DB, Realtime, Workshop


1. ¼Ò°³.

ÀÚ¹Ù´Â ½ã ¸¶ÀÌÅ©·Î½Ã½ºÅÛ(Sun Microsystem)¿¡¼­ °³¹ßÇÑ °´Ã¼ ÁöÇâ ÇÁ·Î±×·¡¹Ö ¾ð¾îÀÔ´Ï´Ù. ÀÚ¹Ù´Â ÀÎÅͳÝȯ°æ°ú Ŭ¶óÀ̾ðÆ®/¼­¹ö ÇÁ·Î±×·¡¹Ö ºÐ¾ßÀÇ ¹®Á¦¸¦ ÇØ°áÇϱâ À§ÇØ ¼³°èÇÑ °ÍÀÔ´Ï´Ù. ÇöÀç ÀÚ¹Ù´Â 'JDK(Java Development Kit) 1.0' ¹öÀüÀÇ À̸§À¸·Î °ø°³µÇ°í ÀÖ½À´Ï´Ù.

ÀÚ¹Ù´Â ÇÁ·Î±×·¡¹Ö ¾ð¾îÀÇ ¹ßÀü¿¡ À־ ÀüÇô »õ·Î¿î °üÁ¡À» Á¦½ÃÇÕ´Ï´Ù. ÀÚ¹Ù´Â ±Ô¸ð°¡ ÀÛ°í °£´ÜÇÑ ¾ð¾îÀ̸鼭µµ ¸Å¿ì ´Ù¾çÇÑ ¼ÒÇÁÆ®¿þ¾î ¾ÖÇø®ÄÉÀÌ¼Ç ¿ä°ÇÀ» ÃæÁ·½Ãų ¼ö ÀÖÀ» ¸¸Å­ Æ÷°ýÀûÀÔ´Ï´Ù. ÀÚ¹Ù´Â ÇÇ»óÀûÀ¸·Î´Â C³ª C++°ú À¯»çÇÏÁö¸¸, ±âÁ¸ ¾ð¾îÀÇ ±â´ÉµéÀ» ü°èÀûÀ¸·Î Á¦°ÅÇÔÀ¸·Î½á ´Ü¼ø¼ºÀ» ´Þ¼ºÇÏ¿´½À´Ï´Ù. µû¶ó¼­ ÀÚ¹Ù¸¦ ÀÌ¿ëÇØ ÀÛ¼ºÇÑ ¾ÖÇø®ÄÉÀ̼ÇÀº C·Î ÀÛ¼ºÇÑ °Í°ú´Â ºñ±³ ÇÒ ¼ö ¾øÀ»¸¸Å­ Å©±â°¡ ¸Å¿ì ÀÛ½À´Ï´Ù.

ÀÚ¹ÙÀÇ ´ëÇ¥ÀûÀΠƯ¡À̶ó¸é, °´Ã¼ÁöÇâ ÇÁ·Î±×·¡¹Ö ȯ°æÇÏ¿¡ ¸ÖƼ½º·¹µå¸¦ Áö¿øÇÏ´Â °ÍÀÔ´Ï´Ù. ±×¸®°í, ³×Æ®¿÷ ÇÁ·Î±×·¡¹Ö¿¡ ¿ëÀÌÇÏ¸ç ºÐ»êȯ°æ¿¡ ÀûÇÕÇϰí, °­·ÂÇÑ ±×·¡ÇÈ »ç¿ëÀÚ ÀÎÅÍÆäÀ̽º(GUI)¸¦ Á¦°øÇÑ´Ù´Â °ÍÀÔ´Ï´Ù. µû¶ó¼­ Àß ÀÛ¼ºµÈ ÀÚ¹Ù ÇÁ·Î±×·¥Àº, ÀÚ¹ÙÀÇ Æ¯Â¡µéÀ» ÃæºÐÈ÷ »ì·Á°¡¸ç ÀÛ¼ºÇÑ °ÍÀÔ´Ï´Ù. ÀÚ¹ÙÀÇ ±â´ÉµéÀº JDKÀÇ ÆÐŰÁö(package)·Î ¸ðµÎ Á¦°øµÇ°í ÀÖ½À´Ï´Ù. º»¹®¿¡¼­´Â JDK¸¦ ÀÌ¿ëÇÑ °£´ÜÇÑ ¿¹Á¦ ÇÁ·Î±×·¥°ú ÇÔ²² ÀÚ¹ÙÀÇ ±â´ÉÀ» Çϳª¾¿ °æÇèÇØ º¸°Ú½À´Ï´Ù.



2. ´ÙÁß ½º·¹µå±â¹ý°ú µ¿±âÈ­ ±â¹ý.

½º·¹µå¶õ ÇÁ·Î¼¼½º ½ºÄÉÁÙ¸µ(process scheduling)ÀÇ ºÎ´ãÀ» ÁÙ¿© ¼º´ÉÀ» Çâ»ó ½Ã۱â À§ÇÑ ÇÁ·Î¼¼½ºÀÇ ´Ù¸¥ Ç¥Çö ¹æ½ÄÀÔ´Ï´Ù. ÀϹÝÀûÀ¸·Î ¶óÀÌÆ®¿þÀÌÆ® ÇÁ·Î¼¼½º(lightweight processes) ¶ó°íµµ À̾߱â ÇÕ´Ï´Ù. ÀÚ¹Ù´Â ÀÌ·¯ÇÑ µ¿½Ã ½ÇÇà ½º·¹µå¸¦ ¿©·¯°³ »ý¼ºÇÒ ¼ö ÀÖ½À´Ï´Ù. C¿Í C++´Â ´ÜÀÏ ½ÇÇà ½º·¹µå ÆÐ·¯´ÙÀÓ¿¡ ¼ÓÇÏ´Â ¾ð¾î·Î¼­, ½º·¹µå¿¡ ´ëÇÑ ¾ð¾î ¼öÁØ(language-level) Áö¿øÀ» Á¦°øÇÏÁö ¸øÇÕ´Ï´Ù. ÇÏÁö¸¸ ÀÚ¹Ù´Â ´ÙÁß ½º·¹µå¿¡ ´ëÇÑ ¾ð¾î ¼öÁØ Áö¿øÀ» Á¦°øÇÏ¿©, ´õ¿í ´Ù¾çÇÏ°í °­·ÂÇÑ ÇÁ·Î±×·¡¹Ö Á¢±ÙÀ» À¯µµÇÕ´Ï´Ù.

ÀÚ¹Ù¿¡¼­ ½º·¹µå¸¦ ÀÌ¿ëÇÑ ÇÁ·Î±×·¡¹Ö ±â¹ýÀº ÇϳªÀÇ ½º·¹µå¸¦ ÀÌ¿ëÇØ¼­ ÇÁ·Î±×·¥À» ÀÛ¼ºÇÒ°æ¿ì¿¡ »õ·Î¿î °³³äÀÌ ¾ø½À´Ï´Ù. ÁøÁ¤ÇÑ ½º·¹µå ÇÁ·Î±×·¡¹ÖÀ̶ó¸é ÇϳªÀÇ ¼øÂ÷ÀûÀÎ ½º·¹µå°¡ ¾Æ´Ï¶ó, ÇÁ·Î±×·¥³»¿¡¼­ µ¿½Ã¿¡ ¿©·¯°¡Áö ÀÏÀ» ¼öÇàÇÏ´Â ´ÙÁß ½º·¹µå¸¦ »ç¿ëÇÏ´Â °ÍÀÔ´Ï´Ù.

½º·¹µå¸¦ Á¦´ë·Î »ç¿ëÇϱâ À§Çؼ­´Â ½º·¹µå°¡ ½ÇÇàµÇ´Â ¿©·¯ °¡Áö ¼Ó¼º°ú ±¸Á¶¿¡ ´ëÇØ¼­ Àß ¾Ë¾Æ¾ß ÇÕ´Ï´Ù. ¶ÇÇÑ, ¿©·¯°³ÀÇ ½º·¹µå°¡ »ý¼ºµÇ¾î ½ÇÇàµÉ ¶§¿¡ ½º·¹µåµé°£ÀÇ µ¿±âÈ­, ±³Âø»óÅ µî ¹ß»ýÇÒ ¼ö ÀÖ´Â ¿©·¯ °¡Áö ¹®Á¦Á¡À» ÇØ°áÇÏ´Â ¹æ¹ýÀ» ÀÍÇô¾ßÇÔ ÇÕ´Ï´Ù.

2.1 ½º·¹µå »ý¼ºÇϱâ.

ÀÚ¹Ù¿¡¼­ ½º·¹µå¸¦ »ç¿ëÇÏ´Â ¹æ¹ý¿¡´Â µÎ °¡Áö°¡ ÀÖ½À´Ï´Ù. Çϳª´Â Thread Ŭ·¡½ºÀÇ ±â´ÉÀ» »ó¼Ó¹Þ´Â ¹æ¹ýÀ̰í, ´Ù¸¥Çϳª´Â Runnable ÀÎÅÍÆäÀ̽º¸¦ »ç¿ëÇÏ´Â ¹æ¹ýÀÔ´Ï´Ù.

´ÙÀ½Àº Thread Ŭ·¡½º¸¦ ÀÌ¿ëÇÑ ½º·¹µå »ý¼º ±â¹ýÀÇ ÇÁ·Î±×·¥ ±¸Á¶ÀÔ´Ï´Ù.

class BarThread extends Thread { .... public void run() { } .... }
[Applet Example 01]

À§ÀÇ ÇÁ·Î±×·¥¿¡¼­, 'BarThread'´Â 'Thread' Ŭ·¡½º¿¡¼­ ÆÄ»ýµÈ Ŭ·¡½ºÀÔ´Ï´Ù. ½º·¹µåÀÇ ÁÖ¿ä ±â´ÉÀ» ¼öÇàÇÏ´Â 'run' ¸Þ¼Òµå´Â ÀÚ¹ÙÀÇ ¿À¹ö¶óÀ̵å(override) ±â¹ýÀ» ÀÌ¿ëÇÏ¿© »õ·Ó°Ô Á¤ÀÇÇϰí ÀÖ½À´Ï´Ù.

'BarThread' Ŭ·¡½º´Â 'Thread' Ŭ·¡½ºÀÇ ³»¿ëÀ» »ó¼Ó ¹ÞÀ½À¸·Î½á ½º·¹µåÀÇ ±âº»ÀûÀÎ ±â´ÉÀ» °¡Áö°ÔµÇ¾ú°í, 'run'¸Þ¼Òµå¸¦ »õ·Ó°Ô Á¤ÀÇÇÔÀ¸·Î½á »õ·Î¿î ¸ð½ÀÀÇ ¿Ïº®ÇÑ ½º·¡µå¸¦ Á¤ÀÇÇÏ¿´½À´Ï ´Ù.

´ÙÀ½Àº 'Runnable' ÀÎÅÍÆäÀ̽º(interface)¸¦ ÀÌ¿ëÇÑ ½º·¹µå »ý¼º ±â¹ýÀÇ ÇÁ·Î±×·¥ ±¸Á¶ÀÌ´Ù.

class BarThreadTest extends Applet implements Runnable { Thread mythread; .... public void start() { mythread = new Thread(this); } public void run() { } .... }
[Applet Example 02]

ÀÚ¹Ù¿¡¼­´Â ´ÙÁß »ó¼ÓÀ» Áö¿øÇÏÁö ¾Ê½À´Ï´Ù. ºÎ¸ðŬ·¡½º°¡ ¹Ù²î¸é, ¿ÏÀüÈ÷ ÀçÄÄÆÄÀÏÇØ¾ß ÇÏ´Â C++ ÄÚµå¿Í´Â ´Þ¸®, ÀÚ¹Ù´Â ÀÌ·¯ÇÑ Á¾¼Ó¼ºÀ» ¿ÏÈ­½ÃŰ´Â ÀÎÅÍÆäÀ̽º ¸Þ¼Òµå¸¦ »ç¿ëÇÕ´Ï´Ù. ÀÎÅÍ ÆäÀ̽º´Â Ç¥ÁØÀûÀÎ ¾ö°ÝÇÑ Å¬·¡½º »ó¼Ó ±¸Á¶¸¦ ÀÌ¿ëÇÒ ¶§ÀÇ ¾î·Á¿òÀ» °ÞÁö ¾ÊÀ¸¸é¼­ ´ÙÁß »ó ¼Ó ÀÇ ÀÕÁ¡À» Ȱ¿ëÇÏ´Â ±â¹ýÀÔ´Ï´Ù.

À§ ÇÁ·Î±×·¥¿¡¼­, 'BarThreadTest' Ŭ·¡½º´Â 'Applet' Ŭ·¡½º·ÎºÎÅÍ »ó¼ÓÀ» ¹Þ½À´Ï´Ù. ±×¸®°í, ½º ·¹µå¸¦ »ç¿ëÇϱâ À§ÇÏ¿© 'Runnable' ÀÎÅÍÆäÀ̽º¸¦ »ç¿ëÇϰí 'run()' ¸Þ¼Òµå¸¦ »õ·Ó°Ô Á¤ÀÇ ÇÕ´Ï ´Ù. ±×·¡¼­, 'mythread'°¡ ½ÇÇàµÉ ¶§¿¡´Â 'Thread' Ŭ·¡½º ³»ºÎ¿¡ ±âº»ÀûÀ¸·Î Á¤ÀǵǾî ÀÖ´Â 'run()' ¸Þ¼Òµå°¡ ½ÇÇàµÇÁö ¾Ê°í, 'BarThreadTest' Ŭ·¡½º¿¡ ¿À¹ö¶óÀÌµå µÇ¾î »õ·Ó°Ô Á¤ÀÇµÈ 'run()' ¸Þ¼Òµå¸¦ ½ÇÇà ½ÃŰ°Ô µË´Ï´Ù. Àߺ¸¸é, 'mythread'¸¦ »ý¼ºÇϱâ À§ÇØ 'this' ¶ó´Â °ªÀ¸·Î 'BarThreadTest'ÀÇ À§Ä¡¸¦ ¾Ë·ÁÁÖ°Ô µË´Ï´Ù.

2.2 ½º·¹µåÀÇ µ¿±âÈ­

ÀÚ¹Ù´Â ¾ð¾îÀûÀÎ Â÷¿ø¿¡¼­ ¸ÖƼ½º·¹µùÀ» Áö¿øÇÕ´Ï´Ù. Áï, JDK¿¡¼­ ½º·¹µå °´Ã¼¸¦ Á¦°øÇϸç, ÀÚ ¹Ù ·±Å¸ÀÓ ½Ã½ºÅÛ¿¡¼­ ½º·¹µå Á¦¾î±¸Á¶¸¦ Á¦°øÇÕ´Ï´Ù. ¿©·¯°³ÀÇ ½º·¹µå°¡ µ¿½Ã¿¡ ½ÇÇàµÇ¸é¼­, °° Àº µ¥ÀÌÅͳª, ¸Þ¼Òµå¸¦ »ç¿ëÇÒ¶§¿¡´Â ÁÖÀÇÇØ¾ßÇÒ Á¡ÀÌ ¸î°¡Áö ÀÖ½À´Ï´Ù.

ÇÑ ¿¹·Î Űº¸µåÀÇ ÀԷ°úÁ¤À» ¾Ë¾Æº¸°Ú½À´Ï´Ù. »ç¿ëÀÚ°¡ ÀÔ·ÂÇÑ Å¶°ªÀº Űº¸µå ¹öÆÛ¿¡ ½×ÀÌ°Ô µÇ°í, CPU´Â Űº¸µå ¹öÆÛ¿¡¼­ Ŷ°ªÀ» Àоî¿À°Ô µÇ¾îÀÖ½À´Ï´Ù. ±×·±µ¥, Űº¸µå ¹öÆÛ°¡ ²ËÂ÷Àִµ¥ »ç¿ëÀÚ°¡ Ŷ°ªÀ» µ¤¾î¾²´Â °æ¿ì¿Í, Űº¸µå ¹öÆÛ¿¡ Ŷ°ªÀÌ ¾ø´Âµ¥ CPU°¡ Áߺ¹ÇÏ¿© Àоî¿À·Á´Â °æ ¿ì°¡ ÀÖÀ» ¼ö ÀÖ½À´Ï´Ù. ÀÌ·± °æ¿ì¿¡¼­ »ç¿ëÀÚ¿Í, CPU¸¦ °¢°¢ÀÇ ½º·¹µå·Î º¼ ¼ö ÀÖ°í, Űº¸µå ¹ö ÆÛ´Â ½º·¹µå°¡ µ¿½Ã¿¡ »ç¿ëÇÏ´Â °øµ¿ µ¥ÀÌÅͶó°í º¼ ¼ö ÀÖ½À´Ï´Ù.

±âÁ¸ÀÇ ¸ÖƼ ½º·¹µå ÇÁ·Î±×·¡¹Ö ȯ°æ¿¡¼­ °øÅë µ¥ÀÌÅ͸¦ ó¸®ÇÏ´Â ÀӰ迵¿ª(critical section)À»



[±×¸² 1]


ó¸®ÇÒ ¶§ ¸¹Àº ¾î·Á¿òÀÌ ÀÖ¾ú½À´Ï´Ù. ÀÌ·¯ÇÑ ¹®Á¦´Â ¼¼¸¶Æ÷¾î¿Í °°Àº °ÍÀ» ÀÌ¿ëÇÏ¿© ÇØ°áÇßÁö¸¸, ¼¼¸¶Æ÷¾î¸¦ ÀÌ¿ëÇÑ ±â¹ýÀº »ó´çÈ÷ ¾î·Á¿î ÇÁ·Î±×·¡¹Ö °úÁ¤À̾ú°í, ³Ê¹« º¹ÀâÇÏ¿© ÇÑÆíÀ¸·Ð È®½ÇÇÏÁö ¾ÊÀº À§ÇèÇѱâ¹ý À̾ú½À´Ï´Ù.

ÇÏÁö¸¸, ÀÚ¹Ù´Â ÀÌ·¯ÇÑ ¹®Á¦Á¡À» ¾ð¾îÀûÀÎ Â÷¿ø¿¡¼­ ÇØ°áÇϰí ÀÖ½À´Ï´Ù. 'synchronized'¶ó´Â Ű¿öµå·Î Á¤ÀÇµÈ ºí·ÏÀ̳ª ¸Þ¼Òµå´Â ¿ÀÁ÷ ÇϳªÀÇ ÇÁ·Î¼¼½º¸¸ÀÌ Á¢±ÙÇÒ ¼öÀÖµµ·Ï Á¦ÇÑÇÔÀ¸·Î½á, ÀӰ迵¿ªÀÇ ¹®Á¦¸¦ ½±°Ô ÇØ°áÇÏ¿´½À´Ï´Ù. ¶ÇÇÑ, ÀÚ¹Ù´Â ¸ð´ÏÅÍ ±â¹ýÀ» Á¦°øÇϰí ÀÖ½À´Ï´Ù. 'wait()' ¸Þ¼Òµå¿Í 'notify()'¸Þ¼Òµå¸¦ Á¦°øÇÔÀ¸·Î½á ¿©·¯°³ÀÇ ÇÁ·Î¼¼µåµé »çÀÌ¿¡¼­ ¸ð´ÏÅ͸¦ ÁÖ°í¹ÞÀ¸¸ç µ¿±âÈ­¸¦ ¾ÆÁÖ ½±°Ô ±¸ÇöÇÒ ¼ö ÀÖµµ·Ï Çϰí ÀÖ½À´Ï´Ù.

´ÙÀ½Àº Àß ÀÛ¼ºµÈ µ¿±âÈ­ ÇÁ·Î±×·¥ÀÇ °øÅë µ¥ÀÌÅ͸¦ Á¤ÀÇÇÑ ¿¹ÀÔ´Ï´Ù.

class BarInfo { private boolean canAccess = false; private int size=50; public synchronized void init() { canAccess = false; size = 50; } public int getSize(){ return size;}; public synchronized int smallerSize() { while(canAccess == false ) { try { wait(); } catch(Exception e) { } } size -=10; canAccess = false; System.out.println("smaller..."); notify(); return size; } public synchronized void largerSize() { while(canAccess == true ) { try { wait(); } catch(Exception e) { } } size += 10; canAccess = true; System.out.println("larger !!!"); notify(); } }
[Applet Example 03] [Applet Example 04]


[±×¸² 2]


À§ÀÇ ÇÁ·Î±×·¥¿¡´Â 'synchronized'·Î Á¤ÀÇµÈ µÎ °³ÀÇ ¸Þ¼Òµå°¡ ÀÖ½À´Ï´Ù. 'largeSize()' ¸Þ¼Òµå¿Í 'smallerSize()'¸Þ¼Òµå´Â 'wait()' ¸Þ¼Òµå¿Í 'notify()' ¸Þ¼Òµå¸¦ »ç¿ëÇÏ¿© ¸ð´ÏÅ͸¦ ÁÖ°í ¹ÞÀ¸¸ç ¼ø Â÷ÀûÀ¸·Î ½ÇÇà µË´Ï´Ù. 'canAccess'ÀÇ °ªÀ» º¯°æÇÕ´Ï´Ù. °á±¹, 'BarInfo' Ŭ·¡½ºÀÇ 'largerSize()' ¸Þ¼Òµå¿Í 'smallerSize()' ¸Þ¼Òµå´Â ¹ø°¥¾Æ°¡¸ç ÇÑ ¹ø¾¿ ½ÇÇàµÇ¸ç µ¿±âÈ­µÇ¾î ½ÇÇàµË´Ï´Ù.



3. ÀÚ¹Ù ÀÔ·Â, Ãâ·Â ±â¹ý

3.1 Űº¸µå, ¸¶¿ì½º 󸮱â¹ý.

ÀÚ¹Ù¿¡¼­´Â ÀϹÝÀûÀÎ ¾ð¾î¿¡¼­¿Í ¸¶Âù°¡Áö·Î Űº¸µå³ª, ¸¶¿ì½ºÀÇ ÀÔ·ÂÀ» ó¸®ÇÒ ¼ö ÀÖ½À´Ï´Ù. ÀÚ¹ÙÀÇ ÀÌ·¯ÇÑ ±â´ÉÀÌ ¿ùµå¿ÍÀ̵åÀ¥(WWW)¿¡ Àû¿ëµÇ¸é¼­ ´ëÈ­Çü À¥¼­ºñ½º¸¦ °¡´ÉÇÏ°Ô ÇÏ¿´½À´Ï ´Ù. ÀÚ¹Ù´Â »ç¿ëÀÚ¿¡°Ô Áï°¢ÀûÀ̰í Áö¼ÓÀûÀÎ ÀÚ±ØÀ» Á¦°øÇÔÀ¸·Î½á, À¥ÀÇ »óÈ£ÀÛ¿ë ¼öÁØÀ» Çâ»ó ½Ã Ä×½À´Ï´Ù. µ¿½Ã¿¡ ÀÚ¹Ù ¾ÖÇø´Àº »ç¿ëÀÚÀÇ ÀÔ·ÂÀ» Áö¼ÓÀûÀ¸·Î ¹Þ¾ÆµéÀ̰í ó¸®ÇÕ´Ï´Ù. ¶ÇÇÑ ÀÚ¹Ù ´Â ÀÌ·¯ÇÑ ÀԷ¿¡ ¹ÝÀÀÇϰí, »ç¿ëÀÚ¿¡°Ô Á¤ÀÇµÈ ¼­ºñ½º¸¦ Á¦°øÇÕ´Ï´Ù.

[Applet Example 05]


¶ÇÇÑ, ÀÚ¹Ù´Â ÀϹÝÀûÀÌ°í Æí¸®ÇÑ »ç¿ëÀÚ ÀÔ·Â, ¼±Åà ±â´ÉÀ» À§Çؼ­ AWT¸¦ Á¦°øÇÕ´Ï´Ù. AWT ¿¡¼­´Â Button, Choice, List, Edit µî°ú °°Àº ±×·¡ÇÈ »ç¿ëÀÚ ÀÎÅÍÆäÀ̽º(GUI; Graphic User Interface)¸¦ Á¦°øÇϰí ÀÖ½À´Ï´Ù.

ÀÚ¹ÙÀÇ ´Ù¾çÇÑ ÀÔ·ÂÀº AWT(Abstract Window Toolkit)ÀÇ À̺¥Æ®(Event)·Î½á ¸ðµÎ 󸮵˴ϴÙ. ÀÚ¼¼È÷¸»Çϸé, 'Component' ³»ºÎ¿¡¼­ »ç¿ëÀÚÀÇ ÀÔ·ÂÀÌ ÀÖÀ» ¶§ 'Event' °´Ã¼°¡ »ý¼ºµË´Ï´Ù. »ý¼º µÈ À̺¥Æ®´Â ±¸¼ºÀÚÀÇ °¢ °èÃþÀ» °ÅÄ¡¸é¼­ 󸮵˴ϴÙ. À̺¥Æ® ó¸® °úÁ¤¿¡¼­ ÇÊ¿ä¾ø´Â À̺¥Æ®´Â ¹«½ÃµÉ ¼ö ÀÖ½À´Ï´Ù. ÀÌ·¯ÇÑ AWTÀÇ À̺¥Æ® ó¸® ·çƾÀº À̺¥Æ® ÇÊÅ͸µ(event-filtering) ½Ã½ºÅÛ °ú À¯»çÇÕ´Ï´Ù.

¸ðµç À̺¥Æ®´Â 'handleEvent()' ¸Þ¼Òµå¿¡¼­ 󸮵˴ϴÙ. ±×¸®°í, 'handleEvent()'¿¡¼­ 󸮵Ǵ À̺¥Æ® ·çƾÀº À̺¥Æ®ÀÇ Á¾·ù¿¡ µû¶ó 'mouseEnter()' , 'mouseEnter()', 'mouseExit()', 'mouseMove()', 'mouseUp()', 'mouseDown()', 'mouseDrag()', 'keyDown()', 'action()' µîÀ¸·Î ºÐ·ù ÇÏ¿© Á¦°øÇϱ⵵ ÇÕ´Ï´Ù. µû¶ó¼­, ¸î°³ÀÇ ¸Þ½ÃÁö󸮴 'handleEvent()'¿¡¼­ ó¸®ÇÏÁö ¾Ê°í, ¸Þ½Ã Áö¿¡ ÇÊ¿äÇÑ °¢°¢ÀÇ ¸Þ¼Òµå¸¸À» »õ·Ó°Ô Á¤ÀÇÇÏ¿© »ç¿ëÇÕ´Ï´Ù.

´ÙÀ½Àº ÀϹÝÀûÀÎ 'handleEvent()' ¸Þ¼ÒµåÀÇ »ç¿ë, Á¤ÀÇ ¹æ¹ýÀÔ´Ï´Ù.

public boolean handleEvent(Event e) { if (e.target instanceof Scrollbar) { textField.setText(String.valueOf(slider.getValue())); controller.convert(this); } else if ((e.target instanceof TextField) && (e.id == Event.ACTION_EVENT)) { setSliderValue(getValue()); controller.convert(this); } else if ((e.target instanceof Choice) && (e.id == Event.ACTION_EVENT)) { controller.convert(this); } return false; }
[Applet Example 06]

3.2 ÀÔ/Ãâ·Â ½ºÆ®¸².

ÀÚ¹ÙÀÇ ÀÔ/Ãâ·Â ÆÐŰÁö(java.io package)´Â ±âÁ¸ÀÇ ÆÄÀÏÀ» ¸ðµÎ ½ºÆ®¸²(Stream)À¸·Î ó¸®ÇÕ´Ï´Ù. ½ºÆ®¸²Àº º¸´Ù ½±°Ô ÆÄÀÏÀ» Á¢±ÙÇÒ ¼ö ÀÖµµ·Ï ±¸¼ºµÇ¾î ÀÖ½À´Ï´Ù. ½ºÆ®¸²À» ÀÌ¿ëÇϸé ÀϹÝÀûÀÎ ÆÄÀÏ À̿ܿ¡µµ ³×Æ®¿÷ ¼ÒÄÏ(socket)À̳ª, ¹è¿­(array), ÆÄÀÌÇÁ(pipe) µîÀ» ½±°Ô Á¢±Ù ÇÒ ¼ö ÀÖ½À´Ï ´Ù. ÀÚ¹Ù¿¡¼­ Á¦°øÇÏ´Â ½ºÆ®¸²Àº Å©°Ô ÀÔ·Â ½ºÆ®¸²°ú, Ãâ·Â ½ºÆ®¸²ÀÌ ÀÖ½À´Ï´Ù.

ÀÔ·Â ½ºÆ®¸²Àº ÆÄÀÏÀ̳ª ¹®ÀÚ¿­ ¶Ç´Â ¸Þ¸ð¸® µî ´Ù¾çÇÑ Á¾·ùÀÇ µ¥ÀÌÅ͸¦ Àоî¿À´Â ±â´ÉÀ» °¡Áö °í ÀÖ½À´Ï´Ù. ÀԷ°ü·Ã Ŭ·¡½º´Â ¸ðµÎ 'InputStream' Ŭ·¡½º·ÎºÎÅÍ ÆÄ»ýµÇ¸ç, ¹ÙÀÌÆ® ´ÜÀ§·Î ÀаŠ³ª ¹ÙÀÌÆ®ÀÇ ¹è¿­À» Àд µî µ¿ÀÏÇÑ ÀÎÅÍÆäÀ̽º¸¦ Á¦°øÇϰí ÀÖ½À´Ï´Ù. ÀÔ·Â ½ºÆ®¸²À» »ý¼ºÇϸé ÀÚµ¿À¸·Î ÀÔ·Â ½ºÆ®¸²À» ¿­°Ô µÇ¸ç, ½ºÆ®¸²À» ´ÝÀ»¶§´Â 'close()' ¸Þ¼Òµå¸¦ ¸í½ÃÀûÀ¸·Î ¼±¾ðÇÕ´Ï ´Ù. ¸¸¾à ½ºÆ®¸²À» ´ÝÁö ¾ÊÀ¸¸é ¾²·¹±â ó¸®(Garbage Collection) ÀÛ¾÷¿¡¼­ ÀÚµ¿À¸·Î ´Ý½À´Ï´Ù.

Ãâ·Â ½ºÆ®¸²¿ª½Ã ÆÄÀÏÀ̳ª ¹®ÀÚ¿­ ¶Ç´Â ¸Þ¸ð¸® µî ´Ù¾çÇÑ °÷¿¡ µ¥ÀÌÅ׸¦ Ãâ·ÂÇÏ´Â ±â´ÉÀ» °¡Áö °í ÀÖ½À´Ï´Ù. Ãâ·Â°ü·Ã Ŭ·¡½º´Â ¸ðµÎ 'OutputStream' Ŭ·¡½º·ÎºÎÅÍ ÆÄ»ýµË´Ï´Ù. »ç¿ëÇÏ´Â ¹æ¹ýÀº ÀÔ·Â ½ºÆ®¸²°ú À¯»çÇϸç, Ãâ·Â ½ºÆ®¸²À» »ý¼ºÇϸé ÀÚµ¿À¸·Î Ãâ·Â ½ºÆ®¸²À» ¿­°Ô µÇ°í, ½ºÆ®¸²À» ´ÝÀ»¶§´Â 'close()' ¸Þ¼Òµå¸¦ ¸í½ÃÀûÀ¸·Î ¼±¾ðÇÕ´Ï´Ù. ¸¸¾à ½ºÆ®¸²À» ´ÝÁö ¾ÊÀ¸¸é ¾²·¹±â ó¸® (Garbage Collection) ÀÛ¾÷¿¡¼­ ÀÚµ¿À¸·Î ´Ý½À´Ï´Ù.

´ÙÀ½Àº ÆÄÀÏÀ» ¿­°í Àаí/¾²´Â ¿¹Á¦ ÇÁ·Î±×·¥ÀÔ´Ï´Ù.

FileInputStream fin; FileOuputStream fout; public void openFile() { try { fin = new FileInputStream("index.html"); } catch(Exception e) { System.out.println("index.html open error..."); } try { fout = new FileOutputStream("index.out.html"); } catch(Exception e) { System.out.println("index.out.html open error..."); } System.out.println("Success open files..."); } public void readFile() { byte b[] = new byte[1000] int nr_read = 0 while(true) { try { nr_read = fin.read(b) } catch(Exception e) if(nr_read == -1) break theArea.appendText(new String(b, nr_read)+"\n") }
[Applet Example 07]

¾ÆÁ÷±îÁö´Â º¸¾È»óÀÇ ¹®Á¦·Î, ¾ÖÇø´ ÇÁ·Î±×·¥¿¡¼­´Â 'Socket'À» ÀÌ¿ëÇÑ ³×Æ®¿÷ Á¢±Ù ¹æ¹ý°ú 'FileInputStream/FileOutputStream' ÇüÅÂÀÇ Á¢±ÙÀ» Çã¿ëÇÏÁö ¾Ê½À´Ï´Ù. µû¶ó¼­, ÀϹÝÀûÀ¸·Î ¾ÖÇà ¸´ ÇÁ·Î±×·¥¿¡¼­ ÆÄÀÏÁ¢±Ù ¹æ½ÄÀº ´ÙÀ½°ú °°½À´Ï´Ù.

´ÙÀ½Àº URLÇü½ÄÀÇ ÆÄÀÏ Á¢±Ù ¿¹ÀÔ´Ï´Ù.

DataInputStream din; public void openFile() { URL url=null; try { url = new URL(getCodeBase(), "index.html"); din = new DataInputStream(url.openStream()); } catch(Exception e) { theArea.appendText("index.html open error...\n"); } } public void readFile() { String line=null; while(true) { try { if((line = din.readLine()) == null) break; } catch(Exception e){ break; } theArea.appendText(line+"\n"); } }
[Applet Example 08]

ÆÄÀÏÀ» Á¢±ÙÇϱâ À§Çؼ­ 'URL' Ŭ·¡½º¸¦ ÀÌ¿ëÇÏ¿© ÆÄÀÏÀ» Àоî¿ÂÈÄ 'DataInputStream'À» »ý¼º ÇÕ´Ï´Ù. ±×¸®°í, 'openStream()'¸Þ¼Òµå¸¦ ÀÌ¿ëÇØ¼­ ÆÄÀÏ ½ºÆ®¸² ÇüÅ·ΠÁ¢±ÙÇϸç, 'readLine()'¸Þ¼Ò µå¸¦ ÀÌ¿ëÇÏ¿© ÆÄÀÏÀ» ÀоîµéÀÔ´Ï´Ù.



4. ÀÚ¹Ù ¸ÖƼ¹Ìµð¾î ±â¹ý.

ÀÚ¹Ù´Â AWT¸¦ ÅëÇÏ¿© À©µµ¿ì, ¸Þ´º, ¹öư, ¸®½ºÆ®, ¿¡µðÆ® µî ±×·¡ÇÈ »ç¿ëÀÚ ÀÎÅÍÆäÀ̽º(GUI) ¸¦ Á¦°øÇÕ´Ï´Ù. ¶ÇÇÑ, AWT´Â À̹ÌÁö, À̺¥Æ®, »ö»ó, ÆùÆ® µî ´Ù¾çÇÑ ÆÐŰÁö¸¦ Á¦°øÇÕ´Ï´Ù. µû¶ó ¼­, ±âÁ¸ÀÇ À©µµ¿ìÁî ÇÁ·Î±×·¡¹Ö¿¡¼­ °¡´ÉÇß´ø °ÍÀ» ÀÚ¹Ù¿¡¼­ ±×´ë·Î Ç¥Çö °¡´ÉÇÕ´Ï´Ù. ƯÈ÷, ÀÚ ¹Ù°¡ ¸ÖƼ¹Ìµð¾î ÇÁ·Î±×·¡¹Ö¿¡ ÀûÇÕÇÑ ÀÌÀ¯´Â, À̹ÌÁö ÆÄÀÏ(GIF, JPG)°ú, ¿Àµð¿À ÆÄÀÏ(AU)À» ½± °Ô ÄÁÆ®·Ñ ÇÒ ¼ö ÀÖ´Â ±â´ÉÀ» Á¦°øÇÑ´Ù´Â °ÍÀÔ´Ï´Ù. ±×·¯¸é ´ÙÀ½ ³»¿ë¿¡¼­ ±×·¡ÇÈ ÀÚ¿øÀÇ »ç¿ë¹ý °ú, À̹ÌÁö, ¿Àµð¿À¸¦ ÀÌ¿ëÇÑ ¿¡´Ï¸ÞÀÌ¼Ç ÇÁ·Î±×·¡¹Ö¿¡ ´ëÇØ¼­ ¾Ë¾Æº¸°Ú½À´Ï´Ù.

'paint()', 'repaint()', 'update()' ¸Þ¼Òµå´Â ±×·¡ÇÈ Ãâ·ÂÀ» À§ÇÑ ±âº»ÀûÀÎ ¸Þ¼ÒµåÀÔ´Ï´Ù. 'paint()' ¸Þ¼Òµå´Â ¾ÖÇø´ÀÌ Ã³À½ »ý¼ºµÉ ¶§, ¶Ç´Â ´Ù¸¥ À©µµ¿ì Å©±â°¡ º¯°æµÇ¾ú°Å³ª ´Ù¸¥ À©µµ¿ì¿¡ ÀÇÇØ °¡·ÁÁ®¼­ »õ·Ó°Ô È­¸éÀ» ±×·ÁÁà¾ß ÇÒ Çʿ䰡 ÀÖÀ» ¶§ È£ÃâµÇ´Â ¸Þ¼Òµå ÀÔ´Ï´Ù. Áï, À̰÷¿¡¼­ ó¸® µÈ ³»¿ëÀº È­¸é¿¡ ±×´ë·Î Ãâ·ÂµË´Ï´Ù. ±×¹Û¿¡ ¸¶¿ì½º ¹öưÀÌ ´­·¯Á³´Ù´øÁö, ¶Ç´Â Űº¸µåÀÇ ÀԷ¿¡ ÀÇÇØ¼­ »õ·Ó°Ô È­¸éÀ» °»½ÅÇÒ Çʿ䰡 ÀÖÀ» ¶§ 'repaint()' ¸Þ¼Òµå¸¦ »ç¿ëÇÕ´Ï´Ù. À̶§ 'repaint()'¸Þ ¼Òµå´Â ´Ù½Ã 'update()'¸Þ¼Òµå¸¦ È£ÃâÇÕ´Ï´Ù. ±×·¯¸é ´Ù½Ã 'update()' ¸Þ¼Òµå´Â ±×¶§ÀÇ »óȲ¿¡ ¸Â °Ô È­¸éÀ» °»½Å ½ÃÄÑÁÖ¸é µË´Ï´Ù.

ÀϹÝÀûÀ¸·Î 'paint()' ¸Þ¼Òµå¿Í 'update()' ¸Þ¼Òµå´Â ºñ½ÁÇÑ ¼º°ÝÀ» °¡Áö°í ÀÖ½À´Ï´Ù. ´Ù¸¥Á¡Àº 'paint()' ¸Þ¼Òµå´Â ¹ÙÅÁºÎÅÍ »õ·Ó°Ô Áö¿ì°í »õ·Ó°Ô È­¸éÀ» Ãâ·ÂÇÏÁö¸¸, 'update()' ¸Þ¼Òµå´Â ¹ÙÅÁ À» Áö¿ìÁö ¾Ê°í ÇöÀç È­¸é¿¡¼­ ÇÊ¿äÇÑ ºÎºÐ¸¸À» »õ·Ó°Ô °»½ÅÇÕ´Ï´Ù. µû¶ó¼­, ¾Ö´Ï¸ÞÀÌ¼Ç ÇÁ·Î±×·¥ À̳ª ½ºÅ©·ÑÀÌ µÇ´Â ÇÁ·Î±×·¥¿¡¼­ 'update()' ¸Þ¼Òµå¸¦ Á¤ÀÇÇÔÀ¸·Î½á ±ôºýÀÓÀ» ÁÙÀÏ ¼ö ÀÖ½À´Ï´Ù.

´ÙÀ½Àº È­¸éÃâ·Â ¸Þ¼Òµå¸¦ »ç¿ëÇÏ¿© È­¸éÀ» °»½ÅÇÏ´Â ¾ÖÇø´ÀÇ ÇÁ·Î±×·¥ ±¸Á¶ÀÔ´Ï´Ù.

public class ClockApplet extends Applet implements Runnable { .... public void run() { while (clockThread != null) { repaint(); count++; try { clockThread.sleep(1000); } catch (InterruptedException e){ } .... } } public void paint(Graphics g) { .... g.setColor(Color.blue); g.drawString("This is count test !!!!", 10, 20); } public void update(Graphics g) { .... g.setColor(Color.red); g.drawString("count = "+count, 10, 40); } .... }

À§ÀÇ ÇÁ·Î±×·¥¿¡¼­ óÀ½ È­¸é Ãâ·ÂÀ» À§ÇØ 'paint()' ¸Þ¼Òµå°¡ È£ÃâµË´Ï´Ù. ±×¸®°í, ½º·¹µå¸¦ ÀÌ ¿ëÇÏ¿© 1ÃÊ¿¡ ÇÑ ¹ø¾¿ 'repaint()' ¸Þ¼Òµå¸¦ È£ÃâÇÏ¿© 'update()' ¸Þ¼Òµå¸¦ È£ÃâÇÔÀ¸·Î½á È­¸éÀ» °»½ÅÇÏ°Ô µË´Ï´Ù. Áï, 'paint()' ¸Þ¼Òµå À̿ܿ¡ 'update()' ¸Þ¼Òµå¸¦ µû·Î Á¤ÀÇÇÏ´Â ÀÌÀ¯´Â È­¸éÀÌ °»½ÅµÉ ¶§ ±ôºýÀÓÀ» ÁÙÀ̱â À§ÇÔ ÀÔ´Ï´Ù. ±×·¯³ª 'update()' ¸Þ¼Òµå´Â È­¸éÀ» Áö¿ìÁö ¾Ê°í Ãâ·ÂÇÏ ±â ¶§¹®¿¡, È­¸é¿¡ Ãâ·ÂµÇ´Â ³»¿ëÀº °ãÃÄÄ¡°Ô µË´Ï´Ù.

'update()' ¸Þ¼Òµå¸¦ Àß Á¤ÀÇÇÔÀ¸·Î½á ¿¡´Ï¸ÞÀ̼ÇÀ̳ª ½ºÅ©·Ñ ±â¹ýÀ» ±¸ÇöÇÒ ¼ö ÀÖ½À´Ï´Ù. ±×·¯ ³ª, ÀÌ·¯ÇÑ ±â¹ýÀº 󸮵Ǵ ³»¿ëÀÌ ´Ù¾çÇϰí Ãâ·ÂµÇ´Â ³»¿ëÀÌ ¸¹À»°æ¿ì, ¿ª½Ã È­¸éÀÇ ±ôºýÀÓÀÌ ½ÉÇØÁý´Ï´Ù. µû¶ó¼­, Á»´õ ±ò²ûÇÑ È­¸é 󸮸¦ À§Çؼ­ È­¸éÃâ·Â ÀÌÀü¿¡ ¸Þ¸ð¸®»ó¿¡¼­ ¹Ì¸® Ãâ·ÂÇÏ °í ½ÇÁ¦È­¸é¿¡´Â ´Ü Çѹø¸¸ Ãâ·ÂÇÏ´Â ±â¹ýÀ» »ç¿ëÇÕ´Ï´Ù. ÀÌ·¯ÇÑ ¹æ¹ýÀ» ´õºí ¹öÆÛ¸µ(Double Buffering)À̶ó°í ÇÕ´Ï´Ù.

´ÙÀ½Àº ´õºí ¹öÆÛ¸µÀ» ÇÏ´Â ÇÁ·Î±×·¥ ±¸Á¶ÀÔ´Ï´Ù.

public class ClockApplet extends Applet implements Runnable { Image bufferimg; Graphics buffermap; boolean isbegin = true; public void paint(Graphics g) { if(isbegin == true) { bufferimg = createImage(image_w, image_h); buffermap = bufferimg.getGraphics(); isbegin = false; } .... buffermap.setColor(Color.blue); buffermap.drawString("This is count test !!!!", 10, 20); g.drawImage(bufferimg, 0, 0, this); } .... public void update(Graphics g) { .... buffermap.setColor(Color.red); buffermap.drawString("count = "+count, 10, 40); g.drawImage(bufferimg, 0, 0, this); } .... }
[Applet Example 09]

ÀϹÝÀûÀÎ ¿¡´Ï¸ÞÀ̼ÇÀÇ ±¸ÇöÀº À§¿Í°°Àº È­¸éó¸® ±â¹ýÇÏ¿¡ ¾à°£ÀÇ ½Ã°£ °£°ÝÀ» Áָ鼭 ¿©·¯Àå ÀÇ À̹ÌÁö¸¦ ¹ø°¥¾Æ º¸¿©ÁÖ´Â Çü½ÄÀ¸·Î ±¸ÇöµË´Ï´Ù. ¶ÇÇÑ »ç¿îµå±îÁö Áö¿øµÇ¸é º¸´Ù ÁÁÀº È¿°ú¸¦ ³¾ ¼ö ÀÖ½À´Ï´Ù. ´ÙÀ½Àº ÀÚ¹Ù¿¡¼­ À̹ÌÁö ÆÄÀϰú »ç¿îµå ÆÄÀÏÀ» Àаí, Ãâ·ÂÇÏ´Â ¸Þ¼ÒµåÀÇ »ç¿ë ¹æ ¹ýÀÔ´Ï´Ù.

´ÙÀ½Àº ´õºí ¹öÆÛ¸µÀ» ÀÌ¿ëÇϸ鼭 ½ºÅ©·Ñµµ ½ÃŰ´Â ¿¹Á¦ÇÁ·Î±×·¥ ÀÔ´Ï´Ù.

¢¹ À̹ÌÁö Àбâ Image animFrame; public void init() { animFrame = getImage(getCodeBase(), "images/frame01.gif"); .... } ¢¹ À̹ÌÁö Ãâ·Â public void paint(Graphics g) { g.drawImage(animFrame, 0, 0, this); } ¢¹ ¿Àµð¿À Àбâ AudioClip background; public void init() { background = getAudioClip(getCodeBase(), "audio/backmusic.au"); .... } ¢¹ ¿Àµð¿À Ãâ·Â public void start() { background.loop(); .... } ¶Ç´Â public void paint(Graphics g) { background.play(); .... }
[Applet Example 10]

À§¿Í°°ÀÌ 'getImage()', 'getAudioClip()' ¸Þ¼Òµå¸¦ »ç¿ëÇÏ¿© URLÇü½ÄÀ» ÅëÇÏ¿© À̹ÌÁö¿Í ¿Àµð ¿À ÆÄÀÏÀ» Àоî¿Ã ¼ö ÀÖ½À´Ï´Ù. Àоî¿Â ³»¿ëÀº 'drawImage()', 'loop()', 'play()' ¸Þ¼Òµå·Î Ãâ·Â ÇÒ ¼ö ÀÖ½À´Ï´Ù.



5. DB/CGI·ÎÀÇ ÀÀ¿ë.

ÀÎÅͳÝÀÇ Á¤º¸´Â Á¡Á¡ ´Ã¾î¸¸°¡°í, ±× ¸¹Àº Á¤º¸Áß¿¡¼­ º¸´Ù Á¤È®ÇÑ ÀڷḦ ã±âÀ§ÇØ ÀÎÅͳݻó ÀÇ Á¤º¸µéÀº Á¡Â÷ DBÈ­µÇ°í ÀÖ½À´Ï´Ù. ƯÈ÷, ±âÁ¸ÀÇ PCÅë½Å»ó¿¡¼­ DB¼­ºñ½º¸¦ Çϰí Àְųª, ÀÚ Ã¼ DB¸¦ °¡Áö°í ÀÖ´Â ±â¾÷À̳ª ´Üü¿¡¼­´Â ±× DB¸¦ WWW»ó¿¡¼­µµ ¼­ºñ½º Çϱâ À§Çؼ­ »ó´çÇÑ °ü½ÉÀ» °¡Áö°í ÀÖ½À´Ï´Ù.

ÇöÀç WWW»ó¿¡¼­´Â CGI¶ó´Â ±â¹ýÀ¸·Î ´ÙÀ½ ±×¸²°ú °°ÀÌ DB ¼­ºñ½º¸¦ Çϰí ÀÖ½À´Ï´Ù.



[±×¸² 3]


ÀÌ·¯ÇÑ ¼­ºñ½º´Â »ç¿ëÀÚ°¡ ¼­¹öÂÊÀÇ CGI ÇÁ·Î±×·¥À» ½ÇÇà½Ã۸é, ¼­¹öÂÊÀÇ CGI ÇÁ·Î±×·¥ÀÌ DB¸¦ ÂüÁ¶ÇÏ¿© ±× ³»¿ëÀ» HTMLÇü½ÄÀ¸·Î ºê¶ó¿ìÀú¿¡ º¸³»ÁÖ´Â Çü½ÄÀ̾ú½À´Ï´Ù. ÀÌ·¯ÇÑ ±¸Á¶´Â ºê¶ó¿ìÀú³ª, ¼­¹ö¿¡¼­ Áö¿øÇÏ´Â Çü½Ä¿¡ ¸ÂÃß¾î Ãâ·ÂÇØÁÖ¾î¾ß ÇÕ´Ï´Ù. ¿©·¯ °¡Áö ȯ°æº¯¼ö¸¦ ÀÌ¿ë ÇÏ¿© ³×Æ®¿÷»ó¿¡¼­ Á¤º¸¸¦ Àü¼ÛÇÏ¿©, °á±¹ HTML Çü½ÄÀ¸·Î Ãâ·ÂÇØÁÝ´Ï´Ù.

CGI¸¦ ÀÌ¿ëÇÑ DB¼­ºñ½º´Â ±âÁ¸ÀÇ HTML°ú ºñ±³Çغ¼¶§¿¡ ³»¿ë°ú °á°úÀÇ ¾çÀº À¯µ¿ÀûÀÌÁö¸¸, Ãâ·ÂµÇ´Â ¹®¼­ÇüÅ´ °á±¹ Á¤ÇØÁø HTMLÇü½Ä¿¡ µû¸£µµ·Ï µÇ¾îÀÖ½À´Ï´Ù. ¶ÇÇÑ, »ç¿ëÀÚ°¡ ºê¶ó¿ì Àú »ó¿¡¼­ CGI¸¦ ½ÇÇà½ÃÄÑ¾ß »õ·Î¿î ³»¿ëÀ» °¡Á®¿À´Â ¾ÆÁÖ ¼öµ¿ÀûÀÎ ¼­ºñ½º ¿´½À´Ï´Ù.

ÀÚ¹Ù´Â ±âº»ÀûÀ¸·Î ´Éµ¿ÀûÀ̸鼭µµ »óÈ£ ´ëÈ­Çü ¼­ºñ½º°¡ °¡´ÉÇϱ⠶§¹«¿¡ ÀÌ·¯ÇÑ CGIÀÇ ´ÜÁ¡ À» ±Øº¹ÇÒ ¼ö ÀÖ½À´Ï´Ù. ±×¸®°í, ÀÚ¹Ù´Â ±×·¡ÇÈȯ°æÀ» Áö¿øÇϱ⠶§¹®¿¡ CGI¿Í´Â ºñ±³ÇÒ ¼ö ¾ø´Â ±×·¡ÇÈÄÃÇÏ°í µ¿ÀûÀÎ ¼­ºñ½º¸¦ WWW»ó¿¡¼­ °¡´ÉÇÏ°Ô ÇØÁÖ°í ÀÖ½À´Ï´Ù.

´ÙÀ½Àº ÀÚ¹Ù¸¦ ÀÌ¿ëÇÑ DB ¼­ºñ½ºÀÇ ÇüÅ ÀÔ´Ï´Ù.



[±×¸² 4]


ÀÚ¹Ù¸¦ ÀÌ¿ëÇÑ DBÁ¢±Ù ¹æ¹ýÀº CGI¿Í´Â ´Þ¸® ÇÁ·Î±×·¥ ÀÚü°¡ ÀÎÅͳÝÀ» °Ç³Ê¿Í ÀÚ½ÅÀÇ ÄÄÇ»ÅÍ ¿¡¼­ ½ÇÇàµÇ´Â ±¸Á¶¸¦ °¡Áö°í ÀÖ½À´Ï´Ù. µû¶ó¼­, Á÷Á¢ DB¸¦ Á¢±ÙÇϹǷΠÈξÀ ´Ù¾çÇÑ ¼­ºñ½º¸¦ ±â ´ëÇÒ ¼ö ÀÖ½À´Ï´Ù. ±×·¯³ª, DBÁ¢±ÙÀÌ ÀÚÀ¯·Î¿î ¸¸Å­ º¸¾È»óÀÇ ¹®Á¦¸¦ ¾ß±â½Ãų ¼ö ÀÖ½À´Ï´Ù. µû ¶ó¼­, ÇöÀç WWW»ó¿¡¼­´Â ÀÚ¹Ù ¾ÖÇø´À» ÅëÇÏ¿© ÀÌ·¯ÇÑ ÇüÅÂÀÇ ¼­ºñ½º¸¦ ÇÒ ¼ö ¾ø½À´Ï´Ù. ´Ü, ÀÚ¹Ù ¾îÇø®ÄÉÀ̼ÇÀº ÀÌ·¯ÇÑ ¼­ºñ½º°¡ °¡´ÉÇÕ´Ï´Ù.

±×·¡¼­, ¾ÖÇø´¿¡¼­ URLÇüÅÂÀÇ ÆÄÀÏ Á¢±ÙÀº °¡´ÉÇÑ Á¡À» ÀÌ¿ëÇÑ Æí¹ýÀ» ¾¹´Ï´Ù. ´Ù¸§ ±×¸²Ã³ ·³ DB ÂÊ¿¡ Á¶±×¸¸ ¼­¹ö¸¦ Á¦ÀÛÇÏ¿© URLÀÌ °ø°³µÈ ƯÁ¤ ÆÄÀÏÀ» ÅëÇÏ¿© ÀÚ¹Ù ÇÁ·Î±×·¥°ú ¼­·Î Á¤º¸¸¦ ±³È¯ÇÕ´Ï´Ù.

±×·¯¸é, ¾î¶»°Ô DB¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Â ÀÚ¹Ù ÇÁ·Î±×·¥À» Á¦ÀÛÇÒ ¼ö ÀÖÀ»±î¿ä?



[±×¸² 5]


¾Æ·¡ ±×¸²Àº DBÁ¢±ÙÀ» À§ÇÑ CGIÇÁ·Î±×·¥°ú, ÀÚ¹Ù ÇÁ·Î±×·¥À» Á¦ÀÛÇÏ´Â °úÁ¤ÀÔ´Ï´Ù.



[±×¸² 6] [±×¸² 7]

¿ÞÂÊ ±×¸²Àº Áö±Ý±îÁö »ç¿ëÇß¾ú´ø C·Î ÀÛ¼ºµÈ DB¿ë CGI ÇÁ·Î±×·¥ Á¦À۴ܰèÀÔ´Ï´Ù. C¾ð¾î¸¦ ÀÌ¿ëÇÏ¿© DB¿ë CGI ÇÁ·Î±×·¥À» ÀÛ¼ºÇÒ¶§¿¡´Â DB¿ë C ¶óÀ̺귯¸®(library)°¡ ÇÊ¿äÇß¾ú½À´Ï´Ù. ÀÚ ¹Ù·Î ÇÁ·Î±×·¥À» ÀÛ¼ºÇÒ¶§¿¡¼­ ¸¶Âù°¡ÁöÀÔ´Ï´Ù. DB¿ë ÀÚ¹Ù ÇÁ·Î±×·¥À» ÀÛ¼ºÇϱâ À§Çؼ­´Â DB ȸ»ç¿¡¼­ Á¦°øÇÏ´Â Java ÆÐŰÁö°¡ ÀÖ¾î¾ß¸¸ ÇÕ´Ï´Ù.



[±×¸² 8]


°£È¤ ÆÐŰÁö´Â classÈ­ÀÏÀÇ ÇüÅ·ΠÁ¦°øµÇÁö ¾Ê°í ´ÙÀ̳ª¹Í ¸µÅ© ¶óÀ̺귯¸®(DLL) ÇüÅ·ΠÁ¦°ø µÇ±âµµ ÇÕ´Ï´Ù. ÀÌ·¯ÇÑ °æ¿ì´Â DB³ª Motif¿Í°°ÀÌ Àß Á¤ÀÇµÈ ±âÁ¸ÀÇ C ¶óÀ̺귯¸®¸¦ ±×´ë·Î »ç¿ë Çϱ⸦ ¿øÇÒ ¶§ »ç¿ëµË´Ï´Ù. ±×¸®°í, ´ÙÀ̳ª¹Í ¸µÅ© ¶óÀ̺귯¸® Çü½ÄÀÇ ÆÐŰÁö¸¦ Á¦ÀÛÇÒ¶§¿¡´Â ¸î °¡Áö ´Ü°è¸¦ ÇÊ¿ä·Î Çϴµ¥, ÀÌ·¯ÇÑ ¹æ¹ýÀ» ³×ÀÌÆ¼ºê ¸Þ¼Òµå¸¦ ÀÌ¿ëÇÑ ÇÁ·Î±×·¡¹Ö À̶ó°í ÇÕ´Ï´Ù.

ÀÌ·¯ÇÑ ´ÙÀ̳ª¹Í ¸µÅ© ¶óÀ̺귯¸®´Â ´ÙÀ½°ú °°ÀÌ Á¦ÀÛÇÕ´Ï´Ù. ù¹øÂ°, ³×ÀÌÆ¼ºê ¸Þ¼Òµå¸¦ Á¤ÀÇ ÇÏ´Â ÀÚ¹Ù ÇÁ·Î±×·¥À» ÀÛ¼ºÇÕ´Ï´Ù. À̶§, ³×ÀÌÆ¼ºê ¸Þ¼Òµå´Â ±âÁ¸ÀÇ C ¶óÀ̺귯¸® ÇÔ¼ö¿Í À̸§ÀÌ °°°í, ÆÄ¶ó¹ÌÅÍ, ¸®ÅϰªÀÌ °°°í, ¹Ùµð°¡ ¾ø´Â ¸Þ¼Òµå ÀÔ´Ï´Ù. ÀÌ·¸°Ô ³×ÀÌÆ¼ºê ¸Þ¼Òµå¿Í, 'loadLibrary()'¸Þ¼Òµå¸¦ »ç¿ëÇÑ ÀÚ¹Ù ÇÁ·Î±×·¥À» ÀÚ¹Ù ÄÄÆÄÀÏ·¯(javac)·Î ÄÄÆÄÀÏÇÕ³®. ÄÄÆÄÀÏµÈ Å¬·¡½º ÆÄÀÏÀº ´Ù½Ã C º¯È¯ ÇÁ·Î±×·¥(javah)À¸·Î C ÇÁ·Î±×·¥À» ¾ò¾î³À´Ï´Ù. ÀÌ·¸°Ô »ý¼ºÇÑ C ÇÁ ·Î±×·¥ÀÇ ÇÔ¼öµéÀ» ÀÌ¿ëÇØ¼­ ÇÁ·Î±×·¡¸Ó´Â »õ·Î¿î CÇÁ·Î±×·¥À» ÀÛ¼ºÇÒ ¼ö ÀÖ½À´Ï´Ù. ±×¸®°í, ÀÌ ¸ðµç ÇÁ·Î±×·¥°ú C library¸¦ ÄÄÆÄÀÏÇÏ¿© »õ·Î¿î ¶óÀ̺귯¸® ÆÄÀÏÀ» »ý¼ºÇÕ´Ï´Ù. ÀÌ·¸°Ô C¾ð¾î¿Í ÀÇ ÀÎÅÍÆäÀ̽º¸¦ ÀÌ¿ëÇØ¼­ ÀÛ¼ºµÈ ÀÚ¹Ù ´ÙÀ̳ª¹Í ¸µÅ© ¶óÀ̺귯¸®´Â ±âÁ¸ÀÇ DB ¶óÀ̺귯¸®¸¦ Ãæ ºÐÈ÷ ÀÌ¿ëÇϸ鼭 Àڹٷεµ DB¸¦ ½±°Ô Á¢±ÙÇÒ ¼ö ÀÖµµ·Ï Çϰí ÀÖ½À´Ï´Ù.

ÇöÀç ÀÚ¹Ù ÆÐŰÁö¸¦ Á¦°øÇÏ´Â DB·Î´Â Msql, Sybase, WebLogic, OCI, EOF µîÀÌ ÀÖ½À´Ï´Ù. ÀÌ Áß MsqlÀº ¸ðµç ÆÐŰÁö¸¦ java, classÈ­ÀÏ·Î Á¦°øÇϰí ÀÖÀ¸¸ç, Sybase´Â java, c, classÆÄÀÏ·Î Á¦ °øÇÔÀ¸·Î½á ÇÁ·Î±×·¡¸Ó´Â ÀÚ½ÅÀÇ Ç÷§Æû¿¡ ¸ÂÃß¾î ´ÙÀ̳ª¹Í ¸µÅ© ¶óÀ̺귯¸®¸¦ ÄÄÆÄÀÏ, »ý¼ºÇÏ¿© »ç¿ëÇÏ´Â ¹æ½ÄÀ¸·Î »ç¿ëÇØ¾ßÇÕ´Ï´Ù.



6. ½Ç½Ã°£ ÀÚ¹Ù(Real-Time Java)

6.1 ÀÚ¹ÙÀÇ ±â¿ø

Àڹٴ óÀ½ ¿¬±¸, °³¹ß µÉ ¶§ ÀÓº£µðµå ½Ã½ºÅÛ°ú(embedded system), ±¤¹üÀ§ÇÑ ³×Æ®¿÷À» ´ë»ó À¸·Î °³¹ßµÇ¾ú½À´Ï´Ù. ÀÚ¹Ù °³¹ßÀÚµéÀº ÀÚ¹Ù¸¦ °³¹ßÇÒ ¶§ ±âº»ÀûÀΠƲÀÌ µÇ´Â ¾ð¾î·Î C++¾ð¾î¸¦ ¼±Á¤ÇÏ¿´½À´Ï´Ù. ±×¸®°í, ÀÚ¹Ù´Â C++¾ð¾îÀÇ ºÒÇÕ¸®ÇÑ Á¡À» ¸¹Àº ºÎºÐ¿¡¼­ °³¼±ÇÏ¿´½À´Ï´Ù. °á°úÀû À¸·Î, ÀÚ¹Ù´Â C++¾ð¾î°¡ °¡Áö°í ÀÖ´Â °´Ã¼ÁöÇâÀûÀÎ ÀåÁ¡»Ó¸¸ ¾Æ´Ï¶ó, C++¾ð¾î°¡ °¡ÁöÁö ¸øÇÏ´Â ¸¹Àº ÀåÁ¡À» °¡Áö°Ô µÇ¾ú½À´Ï´Ù.

ÀÚ¹ÙÀÇ ´ëÇ¥ÀûÀΠƯ¡À» »ìÆìº¸¸é, ÀÚ¹Ù´Â °´Ã¼ÁöÇâÀûÀ̸鼭 °£´ÜÇÏ°í ½ÇÇàȯ°æ(run-time system)ÀÇ Å©±â°¡ ÀÛ½À´Ï´Ù. ±×¸®°í, ÀÚ¹Ù¸¦ Áö¿øÇÏ´Â ¸ðµç Ç÷§Æû¿¡¼­ ÇϳªÀÇ ÇÁ·Î±×·¥À¸·Î ½ÇÇà ÀÌ °¡´É Çϱ⠶§¹®¿¡ °³¹ß±â°£ÀÌ Âª¾ÆÁö¸ç, À̽ļºÀÌ ÁÁ´Ù´Â ÀåÁ¡ÀÌ ÀÖ½À´Ï´Ù. ¶ÇÇÑ, °¡ºñÁö Ä÷º ¼Ç(garbage collection) ±â´ÉÀº ÇÁ·Î±×·¡¸Ó·Î ÇÏ¿©±Ý ÆíÇÑ ÇÁ·Î±×·¡¹Ö ȯ°æÀ» Á¦°øÇϸç, ¹Ý¸é ¿À·ù °¡ ¾ø´Â ưưÇÑ ÇÁ·Î±×·¥À» Á¦ÀÛÇÒ ¼ö°¡ ÀÖ½À´Ï´Ù. ±×¹ÛÀÇ ¾ÈÀü¼º°ú, ´Ù¸¥ ¾ð¾î¿ÍÀÇ °áÇÕ¼º, ¸ÖƼ ½º·¹µå ±â´É µî ¸¹Àº ÀåÁ¡À» °¡Áö°í ÀÖ½À´Ï´Ù.

6.2 ½Ç½Ã°£ ½Ã½ºÅÛ¿¡¼­ÀÇ ÀÚ¹Ù

½Ç½Ã°£ ÀÚ¹Ù(real-time Java)´Â Å©°Ô µÎ°¡Áö ¸ð½ÀÀ¸·Î ÀÀ¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù. ù° ¿ùµå¿ÍÀ̵åÀ¥ »óÀÇ ½Ç½Ã°£ ÀÚ¹ÙÀÇ ¸ð½ÀÀ¸·Î Áõ±Ç°Å·¡ ½Ã½ºÅÛ, ´ëÈ­Çü ¿¡´Ï¸ÞÀ̼Ç, ºñµð¿À °ÔÀÓ, È­»óȸÀÇ µîÀÌ °¡´ÉÇÕ´Ï´Ù. ´Ù¸¥ Çϳª´Â ÀÓº£µðµå ½Ã½ºÅÛ(embedded system)ÀÇ ¸ð½ÀÀ¸·Î ±³Åë¾È³»½Ã½ºÅÛ, À½¼º- Ææ ±â¹Ý ÄÄÇ»ÆÃ ȯ°æ, Ç×°ø Ç×·Î ½Ã½ºÅÛ, °¡»óÇö½Ç, ¹Ì»çÀÏ ¹æ¾î ½Ã½ºÅÛ µîÀÇ ÀÀ¿ëÀÌ °¡´ÉÇÕ´Ï´Ù.

ÀÌ·¯ÇÑ ½Ç½Ã°£ ½Ã½ºÅÛÀ» °³¹ßÇÒ¶§¿¡´Â ¿©·¯ °¡Áö ¾î·Á¿î Á¡ÀÌ ÀÖ½À´Ï´Ù. ±×·¯³ª ÀÚ¹Ù´Â ´ÙÀ½ÀÇ ¹®Á¦µéÀ» Çϳª¾¿ ÇØ°áÇϰí ÀÖ½À´Ï´Ù.

6.2.1 À̽ļº

ÀÓº£µðµå ½Ç½Ã°£ ½Ã½ºÅÛ(enbedded real-time system)¿¡¼­´Â Á¾Á¾ ¼­·Î´Ù¸¥ È£½ºÆ®ÀÇ ´Ù¾çÇÑ ÇÁ ·Î¼¼¼­¸¦ Á¢±ÙÇØ¾ß ÇÏ´Â °æ¿ì°¡ ÀÖ½À´Ï´Ù. ¿¹¸¦ µé¸é, ÇϳªÀÇ ½Ç½Ã°£ ½Ã½ºÅÛ °³¹ß°úÁ¤¿¡¼­ Motorola 68000, Power PC, Intel 960 µîÀ» µ¿½Ã¿¡ ó¸®ÇÏ´Â °æ¿ì°¡ ¾ÆÁÖ ÀϹÝÀûÀÔ´Ï´Ù. ÀÌ·¯ÇÑ ¿ä±¸¸¦ ¹Þ¾ÆµéÀ̱â À§Çؼ­ ÇÁ·Î±×·¡¸Ó´Â °¢°¢ÀÇ È¯°æ¿¡ ¸Â´Â »õ·Î¿î ÄÄÆÄÀϰúÁ¤°ú, ÇÁ·Î±×·¡¹Ö ÀÛ¾÷À» ÇØ¾ß¸¸ ÇÕ´Ï´Ù. ±×·¯³ª ÀÚ¹Ù·Î ÀÛ¼ºµÈ ÇÁ·Î±×·¥Àº ±×·¯ÇÑ ¹®Á¦Á¡À» ÇØ°áÇÕ´Ï´Ù. È£Á÷ ÇÑ ¹øÀÇ ÄÚµù ÀÛ¾÷°ú ÇÑ ¹øÀÇ ÄÄÆÄÀÏ·Î ´Ù¾çÇÑ Á¾·ùÀÇ ÇÁ·§Æû¿¡¼­ ½ÇÇà°¡´ÉÇÏ°Ô ÇØÁÝ´Ï´Ù.

6.2.2 µ¿Àû ÀûÀÀ¼º

ÀÓº£µðµå ½Ç½Ã°£ ½Ã½ºÅÛ(embedded real-time system)ÀÇ °ü¸®¿¡ À־ °¡Àå ¾î·Á¿îÁ¡Àº ½Ã½º ÅÛÀ» ´Ù¿î½ÃŰÁö ¾Ê°í »õ·Î¿î ¼ÒÇÁÆ®¿þ¾î¸¦ ¼³Ä¡ÇØ¾ß ÇÑ´Ù´Â °ÍÀÌ´Ù. Ç×°ø ±³Åë Á¤¸®, ÀüÈ­ ±³È¯, ±º´ë Á¤Âû ¼­ºñ½º µîÀº Àý´ë ½ÇÇàÁß ÁߴܵǾ´Â ¾ÈµÇ´Â ½Ã½ºÅÛÀÔ´Ï´Ù.

À̶§ ÀÚ¹Ù ¾ð¾îÀÇ À̽ļº°ú ÇØ¼® ±â´ÉÀº ÀÌ·¯ÇÑ ¹®Á¦¸¦ ÇØ°á ÇÕ´Ï´Ù. ÀÚ¹Ù´Â ¸Å¿ì µ¿ÀûÀ̹ǷΠµ¿ÀûÀ¸·Î È®Àå °¡´ÉÇÑ ½Ã½ºÅÛÀ» »ý»êÇÕ´Ï´Ù. ÀÚ¹Ù ¾ð¾î´Â º¯È­Çϴ ȯ°æ¿¡ ÀûÀÀÇÒ ¼ö ÀÖµµ·Ï ¼³ °èµÇ¾ú½À´Ï´Ù. Ŭ·¡½ºµéÀº ÇÊ¿äÇÒ¶§¸¶´Ù µ¿ÀûÀ¸·Î ¸µÅ©ÇÒ ¼ö ÀÖÀ¸¸ç ³×Æ®¿÷ »ó¿¡¼­ ´Ù¿î¹ÞÀ» ¼ö ÀÖ½À´Ï´Ù. ÀÎÀÔ ÄÚµå´Â °ËÁõÀ» °ÅÄ£ÈÄ¿¡ ÇØ¼®±â·Î Àü´ÞµÇ¾î ½ÇÇàµË´Ï´Ù.

6.2.3 ¿À·ù Çã¿ë

½Ç½Ã°£ ½Ã½ºÅÛ¿¡¼­ ³×Æ®¿÷À̳ª ³ëµå(node)°¡ ²÷¾îÁö°Ô µÇ¸é, »õ·Ó°Ô Á¤º¸¸¦ º¸³»°Å³ª ´Ù½Ã ÀÏÀ» ó¸®ÇØ¾ß ÇÏ´Â °æ¿ì°¡ Á¾Á¾ ÀÖ½À´Ï´Ù. ±×·¯³ª ÀÚ¹Ù ÇÁ·Î±×·¡¹Ö ȯ°æÀº ÀÌ·¯ÇÑ ºÎ´ãÀ» ´ú¾îÁÙ ¼ö ÀÖ½À´Ï´Ù. ÀÚ¹Ù´Â ³×Æ®¿÷À̳ª, ±â°èÀÇ ÇÁ·Î¼¼¼­, ÄÉÀ̺íÀÇ Á¾·ù¿¡ ´ëÇØ¼­ ¾Ë Çʿ䰡 ¾ø½À´Ï´Ù. ÀÚ ¹Ù´Â ¿ÀÁ÷ ÀÚ¹Ù ¹ÙÀÌÆ® Äڵ常 Àоî¿Í¼­ ÀÏÀ» ¼öÇàÇϱ⸸ ÇÏ¸é µË´Ï´Ù.

6.3 ½Ç½Ã°£ ½Ã½ºÅÛÀÇ ¿ä±¸»çÇ×°ú ÀÚ¹Ù

½Ç½Ã°£ ½Ã½ºÅÛÀ» °³¹ßÇÒ¶§¿¡´Â ±â¼úÀûÀÎ ¸é¿¡¼­ ´ÙÀ½°ú °°Àº °ªºñ½Ñ ¿ä±¸»çÇ×ÀÌ ÀÖ½À´Ï´Ù.

ÀÌ·¯ÇÑ ½Ç½Ã°£ ½Ã½ºÅÛÀÇ ¿ä±¸»çÇ× ¾Æ·¡ ÀÚ¹Ù´Â ºñ±³Àû Àú·ÅÇÑ °³¹ß, À¯±â ºñ¿ë°ú, ºü¸¥ ¸¶ÄÉÆÃ, ³ôÀº À̽ļº, ³ôÀº ³×Æ®¿÷ ¿¬°á¼º, ³ôÀº ¾ÈÁ¤¼º°ú ±â´É¼ºÀ» Á¦°øÇÕ´Ï´Ù. ºÐ¸¸ ¾Æ´Ï¶ó, °­·ÂÇÑ ±×·¡ ÇÈ Áö¿ø°ú »ç¿ëÀÚ ÀÎÅÍÆäÀ̽º´Â ±× ÁúÀ» ÇÑÃþ ³ô¿©ÁÝ´Ï´Ù.



7. ÀÚ¹ÙÀÇ Àü¸Á°ú ¹Ì·¡.

±âÁ¸ÀÇ ÇÁ·Î±×·¡¹Ö ¾ð¾îº¸´Ù °­·ÂÇØÁø ÀÚ¹ÙÀÇ ±â´ÉÀ» ÅëÇÏ¿© ¼ÒÇÁÆ®¿þ¾î »ê¾÷°ú, ÀÎÅͳÝÀº Å« º¯È­¸¦ ¸Â¾ÆÇÏ°Ô µÉ°ÍÀÔ´Ï´Ù. ³×Æ®¿÷ ¼Óµµ°¡ »¡¶óÁö°Ô µÊÀ¸·Î½á ÀÌÁ¨ ´õ ÀÌ»ó ³» ÄÄÇ»ÅÍ¿¡ ÇÁ·Î ±×·¥À» ¼³Ä¡ÇÒ Çʿ䰡 ¾ø¾îÁú°ÍÀÔ´Ï´Ù. ¼­¼­È÷ µîÀåÇϰí ÀÖ´Â NC(Network Computer)³ª ÀÚ¹Ù ÅÍ ¹Ì³Î(Java Terminal)°ú °°Àº °ÍÀÌ ¹Ù·Î ±×°ÍÀÔ´Ï´Ù.

¾ÕÀ¸·Î ÀÚ¹Ù°ü·Ã ´Ù¾çÇÑ ÆÐŰÁö³ª, °³¹ß ȯ°æÀÌ ÃæºÐÈ÷ Á¦°øµÇ¸é ÇöÀçÀÇ ¸ðµç ¼ÒÇÁÆ®¿þ¾î´Â ÀÚ ¹Ù ÀÀ¿ë ÇÁ·Î±×·¥À¸·Î ÀüȯÇÒ°ÍÀÔ´Ï´Ù. ÀÌ·¯ÇÑ ÇÁ·Î±×·¥Àº ƯÈ÷, ¾Õ¿¡¼­ ¼³¸íÇÑ ¸ÖƼ¹Ìµð¾î ÇÁ·Î ±×·¥ÀϰÍÀ̰í, ½Ç½Ã°£ ¼­ºñ½º¸¦ ÇØÁÖ´Â ³×Æ®¿÷ ÇÁ·Î±×·¥ÀϰÍÀ̰í, ¹æ´ëÇÑ µ¥ÀÌÅ͸¦ ó¸®ÇÏ´Â µ¥ÀÌ Åͺ£À̽º ¼­ºñ½º°¡ µÉ°ÍÀÔ´Ï´Ù.

ÇöÀç ºñÁê¾ó ÇÁ·Î±×·¡¹Ö ȯ°æ¿ª½Ã ÀÎÅÍ³Ý ÇÁ·Î±×·¡¹ÖÀ» ÁöÇâÇϰí ÀÖÀ¸¸ç, Á¶±Ý¾¿ ÀÚ¹Ù¸¦ Áö¿ø Çϰí ÀÖ½À´Ï´Ù. ÀÌ·¯ÇÑ ÇüÅ´ ÀÚ¹Ù ÇÁ·Î±×·¡¹Ö ȯ°æ¿¡¼­ ÇöÀçÀÇ C/C++À» ÀÌ¿ëÇÑ ºñÁê¾ó ÇÁ·Î±× ·¡¹ÖÀ» Áö¿øÇÏ´Â ÇüÅ·ΠÀüȯµÉ°ÍÀÔ´Ï´Ù. ÇöÀçÀÇ ºñÁê¾ó ÇÁ·Î±×·¡¸Ó´Â õõÈ÷ ÀÚ¹Ù ÇÁ·Î±×·¡¹Öȯ °æÀ» ¸ÂÀÌÇÒ Áغñ¸¦ ÇØ¾ßÇÒ°ÍÀÔ´Ï´Ù.



8. Âü°í¹®Çå

[Sun1]
Mary Campione, Kathy, Walrath, The Java Tutorial (Mar 4, 1996)
URL: http://java.sun.com/tutorial/
[Sun2]
Brewing Java, a Tutorial (February 7, 1996)
URL: http://sunsite.unc.edu/javafaq/javatutorial.html
[Sun3]
Kelvin Nilsen, Issues in the Design and Implementation of Real-Time Java (Nov 15, 1995)
URL: http://kickapoo.catd.iastate.edu/kelvin/java.html
[Dobb's Journal]
Gary Aitken, Moving from C++ to Java (March , 1996)
[IDG Books]
Ed Tittel, Mark Gaither, Internet WOrld 60 Minute Guide to java (Dec 12, 1995)
[Samn.Net]
John December, Presenting JAVA (Dec 20, 1995)

Last-Modified : Saturday, 9-March-96 04:00:00