Advanced Java Programming & Technology
ÀÚ¹Ù´Â ½ã ¸¶ÀÌÅ©·Î½Ã½ºÅÛ(Sun Microsystem)¿¡¼ °³¹ßÇÑ °´Ã¼ ÁöÇâ ÇÁ·Î±×·¡¹Ö ¾ð¾îÀÔ´Ï´Ù. ÀÚ¹Ù´Â ÀÎÅͳÝȯ°æ°ú Ŭ¶óÀ̾ðÆ®/¼¹ö ÇÁ·Î±×·¡¹Ö ºÐ¾ßÀÇ ¹®Á¦¸¦ ÇØ°áÇϱâ À§ÇØ ¼³°èÇÑ °ÍÀÔ´Ï´Ù. ÇöÀç ÀÚ¹Ù´Â 'JDK(Java Development Kit) 1.0' ¹öÀüÀÇ À̸§À¸·Î °ø°³µÇ°í ÀÖ½À´Ï´Ù.
ÀÚ¹Ù´Â ÇÁ·Î±×·¡¹Ö ¾ð¾îÀÇ ¹ßÀü¿¡ ÀÖ¾î¼ ÀüÇô »õ·Î¿î °üÁ¡À» Á¦½ÃÇÕ´Ï´Ù. ÀÚ¹Ù´Â ±Ô¸ð°¡ ÀÛ°í °£´ÜÇÑ ¾ð¾îÀ̸鼵µ ¸Å¿ì ´Ù¾çÇÑ ¼ÒÇÁÆ®¿þ¾î ¾ÖÇø®ÄÉÀÌ¼Ç ¿ä°ÇÀ» ÃæÁ·½Ãų ¼ö ÀÖÀ» ¸¸Å Æ÷°ýÀûÀÔ´Ï´Ù. ÀÚ¹Ù´Â ÇÇ»óÀûÀ¸·Î´Â C³ª C++°ú À¯»çÇÏÁö¸¸, ±âÁ¸ ¾ð¾îÀÇ ±â´ÉµéÀ» ü°èÀûÀ¸·Î Á¦°ÅÇÔÀ¸·Î½á ´Ü¼ø¼ºÀ» ´Þ¼ºÇÏ¿´½À´Ï´Ù. µû¶ó¼ ÀÚ¹Ù¸¦ ÀÌ¿ëÇØ ÀÛ¼ºÇÑ ¾ÖÇø®ÄÉÀ̼ÇÀº C·Î ÀÛ¼ºÇÑ °Í°ú´Â ºñ±³ ÇÒ ¼ö ¾øÀ»¸¸Å Å©±â°¡ ¸Å¿ì ÀÛ½À´Ï´Ù.
ÀÚ¹ÙÀÇ ´ëÇ¥ÀûÀΠƯ¡À̶ó¸é, °´Ã¼ÁöÇâ ÇÁ·Î±×·¡¹Ö ȯ°æÇÏ¿¡ ¸ÖƼ½º·¹µå¸¦ Áö¿øÇÏ´Â °ÍÀÔ´Ï´Ù.
±×¸®°í, ³×Æ®¿÷ ÇÁ·Î±×·¡¹Ö¿¡ ¿ëÀÌÇÏ¸ç ºÐ»êȯ°æ¿¡ ÀûÇÕÇϰí, °·ÂÇÑ ±×·¡ÇÈ »ç¿ëÀÚ
ÀÎÅÍÆäÀ̽º(GUI)¸¦ Á¦°øÇÑ´Ù´Â °ÍÀÔ´Ï´Ù. µû¶ó¼ Àß ÀÛ¼ºµÈ ÀÚ¹Ù ÇÁ·Î±×·¥Àº, ÀÚ¹ÙÀÇ Æ¯Â¡µéÀ»
ÃæºÐÈ÷ »ì·Á°¡¸ç ÀÛ¼ºÇÑ °ÍÀÔ´Ï´Ù. ÀÚ¹ÙÀÇ ±â´ÉµéÀº JDKÀÇ ÆÐŰÁö(package)·Î ¸ðµÎ Á¦°øµÇ°í
ÀÖ½À´Ï´Ù. º»¹®¿¡¼´Â JDK¸¦ ÀÌ¿ëÇÑ °£´ÜÇÑ ¿¹Á¦ ÇÁ·Î±×·¥°ú ÇÔ²² ÀÚ¹ÙÀÇ ±â´ÉÀ» Çϳª¾¿
°æÇèÇØ º¸°Ú½À´Ï´Ù.
½º·¹µå¶õ ÇÁ·Î¼¼½º ½ºÄÉÁÙ¸µ(process scheduling)ÀÇ ºÎ´ãÀ» ÁÙ¿© ¼º´ÉÀ» Çâ»ó ½Ã۱â À§ÇÑ ÇÁ·Î¼¼½ºÀÇ ´Ù¸¥ Ç¥Çö ¹æ½ÄÀÔ´Ï´Ù. ÀϹÝÀûÀ¸·Î ¶óÀÌÆ®¿þÀÌÆ® ÇÁ·Î¼¼½º(lightweight processes) ¶ó°íµµ À̾߱â ÇÕ´Ï´Ù. ÀÚ¹Ù´Â ÀÌ·¯ÇÑ µ¿½Ã ½ÇÇà ½º·¹µå¸¦ ¿©·¯°³ »ý¼ºÇÒ ¼ö ÀÖ½À´Ï´Ù. C¿Í C++´Â ´ÜÀÏ ½ÇÇà ½º·¹µå ÆÐ·¯´ÙÀÓ¿¡ ¼ÓÇÏ´Â ¾ð¾î·Î¼, ½º·¹µå¿¡ ´ëÇÑ ¾ð¾î ¼öÁØ(language-level) Áö¿øÀ» Á¦°øÇÏÁö ¸øÇÕ´Ï´Ù. ÇÏÁö¸¸ ÀÚ¹Ù´Â ´ÙÁß ½º·¹µå¿¡ ´ëÇÑ ¾ð¾î ¼öÁØ Áö¿øÀ» Á¦°øÇÏ¿©, ´õ¿í ´Ù¾çÇÏ°í °·ÂÇÑ ÇÁ·Î±×·¡¹Ö Á¢±ÙÀ» À¯µµÇÕ´Ï´Ù.
ÀÚ¹Ù¿¡¼ ½º·¹µå¸¦ ÀÌ¿ëÇÑ ÇÁ·Î±×·¡¹Ö ±â¹ýÀº ÇϳªÀÇ ½º·¹µå¸¦ ÀÌ¿ëÇØ¼ ÇÁ·Î±×·¥À» ÀÛ¼ºÇÒ°æ¿ì¿¡ »õ·Î¿î °³³äÀÌ ¾ø½À´Ï´Ù. ÁøÁ¤ÇÑ ½º·¹µå ÇÁ·Î±×·¡¹ÖÀ̶ó¸é ÇϳªÀÇ ¼øÂ÷ÀûÀÎ ½º·¹µå°¡ ¾Æ´Ï¶ó, ÇÁ·Î±×·¥³»¿¡¼ µ¿½Ã¿¡ ¿©·¯°¡Áö ÀÏÀ» ¼öÇàÇÏ´Â ´ÙÁß ½º·¹µå¸¦ »ç¿ëÇÏ´Â °ÍÀÔ´Ï´Ù.
½º·¹µå¸¦ Á¦´ë·Î »ç¿ëÇϱâ À§Çؼ´Â ½º·¹µå°¡ ½ÇÇàµÇ´Â ¿©·¯ °¡Áö ¼Ó¼º°ú ±¸Á¶¿¡ ´ëÇØ¼ Àß
¾Ë¾Æ¾ß ÇÕ´Ï´Ù. ¶ÇÇÑ, ¿©·¯°³ÀÇ ½º·¹µå°¡ »ý¼ºµÇ¾î ½ÇÇàµÉ ¶§¿¡ ½º·¹µåµé°£ÀÇ µ¿±âÈ, ±³Âø»óÅÂ
µî ¹ß»ýÇÒ ¼ö ÀÖ´Â ¿©·¯ °¡Áö ¹®Á¦Á¡À» ÇØ°áÇÏ´Â ¹æ¹ýÀ» ÀÍÇô¾ßÇÔ ÇÕ´Ï´Ù.
ÀÚ¹Ù¿¡¼ ½º·¹µå¸¦ »ç¿ëÇÏ´Â ¹æ¹ý¿¡´Â µÎ °¡Áö°¡ ÀÖ½À´Ï´Ù. Çϳª´Â 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'ÀÇ À§Ä¡¸¦ ¾Ë·ÁÁÖ°Ô µË´Ï´Ù.
ÀÚ¹Ù´Â ¾ð¾îÀûÀÎ Â÷¿ø¿¡¼ ¸ÖƼ½º·¹µùÀ» Áö¿øÇÕ´Ï´Ù. Áï, JDK¿¡¼ ½º·¹µå °´Ã¼¸¦ Á¦°øÇϸç, ÀÚ ¹Ù ·±Å¸ÀÓ ½Ã½ºÅÛ¿¡¼ ½º·¹µå Á¦¾î±¸Á¶¸¦ Á¦°øÇÕ´Ï´Ù. ¿©·¯°³ÀÇ ½º·¹µå°¡ µ¿½Ã¿¡ ½ÇÇàµÇ¸é¼, °° Àº µ¥ÀÌÅͳª, ¸Þ¼Òµå¸¦ »ç¿ëÇÒ¶§¿¡´Â ÁÖÀÇÇØ¾ßÇÒ Á¡ÀÌ ¸î°¡Áö ÀÖ½À´Ï´Ù.
ÇÑ ¿¹·Î Űº¸µåÀÇ ÀԷ°úÁ¤À» ¾Ë¾Æº¸°Ú½À´Ï´Ù. »ç¿ëÀÚ°¡ ÀÔ·ÂÇÑ Å¶°ªÀº Űº¸µå ¹öÆÛ¿¡ ½×ÀÌ°Ô µÇ°í, CPU´Â Űº¸µå ¹öÆÛ¿¡¼ Ŷ°ªÀ» Àоî¿À°Ô µÇ¾îÀÖ½À´Ï´Ù. ±×·±µ¥, Űº¸µå ¹öÆÛ°¡ ²ËÂ÷Àִµ¥ »ç¿ëÀÚ°¡ Ŷ°ªÀ» µ¤¾î¾²´Â °æ¿ì¿Í, Űº¸µå ¹öÆÛ¿¡ Ŷ°ªÀÌ ¾ø´Âµ¥ CPU°¡ Áߺ¹ÇÏ¿© Àоî¿À·Á´Â °æ ¿ì°¡ ÀÖÀ» ¼ö ÀÖ½À´Ï´Ù. ÀÌ·± °æ¿ì¿¡¼ »ç¿ëÀÚ¿Í, CPU¸¦ °¢°¢ÀÇ ½º·¹µå·Î º¼ ¼ö ÀÖ°í, Űº¸µå ¹ö ÆÛ´Â ½º·¹µå°¡ µ¿½Ã¿¡ »ç¿ëÇÏ´Â °øµ¿ µ¥ÀÌÅͶó°í º¼ ¼ö ÀÖ½À´Ï´Ù.
±âÁ¸ÀÇ ¸ÖƼ ½º·¹µå ÇÁ·Î±×·¡¹Ö ȯ°æ¿¡¼ °øÅë µ¥ÀÌÅ͸¦ ó¸®ÇÏ´Â ÀӰ迵¿ª(critical section)À»
ó¸®ÇÒ ¶§ ¸¹Àº ¾î·Á¿òÀÌ ÀÖ¾ú½À´Ï´Ù. ÀÌ·¯ÇÑ ¹®Á¦´Â ¼¼¸¶Æ÷¾î¿Í °°Àº °ÍÀ» ÀÌ¿ëÇÏ¿© ÇØ°áÇßÁö¸¸, ¼¼¸¶Æ÷¾î¸¦ ÀÌ¿ëÇÑ ±â¹ýÀº »ó´çÈ÷ ¾î·Á¿î ÇÁ·Î±×·¡¹Ö °úÁ¤À̾ú°í, ³Ê¹« º¹ÀâÇÏ¿© ÇÑÆíÀ¸·Ð È®½ÇÇÏÁö ¾ÊÀº À§ÇèÇѱâ¹ý À̾ú½À´Ï´Ù.
ÇÏÁö¸¸, ÀÚ¹Ù´Â ÀÌ·¯ÇÑ ¹®Á¦Á¡À» ¾ð¾îÀûÀÎ Â÷¿ø¿¡¼ ÇØ°áÇϰí ÀÖ½À´Ï´Ù. '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]
À§ÀÇ ÇÁ·Î±×·¥¿¡´Â 'synchronized'·Î Á¤ÀÇµÈ µÎ °³ÀÇ ¸Þ¼Òµå°¡ ÀÖ½À´Ï´Ù. 'largeSize()' ¸Þ¼Òµå¿Í
'smallerSize()'¸Þ¼Òµå´Â 'wait()' ¸Þ¼Òµå¿Í 'notify()' ¸Þ¼Òµå¸¦ »ç¿ëÇÏ¿© ¸ð´ÏÅ͸¦ ÁÖ°í ¹ÞÀ¸¸ç ¼ø
Â÷ÀûÀ¸·Î ½ÇÇà µË´Ï´Ù. 'canAccess'ÀÇ °ªÀ» º¯°æÇÕ´Ï´Ù. °á±¹, 'BarInfo' Ŭ·¡½ºÀÇ 'largerSize()'
¸Þ¼Òµå¿Í 'smallerSize()' ¸Þ¼Òµå´Â ¹ø°¥¾Æ°¡¸ç ÇÑ ¹ø¾¿ ½ÇÇàµÇ¸ç µ¿±âÈµÇ¾î ½ÇÇàµË´Ï´Ù.
ÀÚ¹Ù¿¡¼´Â ÀϹÝÀûÀÎ ¾ð¾î¿¡¼¿Í ¸¶Âù°¡Áö·Î Űº¸µå³ª, ¸¶¿ì½ºÀÇ ÀÔ·ÂÀ» ó¸®ÇÒ ¼ö ÀÖ½À´Ï´Ù.
ÀÚ¹ÙÀÇ ÀÌ·¯ÇÑ ±â´ÉÀÌ ¿ùµå¿ÍÀ̵åÀ¥(WWW)¿¡ Àû¿ëµÇ¸é¼ ´ëÈÇü À¥¼ºñ½º¸¦ °¡´ÉÇÏ°Ô ÇÏ¿´½À´Ï
´Ù. ÀÚ¹Ù´Â »ç¿ëÀÚ¿¡°Ô Áï°¢ÀûÀ̰í Áö¼ÓÀûÀÎ ÀÚ±ØÀ» Á¦°øÇÔÀ¸·Î½á, À¥ÀÇ »óÈ£ÀÛ¿ë ¼öÁØÀ» Çâ»ó ½Ã
Ä×½À´Ï´Ù. µ¿½Ã¿¡ ÀÚ¹Ù ¾ÖÇø´Àº »ç¿ëÀÚÀÇ ÀÔ·ÂÀ» Áö¼ÓÀûÀ¸·Î ¹Þ¾ÆµéÀ̰í ó¸®ÇÕ´Ï´Ù. ¶ÇÇÑ ÀÚ¹Ù
´Â ÀÌ·¯ÇÑ ÀԷ¿¡ ¹ÝÀÀÇϰí, »ç¿ëÀÚ¿¡°Ô Á¤ÀÇµÈ ¼ºñ½º¸¦ Á¦°øÇÕ´Ï´Ù.
¶ÇÇÑ, ÀÚ¹Ù´Â ÀϹÝÀûÀÌ°í Æí¸®ÇÑ »ç¿ëÀÚ ÀÔ·Â, ¼±Åà ±â´ÉÀ» À§Çؼ 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]
ÀÚ¹ÙÀÇ ÀÔ/Ãâ·Â ÆÐŰÁö(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()'¸Þ¼Ò
µå¸¦ ÀÌ¿ëÇÏ¿© ÆÄÀÏÀ» ÀоîµéÀÔ´Ï´Ù.
ÀÚ¹Ù´Â 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()' ¸Þ¼Òµå·Î Ãâ·Â
ÇÒ ¼ö ÀÖ½À´Ï´Ù.
ÀÎÅͳÝÀÇ Á¤º¸´Â Á¡Á¡ ´Ã¾î¸¸°¡°í, ±× ¸¹Àº Á¤º¸Áß¿¡¼ º¸´Ù Á¤È®ÇÑ ÀڷḦ ã±âÀ§ÇØ ÀÎÅͳݻó ÀÇ Á¤º¸µéÀº Á¡Â÷ DBȵǰí ÀÖ½À´Ï´Ù. ƯÈ÷, ±âÁ¸ÀÇ PCÅë½Å»ó¿¡¼ DB¼ºñ½º¸¦ Çϰí Àְųª, ÀÚ Ã¼ DB¸¦ °¡Áö°í ÀÖ´Â ±â¾÷À̳ª ´Üü¿¡¼´Â ±× DB¸¦ WWW»ó¿¡¼µµ ¼ºñ½º Çϱâ À§Çؼ »ó´çÇÑ °ü½ÉÀ» °¡Áö°í ÀÖ½À´Ï´Ù.
ÇöÀç WWW»ó¿¡¼´Â CGI¶ó´Â ±â¹ýÀ¸·Î ´ÙÀ½ ±×¸²°ú °°ÀÌ DB ¼ºñ½º¸¦ Çϰí ÀÖ½À´Ï´Ù.
ÀÌ·¯ÇÑ ¼ºñ½º´Â »ç¿ëÀÚ°¡ ¼¹öÂÊÀÇ CGI ÇÁ·Î±×·¥À» ½ÇÇà½Ã۸é, ¼¹öÂÊÀÇ CGI ÇÁ·Î±×·¥ÀÌ DB¸¦ ÂüÁ¶ÇÏ¿© ±× ³»¿ëÀ» HTMLÇü½ÄÀ¸·Î ºê¶ó¿ìÀú¿¡ º¸³»ÁÖ´Â Çü½ÄÀ̾ú½À´Ï´Ù. ÀÌ·¯ÇÑ ±¸Á¶´Â ºê¶ó¿ìÀú³ª, ¼¹ö¿¡¼ Áö¿øÇÏ´Â Çü½Ä¿¡ ¸ÂÃß¾î Ãâ·ÂÇØÁÖ¾î¾ß ÇÕ´Ï´Ù. ¿©·¯ °¡Áö ȯ°æº¯¼ö¸¦ ÀÌ¿ë ÇÏ¿© ³×Æ®¿÷»ó¿¡¼ Á¤º¸¸¦ Àü¼ÛÇÏ¿©, °á±¹ HTML Çü½ÄÀ¸·Î Ãâ·ÂÇØÁÝ´Ï´Ù.
CGI¸¦ ÀÌ¿ëÇÑ DB¼ºñ½º´Â ±âÁ¸ÀÇ HTML°ú ºñ±³Çغ¼¶§¿¡ ³»¿ë°ú °á°úÀÇ ¾çÀº À¯µ¿ÀûÀÌÁö¸¸, Ãâ·ÂµÇ´Â ¹®¼ÇüÅ´ °á±¹ Á¤ÇØÁø HTMLÇü½Ä¿¡ µû¸£µµ·Ï µÇ¾îÀÖ½À´Ï´Ù. ¶ÇÇÑ, »ç¿ëÀÚ°¡ ºê¶ó¿ì Àú »ó¿¡¼ CGI¸¦ ½ÇÇà½ÃÄÑ¾ß »õ·Î¿î ³»¿ëÀ» °¡Á®¿À´Â ¾ÆÁÖ ¼öµ¿ÀûÀÎ ¼ºñ½º ¿´½À´Ï´Ù.
ÀÚ¹Ù´Â ±âº»ÀûÀ¸·Î ´Éµ¿ÀûÀ̸鼵µ »óÈ£ ´ëÈÇü ¼ºñ½º°¡ °¡´ÉÇϱ⠶§¹«¿¡ ÀÌ·¯ÇÑ CGIÀÇ ´ÜÁ¡ À» ±Øº¹ÇÒ ¼ö ÀÖ½À´Ï´Ù. ±×¸®°í, ÀÚ¹Ù´Â ±×·¡ÇÈȯ°æÀ» Áö¿øÇϱ⠶§¹®¿¡ CGI¿Í´Â ºñ±³ÇÒ ¼ö ¾ø´Â ±×·¡ÇÈÄÃÇÏ°í µ¿ÀûÀÎ ¼ºñ½º¸¦ WWW»ó¿¡¼ °¡´ÉÇÏ°Ô ÇØÁÖ°í ÀÖ½À´Ï´Ù.
´ÙÀ½Àº ÀÚ¹Ù¸¦ ÀÌ¿ëÇÑ DB ¼ºñ½ºÀÇ ÇüÅ ÀÔ´Ï´Ù.
ÀÚ¹Ù¸¦ ÀÌ¿ëÇÑ DBÁ¢±Ù ¹æ¹ýÀº CGI¿Í´Â ´Þ¸® ÇÁ·Î±×·¥ ÀÚü°¡ ÀÎÅͳÝÀ» °Ç³Ê¿Í ÀÚ½ÅÀÇ ÄÄÇ»ÅÍ ¿¡¼ ½ÇÇàµÇ´Â ±¸Á¶¸¦ °¡Áö°í ÀÖ½À´Ï´Ù. µû¶ó¼, Á÷Á¢ DB¸¦ Á¢±ÙÇϹǷΠÈξÀ ´Ù¾çÇÑ ¼ºñ½º¸¦ ±â ´ëÇÒ ¼ö ÀÖ½À´Ï´Ù. ±×·¯³ª, DBÁ¢±ÙÀÌ ÀÚÀ¯·Î¿î ¸¸Å º¸¾È»óÀÇ ¹®Á¦¸¦ ¾ß±â½Ãų ¼ö ÀÖ½À´Ï´Ù. µû ¶ó¼, ÇöÀç WWW»ó¿¡¼´Â ÀÚ¹Ù ¾ÖÇø´À» ÅëÇÏ¿© ÀÌ·¯ÇÑ ÇüÅÂÀÇ ¼ºñ½º¸¦ ÇÒ ¼ö ¾ø½À´Ï´Ù. ´Ü, ÀÚ¹Ù ¾îÇø®ÄÉÀ̼ÇÀº ÀÌ·¯ÇÑ ¼ºñ½º°¡ °¡´ÉÇÕ´Ï´Ù.
±×·¡¼, ¾ÖÇø´¿¡¼ URLÇüÅÂÀÇ ÆÄÀÏ Á¢±ÙÀº °¡´ÉÇÑ Á¡À» ÀÌ¿ëÇÑ Æí¹ýÀ» ¾¹´Ï´Ù. ´Ù¸§ ±×¸²Ã³ ·³ DB ÂÊ¿¡ Á¶±×¸¸ ¼¹ö¸¦ Á¦ÀÛÇÏ¿© URLÀÌ °ø°³µÈ ƯÁ¤ ÆÄÀÏÀ» ÅëÇÏ¿© ÀÚ¹Ù ÇÁ·Î±×·¥°ú ¼·Î Á¤º¸¸¦ ±³È¯ÇÕ´Ï´Ù.
±×·¯¸é, ¾î¶»°Ô DB¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Â ÀÚ¹Ù ÇÁ·Î±×·¥À» Á¦ÀÛÇÒ ¼ö ÀÖÀ»±î¿ä?
¾Æ·¡ ±×¸²Àº DBÁ¢±ÙÀ» À§ÇÑ CGIÇÁ·Î±×·¥°ú, ÀÚ¹Ù ÇÁ·Î±×·¥À» Á¦ÀÛÇÏ´Â °úÁ¤ÀÔ´Ï´Ù.
![]() | ![]() |
| [±×¸² 6] | [±×¸² 7] |
¿ÞÂÊ ±×¸²Àº Áö±Ý±îÁö »ç¿ëÇß¾ú´ø C·Î ÀÛ¼ºµÈ DB¿ë CGI ÇÁ·Î±×·¥ Á¦À۴ܰèÀÔ´Ï´Ù. C¾ð¾î¸¦
ÀÌ¿ëÇÏ¿© DB¿ë CGI ÇÁ·Î±×·¥À» ÀÛ¼ºÇÒ¶§¿¡´Â DB¿ë C ¶óÀ̺귯¸®(library)°¡ ÇÊ¿äÇß¾ú½À´Ï´Ù. ÀÚ
¹Ù·Î ÇÁ·Î±×·¥À» ÀÛ¼ºÇÒ¶§¿¡¼ ¸¶Âù°¡ÁöÀÔ´Ï´Ù. DB¿ë ÀÚ¹Ù ÇÁ·Î±×·¥À» ÀÛ¼ºÇϱâ À§Çؼ´Â DB
ȸ»ç¿¡¼ Á¦°øÇÏ´Â Java ÆÐŰÁö°¡ ÀÖ¾î¾ß¸¸ ÇÕ´Ï´Ù.
°£È¤ ÆÐŰÁö´Â 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ÆÄÀÏ·Î Á¦
°øÇÔÀ¸·Î½á ÇÁ·Î±×·¡¸Ó´Â ÀÚ½ÅÀÇ Ç÷§Æû¿¡ ¸ÂÃß¾î ´ÙÀ̳ª¹Í ¸µÅ© ¶óÀ̺귯¸®¸¦ ÄÄÆÄÀÏ, »ý¼ºÇÏ¿©
»ç¿ëÇÏ´Â ¹æ½ÄÀ¸·Î »ç¿ëÇØ¾ßÇÕ´Ï´Ù.
Àڹٴ óÀ½ ¿¬±¸, °³¹ß µÉ ¶§ ÀÓº£µðµå ½Ã½ºÅÛ°ú(embedded system), ±¤¹üÀ§ÇÑ ³×Æ®¿÷À» ´ë»ó À¸·Î °³¹ßµÇ¾ú½À´Ï´Ù. ÀÚ¹Ù °³¹ßÀÚµéÀº ÀÚ¹Ù¸¦ °³¹ßÇÒ ¶§ ±âº»ÀûÀΠƲÀÌ µÇ´Â ¾ð¾î·Î C++¾ð¾î¸¦ ¼±Á¤ÇÏ¿´½À´Ï´Ù. ±×¸®°í, ÀÚ¹Ù´Â C++¾ð¾îÀÇ ºÒÇÕ¸®ÇÑ Á¡À» ¸¹Àº ºÎºÐ¿¡¼ °³¼±ÇÏ¿´½À´Ï´Ù. °á°úÀû À¸·Î, ÀÚ¹Ù´Â C++¾ð¾î°¡ °¡Áö°í ÀÖ´Â °´Ã¼ÁöÇâÀûÀÎ ÀåÁ¡»Ó¸¸ ¾Æ´Ï¶ó, C++¾ð¾î°¡ °¡ÁöÁö ¸øÇÏ´Â ¸¹Àº ÀåÁ¡À» °¡Áö°Ô µÇ¾ú½À´Ï´Ù.
ÀÚ¹ÙÀÇ ´ëÇ¥ÀûÀΠƯ¡À» »ìÆìº¸¸é, ÀÚ¹Ù´Â °´Ã¼ÁöÇâÀûÀÌ¸é¼ °£´ÜÇÏ°í ½ÇÇàȯ°æ(run-time system)ÀÇ Å©±â°¡ ÀÛ½À´Ï´Ù. ±×¸®°í, ÀÚ¹Ù¸¦ Áö¿øÇÏ´Â ¸ðµç Ç÷§Æû¿¡¼ ÇϳªÀÇ ÇÁ·Î±×·¥À¸·Î ½ÇÇà ÀÌ °¡´É Çϱ⠶§¹®¿¡ °³¹ß±â°£ÀÌ Âª¾ÆÁö¸ç, À̽ļºÀÌ ÁÁ´Ù´Â ÀåÁ¡ÀÌ ÀÖ½À´Ï´Ù. ¶ÇÇÑ, °¡ºñÁö Ä÷º ¼Ç(garbage collection) ±â´ÉÀº ÇÁ·Î±×·¡¸Ó·Î ÇÏ¿©±Ý ÆíÇÑ ÇÁ·Î±×·¡¹Ö ȯ°æÀ» Á¦°øÇϸç, ¹Ý¸é ¿À·ù °¡ ¾ø´Â ưưÇÑ ÇÁ·Î±×·¥À» Á¦ÀÛÇÒ ¼ö°¡ ÀÖ½À´Ï´Ù. ±×¹ÛÀÇ ¾ÈÀü¼º°ú, ´Ù¸¥ ¾ð¾î¿ÍÀÇ °áÇÕ¼º, ¸ÖƼ ½º·¹µå ±â´É µî ¸¹Àº ÀåÁ¡À» °¡Áö°í ÀÖ½À´Ï´Ù.
½Ç½Ã°£ ÀÚ¹Ù(real-time Java)´Â Å©°Ô µÎ°¡Áö ¸ð½ÀÀ¸·Î ÀÀ¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù. ù° ¿ùµå¿ÍÀ̵åÀ¥ »óÀÇ ½Ç½Ã°£ ÀÚ¹ÙÀÇ ¸ð½ÀÀ¸·Î Áõ±Ç°Å·¡ ½Ã½ºÅÛ, ´ëÈÇü ¿¡´Ï¸ÞÀ̼Ç, ºñµð¿À °ÔÀÓ, È»óȸÀÇ µîÀÌ °¡´ÉÇÕ´Ï´Ù. ´Ù¸¥ Çϳª´Â ÀÓº£µðµå ½Ã½ºÅÛ(embedded system)ÀÇ ¸ð½ÀÀ¸·Î ±³Åë¾È³»½Ã½ºÅÛ, À½¼º- Ææ ±â¹Ý ÄÄÇ»ÆÃ ȯ°æ, Ç×°ø Ç×·Î ½Ã½ºÅÛ, °¡»óÇö½Ç, ¹Ì»çÀÏ ¹æ¾î ½Ã½ºÅÛ µîÀÇ ÀÀ¿ëÀÌ °¡´ÉÇÕ´Ï´Ù.
ÀÌ·¯ÇÑ ½Ç½Ã°£ ½Ã½ºÅÛÀ» °³¹ßÇÒ¶§¿¡´Â ¿©·¯ °¡Áö ¾î·Á¿î Á¡ÀÌ ÀÖ½À´Ï´Ù. ±×·¯³ª ÀÚ¹Ù´Â ´ÙÀ½ÀÇ ¹®Á¦µéÀ» Çϳª¾¿ ÇØ°áÇϰí ÀÖ½À´Ï´Ù.
ÀÓº£µðµå ½Ç½Ã°£ ½Ã½ºÅÛ(enbedded real-time system)¿¡¼´Â Á¾Á¾ ¼·Î´Ù¸¥ È£½ºÆ®ÀÇ ´Ù¾çÇÑ ÇÁ ·Î¼¼¼¸¦ Á¢±ÙÇØ¾ß ÇÏ´Â °æ¿ì°¡ ÀÖ½À´Ï´Ù. ¿¹¸¦ µé¸é, ÇϳªÀÇ ½Ç½Ã°£ ½Ã½ºÅÛ °³¹ß°úÁ¤¿¡¼ Motorola 68000, Power PC, Intel 960 µîÀ» µ¿½Ã¿¡ ó¸®ÇÏ´Â °æ¿ì°¡ ¾ÆÁÖ ÀϹÝÀûÀÔ´Ï´Ù. ÀÌ·¯ÇÑ ¿ä±¸¸¦ ¹Þ¾ÆµéÀ̱â À§Çؼ ÇÁ·Î±×·¡¸Ó´Â °¢°¢ÀÇ È¯°æ¿¡ ¸Â´Â »õ·Î¿î ÄÄÆÄÀϰúÁ¤°ú, ÇÁ·Î±×·¡¹Ö ÀÛ¾÷À» ÇØ¾ß¸¸ ÇÕ´Ï´Ù. ±×·¯³ª ÀÚ¹Ù·Î ÀÛ¼ºµÈ ÇÁ·Î±×·¥Àº ±×·¯ÇÑ ¹®Á¦Á¡À» ÇØ°áÇÕ´Ï´Ù. È£Á÷ ÇÑ ¹øÀÇ ÄÚµù ÀÛ¾÷°ú ÇÑ ¹øÀÇ ÄÄÆÄÀÏ·Î ´Ù¾çÇÑ Á¾·ùÀÇ ÇÁ·§Æû¿¡¼ ½ÇÇà°¡´ÉÇÏ°Ô ÇØÁÝ´Ï´Ù.
ÀÓº£µðµå ½Ç½Ã°£ ½Ã½ºÅÛ(embedded real-time system)ÀÇ °ü¸®¿¡ ÀÖ¾î¼ °¡Àå ¾î·Á¿îÁ¡Àº ½Ã½º ÅÛÀ» ´Ù¿î½ÃŰÁö ¾Ê°í »õ·Î¿î ¼ÒÇÁÆ®¿þ¾î¸¦ ¼³Ä¡ÇØ¾ß ÇÑ´Ù´Â °ÍÀÌ´Ù. Ç×°ø ±³Åë Á¤¸®, ÀüÈ ±³È¯, ±º´ë Á¤Âû ¼ºñ½º µîÀº Àý´ë ½ÇÇàÁß ÁߴܵǾ ¾ÈµÇ´Â ½Ã½ºÅÛÀÔ´Ï´Ù.
À̶§ ÀÚ¹Ù ¾ð¾îÀÇ À̽ļº°ú ÇØ¼® ±â´ÉÀº ÀÌ·¯ÇÑ ¹®Á¦¸¦ ÇØ°á ÇÕ´Ï´Ù. ÀÚ¹Ù´Â ¸Å¿ì µ¿ÀûÀ̹ǷΠµ¿ÀûÀ¸·Î È®Àå °¡´ÉÇÑ ½Ã½ºÅÛÀ» »ý»êÇÕ´Ï´Ù. ÀÚ¹Ù ¾ð¾î´Â º¯ÈÇϴ ȯ°æ¿¡ ÀûÀÀÇÒ ¼ö ÀÖµµ·Ï ¼³ °èµÇ¾ú½À´Ï´Ù. Ŭ·¡½ºµéÀº ÇÊ¿äÇÒ¶§¸¶´Ù µ¿ÀûÀ¸·Î ¸µÅ©ÇÒ ¼ö ÀÖÀ¸¸ç ³×Æ®¿÷ »ó¿¡¼ ´Ù¿î¹ÞÀ» ¼ö ÀÖ½À´Ï´Ù. ÀÎÀÔ ÄÚµå´Â °ËÁõÀ» °ÅÄ£ÈÄ¿¡ ÇØ¼®±â·Î Àü´ÞµÇ¾î ½ÇÇàµË´Ï´Ù.
½Ç½Ã°£ ½Ã½ºÅÛ¿¡¼ ³×Æ®¿÷À̳ª ³ëµå(node)°¡ ²÷¾îÁö°Ô µÇ¸é, »õ·Ó°Ô Á¤º¸¸¦ º¸³»°Å³ª ´Ù½Ã ÀÏÀ» ó¸®ÇØ¾ß ÇÏ´Â °æ¿ì°¡ Á¾Á¾ ÀÖ½À´Ï´Ù. ±×·¯³ª ÀÚ¹Ù ÇÁ·Î±×·¡¹Ö ȯ°æÀº ÀÌ·¯ÇÑ ºÎ´ãÀ» ´ú¾îÁÙ ¼ö ÀÖ½À´Ï´Ù. ÀÚ¹Ù´Â ³×Æ®¿÷À̳ª, ±â°èÀÇ ÇÁ·Î¼¼¼, ÄÉÀ̺íÀÇ Á¾·ù¿¡ ´ëÇØ¼ ¾Ë Çʿ䰡 ¾ø½À´Ï´Ù. ÀÚ ¹Ù´Â ¿ÀÁ÷ ÀÚ¹Ù ¹ÙÀÌÆ® Äڵ常 Àоî¿Í¼ ÀÏÀ» ¼öÇàÇϱ⸸ ÇÏ¸é µË´Ï´Ù.
½Ç½Ã°£ ½Ã½ºÅÛÀ» °³¹ßÇÒ¶§¿¡´Â ±â¼úÀûÀÎ ¸é¿¡¼ ´ÙÀ½°ú °°Àº °ªºñ½Ñ ¿ä±¸»çÇ×ÀÌ ÀÖ½À´Ï´Ù.
ÀÌ·¯ÇÑ ½Ç½Ã°£ ½Ã½ºÅÛÀÇ ¿ä±¸»çÇ× ¾Æ·¡ ÀÚ¹Ù´Â ºñ±³Àû Àú·ÅÇÑ °³¹ß, À¯±â ºñ¿ë°ú, ºü¸¥ ¸¶ÄÉÆÃ,
³ôÀº À̽ļº, ³ôÀº ³×Æ®¿÷ ¿¬°á¼º, ³ôÀº ¾ÈÁ¤¼º°ú ±â´É¼ºÀ» Á¦°øÇÕ´Ï´Ù. ºÐ¸¸ ¾Æ´Ï¶ó, °·ÂÇÑ ±×·¡
ÇÈ Áö¿ø°ú »ç¿ëÀÚ ÀÎÅÍÆäÀ̽º´Â ±× ÁúÀ» ÇÑÃþ ³ô¿©ÁÝ´Ï´Ù.
±âÁ¸ÀÇ ÇÁ·Î±×·¡¹Ö ¾ð¾îº¸´Ù °·ÂÇØÁø ÀÚ¹ÙÀÇ ±â´ÉÀ» ÅëÇÏ¿© ¼ÒÇÁÆ®¿þ¾î »ê¾÷°ú, ÀÎÅͳÝÀº Å« º¯È¸¦ ¸Â¾ÆÇÏ°Ô µÉ°ÍÀÔ´Ï´Ù. ³×Æ®¿÷ ¼Óµµ°¡ »¡¶óÁö°Ô µÊÀ¸·Î½á ÀÌÁ¨ ´õ ÀÌ»ó ³» ÄÄÇ»ÅÍ¿¡ ÇÁ·Î ±×·¥À» ¼³Ä¡ÇÒ Çʿ䰡 ¾ø¾îÁú°ÍÀÔ´Ï´Ù. ¼¼È÷ µîÀåÇϰí ÀÖ´Â NC(Network Computer)³ª ÀÚ¹Ù ÅÍ ¹Ì³Î(Java Terminal)°ú °°Àº °ÍÀÌ ¹Ù·Î ±×°ÍÀÔ´Ï´Ù.
¾ÕÀ¸·Î ÀÚ¹Ù°ü·Ã ´Ù¾çÇÑ ÆÐŰÁö³ª, °³¹ß ȯ°æÀÌ ÃæºÐÈ÷ Á¦°øµÇ¸é ÇöÀçÀÇ ¸ðµç ¼ÒÇÁÆ®¿þ¾î´Â ÀÚ ¹Ù ÀÀ¿ë ÇÁ·Î±×·¥À¸·Î ÀüȯÇÒ°ÍÀÔ´Ï´Ù. ÀÌ·¯ÇÑ ÇÁ·Î±×·¥Àº ƯÈ÷, ¾Õ¿¡¼ ¼³¸íÇÑ ¸ÖƼ¹Ìµð¾î ÇÁ·Î ±×·¥ÀϰÍÀ̰í, ½Ç½Ã°£ ¼ºñ½º¸¦ ÇØÁÖ´Â ³×Æ®¿÷ ÇÁ·Î±×·¥ÀϰÍÀ̰í, ¹æ´ëÇÑ µ¥ÀÌÅ͸¦ ó¸®ÇÏ´Â µ¥ÀÌ Åͺ£À̽º ¼ºñ½º°¡ µÉ°ÍÀÔ´Ï´Ù.
ÇöÀç ºñÁê¾ó ÇÁ·Î±×·¡¹Ö ȯ°æ¿ª½Ã ÀÎÅÍ³Ý ÇÁ·Î±×·¡¹ÖÀ» ÁöÇâÇϰí ÀÖÀ¸¸ç, Á¶±Ý¾¿ ÀÚ¹Ù¸¦ Áö¿ø
Çϰí ÀÖ½À´Ï´Ù. ÀÌ·¯ÇÑ ÇüÅ´ ÀÚ¹Ù ÇÁ·Î±×·¡¹Ö ȯ°æ¿¡¼ ÇöÀçÀÇ C/C++À» ÀÌ¿ëÇÑ ºñÁê¾ó ÇÁ·Î±×
·¡¹ÖÀ» Áö¿øÇÏ´Â ÇüÅ·ΠÀüȯµÉ°ÍÀÔ´Ï´Ù. ÇöÀçÀÇ ºñÁê¾ó ÇÁ·Î±×·¡¸Ó´Â õõÈ÷ ÀÚ¹Ù ÇÁ·Î±×·¡¹Öȯ
°æÀ» ¸ÂÀÌÇÒ Áغñ¸¦ ÇØ¾ßÇÒ°ÍÀÔ´Ï´Ù.