IBM Korea Skip to main content
       IBM Ȩ    |  Á¦Ç° & ¼­ºñ½º  |  °í°´Áö¿ø & ´Ù¿î·Îµå  |  È¸¿ø°¡ÀÔ  

Diagnosing Java Code : ´ëÈ­½Ä °Ë»ç ±â´ÉÀ» Á¦°øÇÏ´Â Repls
¼ÒÇÁÆ®¿þ¾î¸¦ ´ëÈ­½ÄÀ¸·Î È¿°úÀûÀ¸·Î Áø´ÜÇÏ´Â ±â¹ý ¹× Åø

Eric E. Allen
¹Ú»ç °úÁ¤, ÀÚ¹Ù ÇÁ·Î±×·¡¹Ö ¾ð¾î ÆÀ, Rice ´ëÇб³
2002³â 3¿ù

Column icon º¸Åë ÀÚ¹Ù ÇÁ·Î±×·¥À» ½ÇÇà½Ãų ¶§´Â String[] ÀÔ·Â Àμö¸¦ »ç¿ëÇÏ¿© ¸Å°³º¯¼öµéÀ» Àü´ÞÇϸ鼭 main() ¸Þ¼Òµå·ÎºÎÅÍ ÇÁ·Î±×·¥ÀÌ ¼öÇàµÇ¾î¾ß ÇÑ´Ù. ±×·¯³ª ÇÁ·Î±×·¥ÀÌ ¾ÆÁ÷ µð¹ö±ëµÇ°í ÀÖÀ» ¶§´Â ÀÌ°ÍÀÌ ¼º°¡½Å ÀÛ¾÷ÀÌ µÉ ¼ö ÀÖ´Ù. À̹ø ´Þ¿¡ Eric AllenÀº ÇÁ·Î±×·¥ÀÇ Ç¥Çö°ú ±¸¹®µéÀ» ´ëÈ­½ÄÀ¸·Î °Ë»çÇÒ ¶§ÀÇ ÀÌÁ¡¿¡ ´ëÇØ ¼³¸íÇÏ°í, ÀÌ ÀÛ¾÷À» µµ¿ÍÁÖ´Â ¸î °¡Áö ÀÚ¹Ù repls(read-eval-print-loop Åø)À» Á¦½ÃÇÑ´Ù. ±×´Â ¶ÇÇÑ ´ëÈ­Çü °Ë»ç ¹æ¹ýÀÌ GUI¸¦ ±¸ÃàÇÏ°í »õ·Î¿î API¸¦ Á¶»çÇϴµ¥ ¾ó¸¶³ª À¯¿ëÇÑÁö¸¦ ¼³¸íÇÑ´Ù. ÀÌ ±ÛÀ» ÀÐ°í ³ª¸é ¿©·¯ºÐÀº »çÀü¿¡ µð¹ö±ëµÈ ÇÁ·Î±×·¥¿¡¼­ ¿Àµ¿ÀÛÀ» ´ëÈ­ÇüÀ¸·Î Áø´ÜÇØ¾ß ÇÏ´Â ÀÌÀ¯¿Í ±× ¹æ¹ýÀ» ¾Ë°Ô µÉ °ÍÀÌ°í ¿©·¯ºÐÀÇ ÀÛ¾÷À» µµ¿Í ÁÙ ¸î¸î ÀÚ¹Ù Åø¿¡ Á¢±ÙÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù.

´ëºÎºÐÀÇ ÇÁ·Î±×·¥Àº ¼ö ¸¹Àº Ŭ·¡½º »ó¿¡ Àü°³µÇ´Â ´Ù¼öÀÇ ¸Þ¼ÒµåµéÀ» Æ÷ÇÔÇÏ°í ÀÖ´Ù. ¹°·Ð, ÇÁ·Î±×·¥ÀÇ ÁÖ ÁøÀÔÁ¡¿¡¼­ Ãâ¹ßÇÏ¿© ÀÌ ¸Þ¼ÒµåµéÀ» ÀüºÎ Å×½ºÆ®ÇÏ´Â °ÍÀº ºÒ°¡´ÉÇÏÁø ¾Ê´Ù Çصµ ¸Å¿ì ¾î·Á¿î ÀÏÀÌ´Ù.

´ÜÀ§ Å×½ºÆ®°¡ À¯¿ëÇÑ ÀÌÀ¯°¡ ¹Ù·Î ÀÌ ¶§¹®ÀÌ´Ù. ¸¹Àº ÇÁ·Î±×·¡¸Óµé°ú ¼ÒÇÁÆ®¿þ¾î ¼³°èÀÚ (³ª¸¦ Æ÷ÇÔÇÏ¿©)µéÀº °­·ÂÇÑ ¼ÒÇÁÆ®¿þ¾î ÀÛ¼º¿¡ ÀÖ¾î ´ÜÀ§ Å×½ºÆ®ÀÇ À¯¿ëÇÔÀ» °­Á¶ÇÑ´Ù. ±×·¯³ª ¿©·¯ºÐ ÇÁ·Î±×·¥ÀÇ ´Ù¾çÇÑ ¿ä¼Òµé¿¡ Á» ´õ ´ëÈ­½ÄÀ¸·Î Á¢±ÙÇÏ°í ½Í´Ù¸é ÇϳªÀÇ ÀáÀçÀûÀÎ ¼Õ½ÇÀ» °¨¼öÇØ¾ß ÇÑ´Ù.

