¼ÒÇÁÆ®¿þ¾î¸¦ ´ëȽÄÀ¸·Î È¿°úÀûÀ¸·Î Áø´ÜÇÏ´Â ±â¹ý ¹× Åø
Eric
E. Allen ¹Ú»ç °úÁ¤, ÀÚ¹Ù ÇÁ·Î±×·¡¹Ö ¾ð¾î ÆÀ, Rice ´ëÇб³ 2002³â
3¿ù
º¸Åë ÀÚ¹Ù
ÇÁ·Î±×·¥À» ½ÇÇà½Ãų ¶§´Â 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°¡ ¾ó¸¶³ª Áß¿äÇÑÁö¸¦ ¼³¸íÇÏ¿´´Ù.
Âü°í ÀÚ·á
|