ÀÌ¿Í °°Àº °æ¿ì¿¡ °¢ °á°ú¿¡ ´ëÇØ »õ·Î¿î ´ÜÀ§ Å×½ºÆ®¸¦ ÀÛ¼ºÇÏ°í ÄÄÆÄÀÏÇÏ°í ½ÇÇà½ÃÅ°´Â °ÍÀº ¼º°¡½Å ÀÏÀÌ µÉ ¼ö ÀÖ´Ù. ³ª´Â ÁÖ¾îÁø ƯÁ¤ ÀÔ·Â »çÇ׿¡ ´ëÇØ ³» ÇÁ·Î±×·¥ÀÌ ¾î¶»°Ô ÇൿÇÒÁö¸¦ ¹Ì¸® ¾ËÁö ¸øÇÒ ¶§ (¿¹¸¦ µé¾î Àΰø Áö´É ÇÁ·Î±×·¥ÀÇ °æ¿ìó·³) ÀÌ·¯ÇÑ Á¡ÀÌ Æ¯È÷ »ç½ÇÀÓÀ» ¹ß°ßÇß´Ù.

±×·¸´Ù¸é ¹«¾ùÀ» ÇØ¾ß ÇÒ °ÍÀΰ¡?

¼Ò±Ô¸ð º¯°æÀ» À§ÇØ ¶¡ È긮Áö ¸»¶ó.
À¯»çÁ¡À» ²ø¾î ³»±â À§ÇØ, º¸Åë ÄÄÆÄÀϵǴ ¾ð¾î (ÀÚ¹Ù¿Í C++ °°ÀÌ)¿¡¼­ÀÇ ÇÁ·Î±×·¡¹Ö°ú ÀÎÅÍÇÁ¸®ÅÍ ¹æ½ÄÀÇ ¾ð¾î (Python°ú Scheme)¿¡¼­ÀÇ ÇÁ·Î±×·¡¹ÖÀÇ Â÷À̸¦ »ìÆ캸ÀÚ.

ÄÄÆÄÀÏµÈ ¾ð¾î¿¡¼­ÀÇ ¸ðµç ÀÛ¼º/Å×½ºÆ®/µð¹ö±ë ÁÖ±â´Â ÄÄÆÄÀÏÀ̶ó´Â Ãß°¡ÀûÀÎ ´Ü°è¸¦ ¹Ýµå½Ã Æ÷ÇÔÇÏ°í Àִµ¥, À̴ ƯÈ÷ ´Ù¼öÀÇ ¼Ò±Ô¸ð º¯°æ¿¡¼­´Â Áö·çÇÑ ÀÛ¾÷ÀÌ µÉ ¼ö ÀÖ´Ù. ±×·¡¼­ ¿ì¸®´Â ÀÎÅÍÇÁ¸®ÅÍ ¹æ½ÄÀÇ ¾ð¾î°¡ ÈξÀ À¯µ¿ÀûÀ̾ ´õ ½±°Ô ¼öÁ¤µÈ´Ù´Â °á·ÐÀ» ³»¸®°Ô µÈ´Ù. (À¯¿¬¼º¿¡ ´ëÇÑ ´ë°¡µµ ÀÖ´Ù. : ÀÎÅÍÇÁ¸®ÅÍ ¹æ½ÄÀÇ ¾ð¾î´Â Äڵ忡 ´ëÇØ À¯Çü °Ë»ç¿Í °°Àº Á¤ÀûÀÎ °Ë»ç¸¦ ´ú ¼öÇàÇÏ´Â °æÇâÀÌ ÀÖ´Ù.)

¶§¶§·Î °ñÄ¡ ¾ÆÇ ÀçÄÄÆÄÀÏ °úÁ¤À» °ÅÄ¡Áö ¾Ê°í ÇÁ·Î±×·¥À» º¯°æÇÏ°í ½ÍÀº °Íó·³, ¿ì¸®´Â ¿ì¸®ÀÇ ÇÁ·Î±×·¥ suite¿¡ »õ·Î¿î ´ÜÀ§ Å×½ºÆ®¸¦ Ãß°¡ÇÏ´Â Çü½ÄÀ» Â÷¸®Áö ¾Ê°í ÇÁ·Î±×·¥ÀÇ ÀϺΠ¿ä¼Ò¸¦ °Ë»çÇÏ°í ½ÍÀ» ¼ö ÀÖ´Ù. ÀÌ·± °æ¿ì ÀüÅëÀûÀ¸·Î "read-eval-print-loop (repl)"·Î ¾Ë·ÁÁø ÅøÀ» »ç¿ëÇÏ¸é µµ¿òÀÌ µÉ ¼ö ÀÖ´Ù.

repl Àº ÇϳªÀÇ ½ÄÀ» ÀԷ»çÇ×À¸·Î ÃëÇØ Æ¯Á¤ ÇÁ·Î±×·¥ÀÇ ¸Æ¶ô¿¡¼­ À̸¦ °Ë»çÇÏ°í ±× °á°ú¸¦ È­¸é¿¡ Ãâ·ÂÇÏ´Â ÅؽºÆ® ±â¹ÝÀÇ ÅøÀÌ´Ù. ±×¸®°í ³ª¼­ ´Ù¸¥ ½ÄÀ» ÀÔ·Â »çÇ×À¸·Î ÃëÇÒ ¶§ ±îÁö ±â´Ù¸° ÈÄ À§ ÀÛ¾÷µéÀ» ¹Ýº¹ÇÑ´Ù. ±×·¯ÇÑ ÅøÀº ¸®½ºÇÁ(Lisp)¿Í °°Àº ¾ð¾î¿¡ »Ñ¸®¸¦ µÎ°í ÀÖÁö¸¸, Python°ú °°Àº ½Å±Ô ¾ð¾î¿¡¼­µµ »ç¿ëµÈ´Ù.

ÀÚ¹Ù ÇÁ·Î±×·¡¹Ö¿¡¼­ replÀÇ ÀÌÁ¡

±×·¯ÇÑ ÅøÀÌ À¯¿ëÇÏ°Ô »ç¿ëµÇ´Â ¾ð¾î´Â ÀÌµé »ÓÀÌ ¾Æ´Ï´Ù. ÀÚ¹Ù ÇÁ·Î±×·¡¸Óµéµµ replÀ» »ç¿ëÇØ ÇýÅÃÀ» ¾òÀ» ¼ö Àִµ¥, ÀÌ´Â µð¹ö±ë »Ó¸¸ ¾Æ´Ï¶ó ´Ù¸¥ ÀÛ¾÷¿¡¼­µµ ¸¶Âù°¡Áö´Ù. .

GUI ±¸ÃàÇϱâ

GUI¸¦ ±¸ÃàÇÒ ¶§´Â ¼³°èÇÏ°í ¿¬°áÇØ¾ß ÇÒ ¼ö ¸¹Àº ÄÄÆ÷³ÍÆ®µéÀÌ ÀÖ´Ù. ¿©·¯ºÐÀº GUI¸¦ ±¸ÃàÇÒ ¶§ ´ÙÀ½°ú °°Àº °ÍÀ» Àå´ãÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù.:

  • ÄÄÆ÷³ÍÆ®µéÀº ºÒ¸íÈ®ÇÑ ¹æ½ÄÀ¸·Î »óÈ£ ÀÛ¿ëÇÒ °ÍÀÌ´Ù.

  • GUI¸¦ ½ÇÇà½ÃÅ°±â Àü¿¡ GUIÀÇ ¸ðµç Äڵ带 ÀÛ¼ºÇÏ´Â °ÍÀº ½Ã°£ ³¶ºñÀÌ´Ù.

  • GUI°¡ ½ÇÁ¦·Î ¾î¶»°Ô Ç¥½ÃµÇ´ÂÁö¸¦ ÀÏ´Ü º¸¸é ºÐ¸íÈ÷ ¿©·¯ºÐÀº ¸î °¡Áö Ãø¸éÀ» º¯°æÇÏ°í ½ÍÀ» °ÍÀÌ´Ù.

ÀÌ ¹®Á¦¿¡ ´ëÇÑ ÀϹÝÀûÀÎ ¼Ö·ç¼ÇÀº JBuilder, Forte, ¹× ±âŸ ÅëÇÕ °³¹ß ȯ°æ(IDE)¿¡ µé¾î ÀÖ´Â °Í°ú °°Àº ±×·¡ÇÈ ±â¹ÝÀÇ GUI »ý¼º ÅøÀ» »ç¿ëÇÏ´Â °ÍÀÌ´Ù. °³ÀÎÀûÀ¸·Î ³ª´Â ÀÌ ¹æ½ÄÀ» ½È¾îÇÑ´Ù. ÅøÀÌ ¾î¶² ÀÚ¹Ù Äڵ带 »ý¼ºÇÒ °ÍÀÎÁö ¾Ë±â ¾î·Æ°í »ý¼ºµÈ ÅøÀ» ¼öÁ¤ÇÏ·Á¸é GUI ±¸Ãà Åø°úÀÇ È£È¯¼ºÀ» ÀÒ¾î¹ö¸± À§ÇèÀÌ Àֱ⠶§¹®ÀÌ´Ù. (»ç½Ç ÀϺΠIDE´Â °­Á¦ÀûÀ¸·Î »ç¿ëÀÚ°¡ ±â°è°¡ »ý¼ºÇÑ ÄÚµåÀÇ ÀϺθ¦ ¼öÁ¤ÇÏÁö ¸øÇÏ°Ô ÇÏ°í ÀÖ´Ù.)

¶ÇÇÑ ÀÌ GUI Åøµé Áß ¸¹Àº °ÍÀÌ ÀÚ¹Ù Äڵ带 »ý¼ºÇÒ ¶§ µ¶ÀÚÀûÀÎ GUI ¶óÀ̺귯¸®¸¦ »ç¿ëÇÏ¿©, ¿©·¯ºÐÀÌ ÀÛ¼ºÇÑ GUIÀÇ È£È¯¼ºÀ» Á¦ÇÑÇÑ´Ù.

³ª´Â replÀ» »ç¿ëÇØ GUI¸¦ ±¸ÃàÇÏ´Â °ÍÀÌ ÈξÀ ½±´Ù´Â °ÍÀ» ¾Ë°Ô µÇ¾ú´Ù. °£´ÜÈ÷ °¢ GUI ÄÄÆ÷³ÍÆ®¸¦ ´ëÈ­½ÄÀ¸·Î Á¤ÀÇÇÑ ÈÄ À̸¦ Â÷·Ê·Î Ç¥½ÃÇÏ¸é µÈ´Ù. ¸¶À½¿¡ µéÁö ¾Ê´Â °ÍÀº ¹«¾ùÀ̵ç Áï½Ã °íÄ¥ ¼ö ÀÖ´Ù. ±×¸®°í Åø¿¡¼­ »óÈ£ÀÛ¿ëµéÀ» ¼±ÅÃÇØ ³» ÇÁ·Î±×·¥¿¡ ºÙ¿©³ÖÀ¸¸é µÈ´Ù.

»õ API ŽÇèÇϱâ

ÀÚ¹Ù ¾ð¾î·Î ÇÁ·Î±×·¡¹ÖÇÏ´Â °¡Àå Å« ÀÌÁ¡ Áß Çϳª´Â µ¥ÀÌÅͺ£À̽º¿¡¼­ À¥ ¼­ºñ½º, ÅÚ·¹ºñÁ¯¿¡ À̸£±â±îÁö ¸ðµç °Íµé°ú ÀÎÅÍÆäÀ̽º ÇÒ ¼ö ÀÖ´Â ¾öû³ª°Ô dzºÎÇÑ API°¡ ÀÖ´Ù´Â °ÍÀÌ´Ù. ±×·¯³ª APIÀÇ Àǹ̷ÐÀ» ¹è¿ì´Â µ¥´Â ½Ã°£ÀÌ °É¸°´Ù.

Á¾Á¾ Javadocs´Â API ÇൿÀÇ ¸ðµç Ãø¸éÀ» ÃÖÁ¾ÀûÀ¸·Î Á¤ÀÇÇØ ³õÁö ¾Ê¾ÒÀ» °ÍÀÌ´Ù. ÀÌ ³­Ã³ÇÑ »óȲ¿¡ ´ëÇÑ ÇØ°á¹æ¾ÈÀº API¸¦ Á÷Á¢ Å×½ºÆ®ÇÏ´Â °ÍÀε¥, replÀ» »ç¿ëÇϸé ÈξÀ ´õ »¡¸® ¼öÇàÇÒ ¼ö ÀÖ´Ù. ¸Þ¼Òµå È£ÃâÀ» ÀÔ·ÂÇÏ°í °á°ú¸¦ º¸±â¸¸ ÇÏ¸é µÈ´Ù!

¶Ç ÇϳªÀÇ ºÎ¼öÀûÀÎ ÀÌÁ¡Àº replÀ» »ç¿ëÇØ API¸¦ Å×½ºÆ®ÇÏ¸é ´ëºÎºÐÀÇ ÇÁ·Î±×·¡¸ÓÀÇ ÁÖ¿ä ÇàÅ (¿ì¸®´Â ½ÇÁ¦·Î Çغ½À¸·Î½á Á¦ÀÏ ¸¹ÀÌ ¹è¿î´Ù)°¡ °­È­µÈ´Ù´Â °ÍÀÌ´Ù.

ÀÚ¹Ù ÇÁ·Î±×·¡¹Ö¿¡ »ç¿ëÇÒ ¼ö ÀÖ´Â Repls

repls°¡ ±×·¸°Ô ¸¹Àº ÀåÁ¡À» °¡Áö°í ÀÖ´Ù¸é, ºÐ¸íÈ÷ ´ÙÀ½ Áú¹®Àº ÀÚ¹Ù ¾ð¾î¿¡ »ç¿ëµÉ ¼ö ÀÖ´Â repls¿¡´Â ¾î¶² °ÍµéÀÌ Àִ°¡ÀÏ °ÍÀÌ´Ù.

Jython

Jython (¿¹Àü¿¡´Â JPythonÀ̶ó°í ¾Ë·ÁÁü)Àº ÀÚ¹Ù ÇÁ·Î±×·¡¹Ö ¾ð¾î¿¡ Python (repl Æ÷ÇÔ)À» ±¸ÇöÇÑ °ÍÀÌ´Ù (¼øµµ 100% º¸Áõ). JythonÀº (´Ù¼Ò Àå½ÄÀûÀÎ) ÀÚ¹Ù ¼Ò½º Äڵ峪 ȤÀº ¹ÙÀÌÆ®Äڵ忡 Á÷Á¢ PythonÀ» ½ÇÁ¦·Î ÄÄÆÄÀÏÇÑ´Ù.

PythonÀÇ °³³ä¿¡¼­ ¸ðµç ½Ãµµ´Â JythonÀ» ÀÚ¹Ù¿Í ¸Å²öÇÏ°Ô »óÈ£¿î¿ë½ÃÅ°µµ·Ï Çϱâ À§ÇÑ °ÍÀÌ´Ù. PythonÀº ¿©·¯ºÐÀÌ ÀÚ¹Ù ¾ð¾î¿¡¼­ ÇÁ·Î±×·¡¹ÖÇÏ´Â °Íó·³ ¸ðµç Àڹ٠ǥÁØ ¶óÀ̺귯¸®¿¡ Á¢±ÙÇÒ ¼ö ÀÖ°Ô ÇØ ÁÖ°í ±âÁ¸ Àڹ٠Ŭ·¡½º ÆÄÀÏÀ» »ç¿ëÇÒ ÀÖ°Ô ÇÑ´Ù. µû¶ó¼­ ¿©·¯ºÐÀº replÀ» ÀÌ¿ëÇÏ¿© Ç¥ÁØ ¶óÀ̺귯¸®¸¦ »ç¿ëÇÒ ¼ö ÀÖÀ» »Ó ¾Æ´Ï¶ó ÀÌ¹Ì ¹ÙÀÌÆ®ÄÚµå·Î ÄÄÆÄÀÏÇÑ ¿©·¯ºÐÀÇ ÀÚ¹Ù (Jython) Ŭ·¡½º¿¡ ´ëÇؼ­µµ ÀÛ¾÷ÇÒ ¼ö ÀÖ´Ù.

Jython replÀ» »ç¿ëÇÒ ¶§ °í·ÁÇØ¾ß ÇÒ Áß¿ä »çÇ×Àº ¿©·¯ºÐÀÌ ÀÚ¹Ù ½ÄÀÌ ¾Æ´Ñ Python ½Ä À» ÀÛ¼ºÇÑ´Ù´Â Á¡ÀÌ´Ù. ±× °á°ú PythonÀÇ °£°áÇÔ°ú ¸ÚÁø ±¸¹®À» ¾òÀ» ¼ö ÀÖ´Â ÀåÁ¡ÀÌ ÀÖ´Ù.

¿¹¸¦ µé¾î, °¡·É a¸¦ 1·Î, b¸¦ 2·Î, c¸¦ 3À¸·Î ¸ÅÇνÃÅ°´Â »õ·Î¿î Çؽà Å×À̺íÀ» ÀÛ¼ºÇÏ·Á ÇÑ´Ù°í ÇØ º¸ÀÚ. :


>>> h = {'a':1, 'b':2, 'c':3}

Çؼ®±â´Â °¢ »õ ÀÔ·Â Çà ¾Õ¿¡ >>>¸¦ Ç¥½ÃÇÑ´Ù.

Jython ±¸¹®Àº ¶ÇÇÑ »õ·Î¿î GUI ¼³°èÇÒ ¶§ ¾ÆÁÖ À¯¸®ÇÏ´Ù. ¿ì¼±, ´ÙÀ½°ú °°ÀÌ GUI ±¸¼º ¿ä¼ÒÀÇ ´Ù¾çÇÑ Çʵ尡 »ý¼ºÀÚ¿¡ ´ëÇÑ Å°¿öµå ÀÎÀÚ·Î ÁöÁ¤µÉ ¼ö ÀÖ´Ù.:


>>> from javax.swing import *
>>> f = JFrame(visible=1)

À§ ¿¹´Â Jython°ú ÀÚ¹Ù ¾ð¾î°£ÀÇ ¸î °¡Áö Â÷ÀÌÁ¡À» º¸¿©ÁØ´Ù.:

  • import ÀýÀÇ ±¸¹®ÀÌ ¾ÆÁÖ ´Ù¸£´Ù.

  • boolean ´ë½Å ints À¯ÇüÀÌ »ç¿ëµÈ´Ù. (1Àº ÂüÀÌ°í 0Àº °ÅÁþÀÌ´Ù)

Jython Äڵ尡 ¿©·¯ºÐÀÇ Å¸ÀÌÇÎÀ» ÁÙ¿©ÁÖ´Â ¶Ç ´Ù¸¥ ¿¹°¡ ÀÖ´Ù. Áï GUI ±¸¼º¿ä¼Ò¿¡ action listener¸¦ Ãß°¡ÇÏ´Â °ÍÀÌ´Ù. º¸Åë ±×·¯ÇÑ listener´Â Command ÆÐÅÏÀ» »ç¿ëÇÏ¿© À͸íÀÇ ³»ºÎ Ŭ·¡½ºÀÇ ÀνºÅϽº·Î ÁöÁ¤µÈ´Ù. Python¿¡¼­ (±×¸®°í ´Ù¸¥ ¸¹Àº "½ºÅ©¸³Æ® ¹æ½ÄÀÇ" ¾ð¾î¿¡¼­) ±×·¯ÇÑ ¸í·É¾î´Â ´ëÈ­½ÄÀÇ ±â´É Á¤ÀǸ¦ »ç¿ëÇÏ¿© ´õ °£°áÇÏ°Ô ÁöÁ¤µÉ ¼ö ÀÖ´Ù. ¿¹¸¦ µé¾î, À§ÀÇ ´ëÈ­½Ä ¼¼¼ÇÀ» ±â¹ÝÀ¸·Î »ï¾Æ JButton¿¡ °£´ÜÇÑ action listener¸¦ Ãß°¡Çغ¸ÀÚ. :


>>> def listener(event):
...   print 'thank you'
>>>

ÀÌ°ÍÀº Jython¿¡¼­ ÇÔ¼ö¸¦ Á¤ÀÇÇÏ´Â ¿¹ÀÌ´Ù. Çؼ®±â´Â ^ (»ðÀÔ Áö½Ã ±âÈ£)¿¡ Ÿ¿øÀ» ÀμâÇÔÀ¸·Î½á ±¸¹®ÀÌ ´ÙÀ½ Çà¿¡ °è¼ÓµÉ °ÍÀÓÀ» ¾Ë·ÁÁØ´Ù. ÀÌ ÇÔ¼ö´Â ÇϳªÀÇ ÀÎÀÚ¸¦ ÃëÇϸç Ç¥ÁØ Ãâ·ÂÀ¸·Î "thank you"¸¦ Ç¥½ÃÇÑ´Ù. ¿ì¸®´Â ´ÙÀ½°ú °°ÀÌ ÀÌ°ÍÀ» action listener·Î »ç¿ëÇÒ ¼ö ÀÖ´Ù. :


>>> panel = JPanel()
>>> panel.add(JButton('press me', actionPerformed=listener))
>>> f.getContentPane().add(panel)
>>> f.pack()

ÀÌÁ¦ "press me"¶ó´Â ¹öÆ°ÀÌ Àִ âÀÌ È­¸é¿¡ ³ªÅ¸³¯ °ÍÀÌ°í, ÀÌ ¹öÆ°À» ´©¸£¸é Ç¥ÁØ Ãâ·ÂÀ¸·Î "thank you"°¡ Ç¥½ÃµÉ °ÍÀÌ´Ù. ÀÚ¹Ù Äڵ带 »ç¿ëÇØ À̸¦ ¼öÇàÇÏ·Á¸é ¾ó¸¶³ª ÀåȲÇØÁúÁö »ó»óÇØ º¸¶ó.

¹°·Ð ´ÜÁ¡µµ ÀÖ´Ù. ¿¹¸¦ µé¾î :

  • Á¤ÀûÀÎ À¯Çü °Ë»ç¸¦ ¸øÇÑ´Ù. (Á¤ÀûÀÎ °Ë»ç°¡ repl¿¡¼­´Â ¾Æ¸¶ Ʋ¸²¾øÀÌ °ÅÀÇ °¡Ä¡°¡ ¾øÁö¸¸)

  • ¿©·¯ºÐÀÌ repl¿¡ ÀÔ·ÂÇÑ ¼ö½ÄÀº ÀÚ¹Ù Äڵ尡 ¾Æ´Ï±â ¶§¹®¿¡, ¸ÕÀú À̸¦ ¹ø¿ªÇÏÁö ¾Ê°í´Â repl·ÎºÎÅÍ ¿©·¯ºÐÀÇ ÇÁ·Î±×·¥À¸·Î ±× ¼ö½ÄµéÀ» º¹»çÇÏ¿© ºÙ¿© ³Ö±âÇÒ ¼ö ¾ø´Ù.

  • JythonÀ» ÀÚ¹Ù ÄÚµå¿Í »ç¿ëÇÒ ¶§ ¿©·¯ºÐÀº ¸Ó¸® ¼Ó¿¡ µÎ ¾ð¾î¸¦ µ¿½Ã¿¡ ±³¹¦ÇÏ°Ô ´Ù·ç¾î¾ß ÇÏ´Â ºÎ´ãÀ» ¾È°Ô µÈ´Ù. (À̸¦ Áñ±â´Â »ç¶÷µµ ÀÖ±â´Â ÇÏ´Ù)

DynamicJava

ÀÚ¹Ù¿¡¼­ »ç¿ëÇÒ ¼ö ÀÖ´Â ¶Ç ´Ù¸¥ replÀº DynamicJavaÀÌ´Ù. DynamicJava´Â ÁøÁ¤ÇÑ ÀÚ¹Ù ±â¹ÝÀÇ(°ÅÀÇ ±×·¸´Ù°í º¼ ¼ö ÀÖ´Ù) °³¹æÇü Åø·Î ´ÙÀ½°ú °°Àº Â÷ÀÌÁ¡À» °¡Áö°í ÀÖ´Ù.:

  • repl ¾ð¾î´Â Á¤ÀûÀÎ À¯ÇüÀÇ º¯¼ö¸¦ ¼±¾ðÇÒ ¶§ À̸¦ ¸í½ÃÇÏÁö ¾Ê¾Æµµ µÇ°Ô ÇØÁØ´Ù.

  • ±¸¹®ÀÇ ³¡¿¡ ¼¼¹ÌÄÝ·Ð(;)À» Ãß°¡ÇÏÁö ¾Ê¾Æµµ µÈ´Ù. Çؼ®±â´Â ¶ÇÇÑ ±¸¹®À» °Ë»çÇÑ °á°ú·Î nullÀ» (¾û¼ºÇÏ°Ô) ¹ÝȯÇÑ´Ù (±¸¹®ÀÌ ¾Æ¹«·± °ªµµ ¹ÝȯÇÏÁö ¾Ê´Â ÆíÀÌ ³ªÀ» °ÍÀÌ´Ù).

  • repl¿¡¼­ ¿©·¯ºÐÀº °´Ã¼µéÀÇ private Çʵ忡 Á¦ÇÑ ¾øÀÌ Á¢±ÙÇÒ ¼ö ÀÖ´Ù.

Ãʺ¸ ÀÚ¹Ù ÇÁ·Î±×·¡¸Ó¿¡°Ô´Â ÀÌ·± Â÷À̵éÀÌ È¥¶õÀ» ÀÏÀ¸Å³ ¼ö ÀÖÀ¸¹Ç·Î Áß¿äÇÒ °ÍÀÌ´Ù. Á» ´õ ¼÷·ÃµÈ ÇÁ·Î±×·¡¸Ó¶ó¸é ¾Æ¸¶µµ ÀϺΠÁ¦¾à»çÇ×ÀÌ ¿ÏÈ­µÈ Á¡À» ȯ¿µÇÒ °ÍÀÌ´Ù. ¾î¶² °æ¿ì¿¡µç DynamicJava´Â °­·ÂÇÏ°í ¸Å¿ì À¯¿ëÇÑ ¼ÒÇÁÆ®¿þ¾î Á¦Ç°ÀÌ´Ù. (¹«·á¶ó´Â Á¡µµ ÀÏÁ¶¸¦ ÇÑ´Ù)

»õ·Î¿î ÀÚ¹Ù IDE

Rice´ëÇÐÀÇ JavaPLT ¿¬±¸¼Ò(Áöµµ ±³¼ö Robert Cartwright)¿¡¼­ ¿ì¸®´Â ÃÖ±Ù »õ·Ó°í, ¿ÀÇ ¼Ò½ºÀ̸ç, ÀÏ¹Ý °ø°³ ¶óÀ̼¾½º(GPL) Çü½ÄÀ¸·Î µÈ ÀÚ¹Ù ¾ð¾î¿ë °³¹ß ȯ°æÀÎ DrJava¸¦ Ãâ½ÃÇÏ¿´°í, ¿©±â¿¡´Â DynamicJava replÀÇ Á¤¸®µÈ ¹öÀüÀÌ ³»Àå ÄÄÆ÷³ÍÆ®·Î µé¾î ÀÖ´Ù. ³ª´Â "Á¤¸®µÈ"À̶ó°í ¸»ÇÏ¿´´Âµ¥ ÀÌ°ÍÀº ¿ì¸®°¡ À§¿¡¼­ ¼³¸íÇÑ DynamicJavaÀÇ ¸î °¡Áö ¾û¼ºÇÑ ±â´ÉÀ» ¼û°å±â ¶§¹®ÀÌ´Ù.

DrJava ÇÁ·ÎÁ§Æ®´Â Ãʺ¸ ÄÄÇ»ÅÍ °øÇаú ÇкλýÀÇ Áöµµ¿¡ »ç¿ëÇÒ ¹«·áÀÇ °¡º­¿î Java IDE¸¦ °³¹ßÇϱâ À§ÇÑ Extreme Programming ÇÁ·ÎÁ§Æ®ÀÌ´Ù. ÀÌ IDE´Â Çкλý¿ëÀ¸·Î ¼³°èµÇ¾úÁö¸¸, ¸ðµç ¼öÁØÀÇ °³¹ßÀÚ¿¡°Ô À¯¿ëÇÒ ¼ö ÀÖ´Â ±â´ÉµéÀ» ½Å¼ÓÇÏ°Ô °³¹ßÇÏ°í ÀÖ´Ù. DrJava ÀÇ ¼ûÀº öÇÐÀº ¸î¸î IDE°¡ ½ÇÁ¦ ÄÚµå·ÎºÎÅÍ ÇÁ·Î±×·¡¸Ó¸¦ ÇǽŽÃÅ°·Á Çß´ø °Í°ú´Â ´Þ¸®, ÇÁ·Î±×·¡¸ÓµéÀÌ °¡Áö°í ÀÖ´Â ¾ð¾î¿¡ ´ëÇÑ Áö½ÄÀ» °­·ÂÇÑ °³¹ß Åø Á¦°ø¿¡ »ç¿ëÇÏÀÚ´Â °ÍÀÌ´Ù.

ÀÌ IDE°¡ °¡Áø ¸î¸î ÈǸ¢ÇÑ ±â´É¿¡´Â ÄÚ¸àÆ®¿Í °ýÈ£ÀÇ ´ëÀÀÀ» ¾ÆÁÖ Á¤È®ÇÏ°Ô (Emacsº¸´Ù ÈǸ¢ÇÏ°Ô) ÇÏÀ̶óÀÌÆ®ÇÏ°í ÄÄÆÄÀÏ·¯ ¿¡·¯¸¦ ÇÏÀ̶óÀÌÆ®Çϴ Ŭ¸¯°¡´ÉÇÑ ¼Ò½º°¡ ÀÖ´Ù´Â Á¡ÀÌ Æ÷ÇԵȴÙ. ´ÙÀ½°ú °°ÀÌ ¸î °³ÀÇ Å¬¸¯ °¡´ÉÇÑ ÅÇÀÌ ÀÎÅÍÆäÀ̽º·Î Á¦°øµÈ´Ù.

  • »óÈ£ÀÛ¿ë ÅÇÀº ¿©·¯ºÐÀÌ DynamicJava replÀ» °¡Áö°í »óÈ£ÀÛ¿ëÇÏ¿© »õ·Î ÄÄÆÄÀÏµÈ Å¬·¡½ºµéÀ» ÀνºÅϽºÈ­ÇÏ°í Å×½ºÆ®Çϵµ·Ï ÇØÁØ´Ù.

  • ÄÄÆÄÀÏ·¯ ¿À·ù ÅÇÀº ¿©·¯ºÐÀÌ ÆíÁýâ¿¡¼­ ´Ù¾çÇÑ ÄÄÆÄÀÏ·¯ ¿¡·¯¸¦ Ŭ¸¯ÇÏ¿© ¼Ò½º ÄÚµå ³» ¿¡·¯°¡ ¹ß»ýÇÑ ÁöÁ¡À¸·Î °¥ ¼ö ÀÖµµ·Ï ÇØÁØ´Ù.

  • ÄÜ¼Ö ÅÇÀº System.out°ú System.err·Î º¸³»Áö´Â ¸ðµç ¸Þ½ÃÁö¸¦ Ç¥½ÃÇÑ´Ù.

(DrJavaÀÇ screen shot)

ÀÌ IDE¸¦ »ç¿ëÇغ» ¿ì¸®ÀÇ °æÇè¿¡ µû¸£¸é »óÈ£ÀÛ¿ë âÀ» ÅëÇØ ÇÁ·Î±×·¡¸Ó´Â º¹ÀâÇÑ °³¹ß°ú µð¹ö±ë ÀÛ¾÷µéÀ» ½±°Ô ¼öÇàÇÒ ¼ö ÀÖ´Ù. ´Ù¸¥ ¾ð¾î¿¡¼­µµ º¸¿©Áöµí, ¼Ò½º ÆíÁý±â¿Í repl¸¦ °áÇÕÇÏ¸é °­·ÂÇÑ ÅøÀÌ ¸¸µé¾îÁø´Ù.

repls¿¡ ´ëÇÑ °á·Ð
ÀÌ ¿¬Àç°¡ ÀçÄÄÆÄÀÏÀ̶ó´Â ³­Ç׿¡ ºüÁöÁö ¾Ê°íµµ ÀÚ¹Ù ÇÁ·Î±×·¥ÀÇ ¼ö½Ä°ú ±¸¹®À» ´ëÈ­½ÄÀ¸·Î °Ë»çÇÒ ¼ö ÀÖ°Ô ÇØ ÁÖ´Â ÁÖ¿ä ÅøÀÎ "read-eval-print-loop (repl)"À» È®ÀÎÇÏ°í ÀÔÁõÇØ ÁÖ¾ú±â¸¦ ¹Ù¶õ´Ù. ¿ì¸®´Â ¶ÇÇÑ GUI¸¦ ±¸ÃàÇÒ ¶§ ±×¸®°í ¿©·¯ºÐÀÌ »ç¿ëÇÒ ¼ö ÀÖ´Â ¼ö¸¹Àº Java API¸¦ ½Å¼ÓÇÏ°Ô °ËÅäÇÏ°í ½ÍÀ» ¶§ repls°¡ ¾ó¸¶³ª Áß¿äÇÑÁö¸¦ ¼³¸íÇÏ¿´´Ù.

Âü°í ÀÚ·á

¸ñ Â÷:
¼Ò±Ô¸ð º¯°æ ¼öÇàÇϱâ
Java¿Í repl
»ç¿ë°¡´ÉÇÑ repls
Jython
DynamicJava
repls¿¡ ´ëÇÑ °á·Ð
Âü°í ÀÚ·á
ÇÊÀÚ ¼Ò°³
±â»ç¿¡ ´ëÇÑ Æò°¡
°ü·Ã dW ¸µÅ©:
Charming Python: .NET¿ë JPython°ú Python ³»ºÎ
Diagnosing Java Code Ä÷³
Subscribe to the developerWorks newsletter
US ¿ø¹® Àбâ
Also in the Java zone:
Tutorials
Tools and products
Code and components
Articles
ÇÊÀÚ¼Ò°³
Eric AllenÀº Cornell ´ëÇп¡¼­ ÄÄÇ»ÅÍ °øÇÐ ¹× ¼öÇÐ Çлç ÇÐÀ§¸¦ ¹Þ¾ÒÀ¸¸ç Rice ´ëÇÐÀÇ ÀÚ¹Ù ÇÁ·Î±×·¡¹Ö ¾ð¾îÆÀ¿¡¼­ ¹Ú»ç °úÁ¤À» ¹â°í ÀÖ´Ù. ÇÐÀ§¸¦ ¸¶Ä¡±â À§ÇØ Rice ´ëÇÐÀ¸·Î µ¹¾Æ°¡±â Àü¿¡ EricÀº Cycorp »çÀÇ ¼±ÀÓ ÀÚ¹Ù ¼ÒÇÁÆ®¿þ¾î °³¹ßÀÚ¿´°í, ¶ÇÇÑ JavaWorldÀÇ ÀÚ¹Ù ÃʱÞÀÚ Åä·Ð Æ÷·³ÀÇ ÁøÇàÀÚÀ̱⵵ ÇÏ´Ù. ±×´Â ÀÚ¹Ù ¾ð¾î¿¡¼­ ¼Ò½º¿Í ¹ÙÀÌÆ®ÄÚµå ·¹º§ ¾çÂÊ¿¡¼­ÀÇ Àǹ̷ÐÀû ¸ðµ¨ °³¹ß°ú Á¤ÀûÀÎ ºÐ¼® Åø¿¡ °ü½ÉÀ» °¡Áö°í ÀÖ´Ù. EricÀº Rice ´ëÇÐÀÌ ½ÇÇèÀûÀ¸·Î °³¹ßÇÑ, Ãß°¡µÈ ¾ð¾î ±â´ÉÀ» °¡Áø ÀÚ¹Ù ¾ð¾îÀÇ È®ÀåÆÇÀÎ NextGen ÇÁ·Î±×·¡¹Ö ¾ð¾î¿ë ÄÄÆÄÀÏ·¯ÀÇ ¼ö¼® °³¹ßÀÚÀ̱⵵ Çß´Ù. ¶ÇÇÑ Ãʺ¸ÀÚ¿ëÀ¸·Î ¼³°èµÈ ¿ÀÇ ¼Ò½º Java IDEÀÎ DrJavaÀÇ ÇÁ·ÎÁ§Æ® °ü¸®ÀÚÀÌ´Ù.
ÀÌ ±â»ç¿¡ ´ëÇÏ¿© ¾î¶»°Ô »ý°¢ÇϽʴϱî?

Á¤¸» ÁÁ´Ù (5) ÁÁ´Ù (4) ±×Àú±×·¸´Ù (3) ¼öÁ¤º¸¿ÏÀÌ ÇÊ¿äÇÏ´Ù(2) ÇüÆí¾ø´Ù (1)

  È¸»ç¼Ò°³  |  °³ÀÎÁ¤º¸ º¸È£Á¤Ã¥  |  ¹ý·ü  |  ¹®ÀÇ