¾ÕÀ¸·Î    ¸ñÂ÷    1    2    3    4    5    Á¦6Àå    7    8    ´ÙÀ½À¸·Î

6. ÆÄÀ̽ãÀÇ µðÀÚÀÎ

6.1. ¿Ö ÆÄÀ̽㿡´Â switch³ª case ¼­¼ú¹®ÀÌ ¾ø³ª¿ä?

½±°Ô if... elif... elif... else¸¦ »ç¿ëÇÏ¿© ÃæºÐÈ÷ ±¸ÇöÇÒ ¼ö ÀÖ½À´Ï´Ù. switch ¼­¼ú ±¸¹®¿¡ °üÇÏ¿©´Â Á¦¾ÈÀÌ ÀÖ¾úÁö¸¸, ¾ÆÁ÷ ¹üÀ§ Å×½ºÆ®¸¦ ÇؾßÇÒÁö ±×¸®°í ¾î¶»°Ô ÇؾßÇÏ´ÂÁö¿¡ °üÇÏ¿©´Â (¾ÆÁ÷) ÇÕÀÇµÈ ¹Ù ¾ø½À´Ï´Ù.


6.2. ¿Ö ÆÄÀ̽ãÀº ¼­¼ú¹®ÀÇ ±×·ìÀ» À§ÇÏ¿© µé¿©¾²±â¸¦ »ç¿ëÇϳª¿ä?

±âº»ÀûÀ¸·Î Á¦°¡ ¹Ï´Â °ÍÀº ±×·ìÀ» Áþ´Âµ¥ µé¿©¾²±â¸¦ »ç¿ëÇÏ°Ô µÇ¸é Æò±ÕÀûÀÎ ÆÄÀ̽ã ÇÁ·Î±×·¥ÀÌ Á¤¸» ¿ì¾ÆÇÏ°í ¾ÆÁÖ ¸í·áÇØÁø´Ù°í ¹Ï°í ÀÖ½À´Ï´Ù. ´ëºÎºÐÀÇ »ç¶÷µéÀº Àá½Ã¸¸ Áö³ª¸é ÀÌ »ç¾çÀ» »ç¶ûÇÏ°Ô µË´Ï´Ù. ±×°Í¿¡ ´ëÇØ ¾à°£ º¯È£Çϸé:

begin/end °ýÈ£°¡ ¾øÀ¸¹Ç·Î Çؼ®±â¿¡ ÀÇÇÏ¿© ÀÎÁöµÇ´Â ±¸·ìÈ­¿Í Àд »ç¶÷»çÀÌÀÇ ºÒÀÏÄ¡°¡ ÀÖÀ» ¼ö ¾ø½À´Ï´Ù. ¿À·¡Àü¿¡ ´ÙÀ½°ú °°Àº C Äڵ带 º» ±â¾ïÀÌ ³³´Ï´Ù:

if (x <= y)
                x++;
                y--;
        z++;
¿À·§µ¿¾È µé¿©´Ù º¸°í¼­ x > yÀÓ¿¡µµ ºÒ±¸ÇÏ°í ¿Ö y°¡ °¨¼ÒÇÏ´ÂÁö ±Ã±ÝÇß½À´Ï´Ù... (±×¶§ ³ª´Â C Ãʺ¸ÀÚ°¡ ¾Æ´Ï¾ú½À´Ï´Ù.)

½ÃÀÛ/³¡ °ýÈ£°¡ ¾øÀ¸¹Ç·Î, ÆÄÀ̽ãÀº ÄÚµùÀÇ ¹®Á¦°¡ ´ú ÇÕ´Ï´Ù. C¿¡¼­´Â (ÀÏ°ü¼º ¶§¹®¿¡, ¾î¶°ÇÑ °æ¿ì¿¡´Â ÇÑ°³ÀÇ ¼­¼ú¹® ÁÖÀ§¿¡µµ °ýÈ£¸¦ ¹èÄ¡ÇÑ´Ù´Â ¼±ÅÃÀ» Æ÷ÇÔÇÏ¿©) °ýÈ£¸¦ ³õ´Â ¼ö ¸¹Àº ´Ù¸¥ ¹æ¹ýÀÌ ÀÖ½À´Ï´Ù. ÇϳªÀÇ ½ºÅ¸ÀÏÀ» »ç¿ëÇÏ´Â Äڵ带 Àаí (¾²°í) Çϴµ¥¿¡ Àͼ÷ÇØÁö¸é, ¶Ç ´Ù¸¥ ½ºÅ¸ÀÏÀ» ÀÐÀ» ¶§¿¡ (¶Ç´Â ÀÛ¼ºÀ» ÇÊ¿ä·Î ÇÑ´Ù¸é) Àû¾îµµ ¾à°£Àº ºÒÆíÇÒ °ÍÀÔ´Ï´Ù. ¸¹Àº ÄÚµù ½ºÅ¸ÀÏÀº ½ÃÀÛ/³¡ °ýÈ£µéÀº ÇÑÁÙ¿¡ ¹èÄ¡ÇÕ´Ï´Ù. À̰Ͷ§¹®¿¡ ÇÁ·Î±×·¥Àº »ó´çÈ÷ ±æ¾îÁö°í ¾Æ±î¿î È­¸é °ø°£À» ³¶ºñÇÏ¿©, ÇÁ·Î±×·¥À» °³°ýÇØ º¸±â°¡ ´õ ¾î·Æ°Ô µË´Ï´Ù. ÀÌ»óÀûÀ¸·Î, ÇÔ¼ö´Â ÇÑ°³ÀÇ tty È­¸é¿¡ ¸Â¾Æ¾ß ÇÕ´Ï´Ù (Áï, 20 ÁÙÁ¤µµ). ÆÄÀ̽㿡¼­ 20 ÁÙÀº C¿¡¼­ÀÇ 20ÁÙ ÀÌ»óÀÇ °ª¾îÄ¡¸¦ ÇÕ´Ï´Ù. ÀÌ°ÍÀº ´ÜÁö ½ÃÀÛ/³¡ °ýÈ£°¡ ¾ø¾î¼­°¡ ¾Æ´Õ´Ï´Ù (¼±¾ðÀÌ ¾ø´Ù´Â Á¡µµ µµ¿òÀÌ µË´Ï´Ù, ±×¸®°í ¹°·Ð °­·ÂÇÑ ¿¬»êÀº ¸»ÇÒ °Íµµ ¾ø°í), ±×·¯³ª (¾ø¾îµµ) È®½ÇÈ÷ µµ¿òÀÌ µË´Ï´Ù!


6.3. ¿Ö ÆÄÀ̽ãÀÇ ¹®ÀÚ¿­Àº º¯°æºÒ°¡ÇÑ°¡¿ä?

¿©±â¿¡´Â µÎ °¡ÁöÀÇ ÀÌÁ¡ÀÌ ÀÖ½À´Ï´Ù. Çϳª´Â ¼º´ÉÀÔ´Ï´Ù: ¹®ÀÚ¿­ÀÌ º¯°æºÒ°¡¶ó´Â °ÍÀ» ¾Ë¸é ±¸Ãà´Ü°è¿¡¼­ ¼³°èÇϱⰡ ÆíÇØÁý´Ï´Ù -- °íÁ¤µÇ°í º¯°æµÇÁö ¾Ê´Â ±â¾ïÀå¼Ò ¿ä±¸. (ÀÌ°ÍÀº ¶ÇÇÑ ÅÍÇðú ¸®½ºÆ® »çÀÌÀÇ ±¸º°ÀÇ ÀÌÀ¯ÁßÀÇ ÇϳªÀ̱⵵ ÇÕ´Ï´Ù.) ´Ù¸¥ Çϳª´Â ÆÄÀ̽㿡¼­ ¹®ÀÚ¿­Àº ¼ýÀÚÇüÅÂÀÇ "¿ä¼Ò"·Î °£Áֵ˴ϴÙ. ¾î¶² Á¶ÀÛµµ °ª 8 À» ´Ù¸¥ ¾î¶² °ÍÀ¸·Î º¯°æ½ÃÅ°Áö ¾ÊÀ» °ÍÀÔ´Ï´Ù, ±×¸®°í ÆÄÀ̽㿡¼­, ¾î¶² Á¶ÀÛµµ ¹®ÀÚ¿­ "eight"¸¦ ´Ù¸¥ ¾î¶² °ÍÀ¸·Î º¯°æ½ÃÅ°Áö ¾ÊÀ» °ÍÀÔ´Ï´Ù. (Jim Roskind·ÎºÎÅÍ Àοë)


6.4. »èÁ¦µÊ


6.5. ¿Ö ÆÄÀ̽ãÀº ¾î¶² ±â´Éµé¿¡ ´ëÇÏ¿© ¸Þ½îµå¸¦ »ç¿ëÇÏ°í (¿¹·Î. list.index()) ´Ù¸¥ ±â´Éµé¿¡ ´ëÇÏ¿© ÇÔ¼ö¸¦ »ç¿ëÇϳª¿ä (¿¹·Î. len(list))?

ÇÔ¼ö´Â ÀÏ´ÜÀÇ Çüµé¿¡ Æ÷°ýÀûÀ¸·Î »ç¿ëµÇ´Â ¿¬»êµéÀ» À§ÇÏ¿© »ç¿ëµÇ¸é ½ÉÁö¾î´Â ÀüÇô ¸Þ½îµå¸¦ °¡ÁöÁö ¾Ê´Â °´Ã¼¿¡ ´ëÇÏ¿©µµ ÀÛµ¿ÇÒ °ÍÀÔ´Ï´Ù (¿¹. ¼ýÀÚ, ¹®ÀÚ¿­, ÅÍÇÃ). ¶ÇÇÑ, len(), max(), min()µéÀ» ³»Àå ÇÔ¼ö·Î ±¸ÇöÇÑ °ÍÀº ½ÇÁ¦·Î °¢ Çü¿¡ ´ëÇÏ¿© ¸Þ½îµå·Î ±¸ÇöÇÏ´Â °Íº¸µµ Äڵ尡 ´ú µì´Ï´Ù. °³º°ÀûÀÎ °æ¿ìµé¿¡ °üÇÏ¿©´Â º¯¸íµµ ÀÖÀ»¼ö ÀÖÁö¸¸ ÀÌÁ¦´Â ±×·¯ÇÑ °ÍµéÀ» ±Ùº»ÀûÀ¸·Î º¯°æÇϱ⿡´Â ÁøÂ¥ ³Ê¹« ´Ê¾ú½À´Ï´Ù.


6.6. ¿Ö ³»ÀåÇü (¿¹. ¸®½ºÆ®³ª ÆÄÀÏ)À¸·ÎºÎÅÍ Å¬·¡½º¸¦ ÆÄ»ýÇÒ ¼ö ¾ø³ª¿ä?

ÀÌ°ÍÀº ÆÄÀ̽㿡 »ó´ëÀûÀ¸·Î ´Ê°Ô (»ç¿ëÀÚ-Á¤ÀÇ) Ŭ·¡½º°¡ µµÀԵǾú±â ¶§¹®ÀÔ´Ï´Ù -- ±¸Çö ÇÁ·¹ÀÓ¿öÅ©´Â ½±°Ô ±×°ÍÀ» Çã¿ëÇÏÁö ¾Ê½À´Ï´Ù. ÁøÇà-»óȲÀ» º¸·Á¸é Áú¹® 4.2¿¡ ´ëÇÑ ´äº¯À» º¸¼¼¿ä. ÀÌÁ¡Àº (°¡±î¿î) ¹Ì·¡¿¡ °íÃÄÁö¸®¶ó°í »ý°¢ÇÕ´Ï´Ù.


6.7. ¿Ö 'self'°¡ ¸Þ½îµå Á¤ÀÇ¿Í È£Ãâ¿¡¼­ ¹Ýµå½Ã ¼±¾ðµÇ¾î ¸í½ÃÀûÀ¸·Î »ç¿ëµÇ¾î¾ß Çϳª¿ä?

±×·¡, »ç¿ëÇϽô ÇÁ·Î±×·¡¹Ö ¾ð¾î°¡ C++ Àΰ¡¿ä JavaÀΰ¡¿ä? :-) Ŭ·¡½º°¡ ÆÄÀ̽㿡 µµÀ﵃ ¶§, ÀÌ°ÍÀº (¶Ç´Ù½Ã) ¸Þ½îµå¸¦ ÀÎÅÍÇÁ¸®ÅÍ¿¡ ³Ê¹« ¸¹Àº º¯°æ¾øÀÌ ±¸ÇöÇÏ´Â °¡Àå °£°áÇÑ ¹æ¹ýÀ̾ú½À´Ï´Ù. ÀÌ ¾ÆÀ̵ð¾î´Â Modula-3·ÎºÎÅÍ ºô·Á ¿Ô½À´Ï´Ù. Áö±Ý¿¡´Â, ¸¹Àº ÀÌÀ¯·Î, ´ë´ÜÈ÷ À¯¿ëÇÑ °ÍÀ¸·Î Áõ¸íµÇ¾ú½À´Ï´Ù.

ù°·Î, ´õ¿í ´õ ¸í·áÇØÁø °ÍÀº ¸Þ½îµå³ª ½Çü ¼Ó¼ºÀ» Áö¿ª º¯¼ö ´ë½Å¿¡ »ç¿ëÇÏ°í ÀÖ´Ù´Â °ÍÀÔ´Ï´Ù. "self.x" ¶Ç´Â "self.meth()"¸¦ Àо¸é ¿©·¯ºÐÀÌ ±× Ŭ·¡½º Á¤ÀǸ¦ ±â¾ïÇÏÁö ¸øÇÏ´õ¶óµµ ½Çü º¯¼ö ȤÀº ¸Þ½îµå°¡ »ç¿ëµÈ´Ù´Â »ç½ÇÀÌ Àý´ëÀûÀ¸·Î ¸í¹éÇØÁý´Ï´Ù. C++¿¡¼­, Áö¿ª º¯¼ö ¼±¾ðÀ» ¾ø¾Ö º½À¸·Î½á ¾à°£Àº ¾Ë¾Æº¼ ¼ö ÀÖ½À´Ï´Ù (Àü¿ª º¯¼ö°¡ º°·Î ¾ø°Å³ª ȤÀº ½±°Ô ÀÎ½ÄµÉ ¼ö ÀÖ´Ù´Â °¡Á¤ÇÏ°í) -- ±×·¯³ª ÆÄÀ̽㿡´Â, Áö¿ª º¯¼ö ¼±¾ðÀÌ ¾ø½À´Ï´Ù, ±×·¡¼­ ±× Ŭ·¡½º Á¤ÀǸ¦ È®½ÇÇÏ°Ô ÂüÁ¶ÇÏ¿©¾ßÇÒ ÇÊ¿ä°¡ ÀÖ½À´Ï´Ù

µÎ¹ø°·Î, ƯÁ¤ÇÑ Å¬·¡½º·ÎºÎÅÍ ¸Þ½îµå¸¦ ¸í½ÃÀûÀ¸·Î ÂüÁ¶Çϰųª È£ÃâÇϱ⸦ ¿øÇÑ´Ù°í ÇÒÁö¶óµµ ¾î¶² Ưº°ÇÑ ±¸¹®µµ ÇÊ¿äÇÏÁö ¾Ê´Ù´Â °ÍÀ» ¶æÇÕ´Ï´Ù. C++¿¡¼­, ÆÄ»ýµÈ Å©·¡½º°¡ µ¤¾î ¾´ ±âº» Ŭ·¡½º·ÎºÎÅÍ ¸Þ½îµå¸¦ »ç¿ëÇÏ·Á°í ÇÑ´Ù¸é, :: ¿¬»êÀÚ¸¦ »ç¿ëÇØ¾ß ÇÕ´Ï´Ù -- ÆÄÀ̽㿡¼­´Â baseclass.methodname(self, <argument list>)·Î »ç¿ëÇÕ´Ï´Ù. ÀÌ°ÍÀº ƯÈ÷ __init__() ¸Þ½îµå¿¡ À¯¿ëÇÕ´Ï´Ù, ±×¸®°í ÀϹÝÀûÀ¸·Î ÆÄ»ýµÈ Ŭ·¡½º ¸Þ½îµå°¡ °°Àº À̸§À» °¡Áø ±âº» Ŭ·¡½º ¸Þ½îµå¸¦ È®ÀåÇϱ⸦ ¿øÇÏ¸é ±×¸®ÇÏ¿© ¾î·µç°£ ±âº» Ŭ·¡½º¸¦ È£ÃâÇÏ¿©¾ß¸¸ ÇÏ´Â °æ¿ì¿¡ À¯¿ëÇÕ´Ï´Ù.

¸¶Áö¸·À¸·Î, ½Çü º¯¼ö¿¡ ´ëÇÏ¿©´Â, ÇÒ´ç¿¡ ´ëÇÑ ±¸¹®Àû ¹®Á¦¸¦ ÇØ°áÇÕ´Ï´Ù: ÆÄÀ̽㿡¼­ Áö¿ª º¯¼ö´Â (±× Á¤ÀÇ»ó!) ÇÔ¼ö ¸öü¿¡ °ªÀÌ ÇÒ´çµÈ º¯¼öµéÀ̹ǷΠ(±×¸®°í ¸í½ÃÀûÀ¸·Î Àü¿ªº¯¼ö·Î ¼±¾ðµÇÁö ¾ÊÀ¸¹Ç·Î), ÇÒ´çÀÌ Áö¿ª º¯¼ö´ë½Å¿¡ ½Çü º¯¼ö¿¡°Ô ÇÒ´çµÇ°íÀÚ ÇÔÀ» ÀÎÅÍÇÁ¸®ÅÍ¿¡°Ô ¾Ë·ÁÁÙ ¾î¶² ¹æ¹ýÀÌ ÀÖ¾î¾ß ÇÕ´Ï´Ù, ±×¸®°í ±×°ÍÀº (È¿À²¼ºÀÇ ÀÌÀ¯·Î) ±¸¹®ÀûÀÎ °ÍÀÌ ´õ ÁÁ½À´Ï´Ù. C++Àº ÀÌ°ÍÀ» ¼±¾ðÀ¸·Î ÇØ°áÇÏÁö¸¸, ÆÄÀ̽ãÀº ¼±¾ðÀ» °¡Áö°í ÀÖÁö ¾ÊÀ¸¸ç ´ÜÁö ÀÌ·¯ÇÑ ¸ñÀûÀ» À§ÇÏ¿© ¼±¾ðÀ» µµÀÔÇؾ߸¸ ÇÑ´Ù¸é ºÒÇàÇÑ ÀÏÀÔ´Ï´Ù. ¸í½ÃÀûÀÎ "self.var"¸¦ »ç¿ëÇÏ°Ô µÇ¸é ÀÌ°ÍÀº ¸ÚÁö°Ô ÇØ°áµË´Ï´Ù. ºñ½ÁÇÏ°Ô, ½Çü º¯¼ö¸¦ À§Çؼ­´Â, "self.var"¶ó°í ¾²°Ô µÇ¸é ÇÑ ¸Þ½îµå ¾È¿¡ ÀÖ´Â Çã°¡µÇÁö ¾ÊÀº À̸§µéÀ» ÂüÁ¶Çϱâ À§Çؼ­ ±× ½ÇüÀÇ µð·ºÅ丮¸¦ Ž»öÇÒ ÇÊ¿ä°¡ ¾ø´Ù´Â °ÍÀ» ¶æÇÕ´Ï´Ù.


6.8. OS-Á¾¼ÓÀûÀÎ ¾²·¹µå ±¸Çö´ë½Å¿¡ ÆÄÀ̽㿡¼­ ¾²·¹µå¸¦ Èä³»³¾ ¼ö ÀÖ½À´Ï±î?

´äº¯ 1: ºÒÇàÇÏ°Ôµµ, ÆÄÀ̽ãÀº °¢°¢ÀÇ ÆÄÀ̽㠽ºÅà ÇÁ·¹ÀÓ´ç Àû¾îµµ ÇÑ °³ÀÇ C ½ºÅà ÇÁ·¹ÀÓÀ» ¹Ð¾î ³Ö½À´Ï´Ù. ¶ÇÇÑ, È®ÀåµéÀº °ÅÀÇ ¾Æ¹«¶§³ª ÆÄÀ̽ãÀ¸·Î ¿ª È£ÃâÀ» ÇÒ ¼ö ÀÖ½À´Ï´Ù. ±×·¯¹Ç·Î ¿ÏÀüÇÑ ¾²·¹µå ±¸ÇöÀº C ¿¡ ´ëÇÑ ¾²·¹µå Áö¿øÀ» ¿ä±¸ÇÕ´Ï´Ù.

´äº¯ 2: ´ÙÇེ·´°Ôµµ, ½ºÅø®½º ÆÄÀ̽ãÀÌ ÀÖ½À´Ï´Ù, C ½ºÅÃÀ» ÇÇÇؼ­ ¿ÏÀüÇÏ°Ô ´Ù½Ã µðÀÚÀÎµÈ ÀÎÅÍÇÁ¸®ÅÍ È¸µ¹À̸¦ °¡Áý´Ï´Ù. ¿©ÀüÈ÷ ½ÇÇèÀûÀ̱â´Â ÇÏÁö¸¸ ´ë´ÜÈ÷ À¯¸ÁÇÕ´Ï´Ù. ºñ·Ï Ç¥ÁØ ÆÄÀ̽ã°ú ÀÌÁø ¼öÁØ¿¡¼­ ȣȯ°¡´ÉÇÔ¿¡µµ ºÒ±¸ÇÏ°í, ½ºÅø®½º ÆÄÀ̽ãÀÌ ÇٽɺηΠÀåÂøµÉÁö´Â ¿©ÀüÈ÷ ºÒ¸íÈ®ÇÕ´Ï´Ù -- ¾Æ¸¶µµ ´ÜÁö ³Ê¹« Çõ¸íÀûÀ̱⠶§¹®ÀÏ °ÍÀÔ´Ï´Ù. ½ºÅø®½º ÆÄÀ̽ãÀº ÇöÀç·Î ¿©±â¿¡ ÀÖ½À´Ï´Ù: http://www.stackless.com/. ÀÌ°ÍÀ» »ç¿ëÇÏ´Â microthread ±¸ÇöÀº ¿©±â¿¡¼­ ã¾Æ º¼ ¼ö ÀÖ½À´Ï´Ù: http://world.std.com/~wware/uthread.html.


6.9. ¿Ö ¶÷´Ù ÇüÅ´ ¼­¼ú¹®À» Æ÷ÇÔÇÒ ¼ö ¾ø³ª¿ä?

ÆÄÀ̽ãÀÇ ¶÷´Ù ÇüÅ´ ¼­¼ú¹®À» Æ÷ÇÔÇÒ ¼ö ¾ø´Âµ¥ ÆÄÀ̽ãÀÇ ±¸¹®Àû ÇÁ·¹ÀÓ¿öÅ©°¡ Ç¥Çö½Ä¾È¿¡ ³»Æ÷µÈ ¼­¼ú¹®À» ó¸®ÇÒ ¼ö ¾ø±â ¶§¹®ÀÔ´Ï´Ù.

±×·¸Áö¸¸, ÆÄÀ̽㿡¼­, ÀÌ°ÍÀº Å« ¹®Á¦°¡ ¾Æ´Õ´Ï´Ù. ±â´ÉÀ» Ãß°¡ÇÏ´Â, ´Ù¸¥ ¾ð¾î¿¡¼­ÀÇ ¶÷´Ù ÇüÅ¿ʹ ´Ù¸£°Ô, ÆÄÀ̽㠶÷´Ù´Â ³Ê¹« °ÔÀ»·¯¼­ ÇÔ¼ö¸¦ Á¤ÀÇÇÒ ¼ö ¾øÀ»¶§ »ç¿ëÇÏ´Â ´ÜÃà Ç¥±â¹ýÀÏ »ÓÀÔ´Ï´Ù.

ÇÔ¼ö´Â ÆÄÀ̽ãÀÇ ÀÌ¹Ì Ã¹¹ø° Ŭ·¡½ºÀ̸ç, Áö¿ª ¿µ¿ª¿¡¼­ ¼±¾ðµÉ ¼ö ÀÖ½À´Ï´Ù. ±×·¯¹Ç·Î Áö¿ªÀûÀ¸·Î-Á¤ÀÇµÈ ÇÔ¼ö ´ë½Å¿¡ ¶÷´ÙÇüŸ¦ »ç¿ëÇÏ´Â À¯ÀÏÇÑ ÀÌÁ¡À̶ó¸é ±× ÇÔ¼ö¸¦ À§ÇÑ À̸§À» ¸¸µé ÇÊ¿ä°¡ ¾ø´Ù´Â °ÍÀÔ´Ï´Ù -- ±×·¯³ª ±×°ÍÀº ÇÔ¼ö °´Ã¼°¡ (¶÷´Ù ÇüÅ°¡ »êÃâÇÏ´Â °Í°ú Á¤È®ÇÏ°Ô ¶È °°Àº ÇüÅÂÀÇ °´Ã¼ÀÔ´Ï´Ù) ÇÒ´çµÈ Áö¿ª º¯¼öÀÏ »ÓÀÔ´Ï´Ù!


6.10. ¿Ö ¶÷´Ù´Â µÑ·¯½Ñ ¿µ¿ª ¾È¿¡ Á¤ÀÇµÈ º¯¼ö¿¡´Â Á¢±ÙÇÏÁö ¾Ê³ª¿ä?

¿Ö³ÄÇÏ¸é ¶÷´Ù´Â Æò¹üÇÑ ÇÔ¼ö·Î ±¸Çö µÇ¾ú±â ¶§¹®ÀÔ´Ï´Ù. Áú¹® 4.5¸¦ ÂüÁ¶Çϼ¼¿ä.


6.11. ¿Ö Àç±Í ÇÔ¼ö´Â ´Ù¸¥ ÇÔ¼ö ¾È¿¡ Á¤ÀÇ µÉ ¼ö´Â ¾ø³ª¿ä?

À§ÀÇ Áú¹® 4.5¸¦ ÂüÁ¶Çϼ¼¿ä. ±×·¯³ª ½ÇÁ¦·Î Àç±Í ÇÔ¼ö´Â ¾à°£ÀÇ ²Ä¼ö¸¦ »ç¿ëÇÏ¿© ´Ù¸¥ ÇÔ¼ö ¾È¿¡ Á¤ÀÇµÉ ¼ö ÀÖ½À´Ï´Ù.

    def test():
        class factorial:
             def __call__(self, n):
                 if n<=1: return 1
                 return n * self(n-1)
        return factorial()
    fact = test()
À§ÀÇ factorial()¿¡ ÀÇÇؼ­ »ý¼ºµÈ ½Çü´Â Àç±Í °è½Â ÇÔ¼öó·³ ÇൿÇÕ´Ï´Ù.

»óȣȣÃâÀûÀÎ Àç±Í ÇÔ¼ö´Â ¼­·Î°£¿¡ Àμö·Î¼­ °Ç³×Áú ¼ö ÀÖ½À´Ï´Ù.


6.12. keys()ÀÇ ¸®½ºÆ®¸¦ ¸ÕÀú ±¸¼ºÇÏ´Â °Íº¸´Ù »çÀüÀ» ¹Ýº¹ÇÏ´Â ´õ È¿À²ÀûÀÎ ¹æ¹ýÀº ¿Ö ¾ø³ª¿ä?

Çѹø ½ÃµµÇØ º¸¼Ì½À´Ï±î? ±×°ÍÀº ´ç½ÅÀÇ ¸ñÀû¿¡ ÃæºÐÇÒ Á¤µµ·Î ºü¸£´Ù°í Àå´ãÇÕ´Ï´Ù! ´ëºÎºÐÀÇ °æ¿ì¿¡ ±×·¯ÇÑ ¸®½ºÆ®´Â ±× »çÀüÀÌ Á¡À¯ÇÑ °ø°£ÀÇ ¾ÆÁÖ ÀÛÀº ºÎºÐ¸¸À» Â÷ÁöÇÒ »ÓÀÔ´Ï´Ù. ±× °íÁ¤µÈ ¸Ó¸®ºÎ¸¦ Á¦¿ÜÇÏ°í, ±× ¸®½ºÆ®´Â Å° ´ç °Ü¿ì 4¹ÙÀÌÆ®(Æ÷ÀÎÅÍÀÇ Å©±â) ¸¸À» »ç¿ëÇÕ´Ï´Ù. »çÀüÀº Å°´ç 12¹ÙÀÌÆ®¸¦ Â÷ÁöÇÏ°í °Ô´Ù°¡ Çؽ¬ Å×À̺íÀÇ 30¿¡¼­ 70ÆÛ¼¾Æ®¸¦ ºÎ´ãÀ¸·Î ´õ »ç¿ëÇÕ´Ï´Ù, ¶Ç Å°¿Í °ªµéÀ» À§ÇÑ °ø°£À» Â÷ÁöÇÕ´Ï´Ù. ÇʼöÀûÀ¸·Î, ¸ðµç Å°µéÀº ±¸º°µÇ¾î¾ß ÇÏ´Â °´Ã¼ÀÔ´Ï´Ù, ±×¸®°í (°¡Àå ÀϹÝÀûÀÎ Å°ÀÇ ÇüÅÂÀÎ) ¹®ÀÚ¿­ °´Ã¼´Â Àû¾îµµ 20¹ÙÀÌÆ®, °Ô´Ù°¡ ±× ¹®ÀÚ¿­ÀÇ ±æÀ̸¸Å­À» ¼ÒºñÇÕ´Ï´Ù. °Å±â¿¡ »çÀü¿¡ ´ã°Ü ÀÖ´Â °ªµéÀ» ´õÇغ¸¸é, ÇÑ Ç׸ñ´ç 4 ¹ÙÀÌÆ®´Â ½ÇÁ¦·Î ±×·¸°Ô ¸¹Àº ¸Þ¸ð¸® ¼Òºñ°¡ ¾Æ´ÔÀ» ¾Ë ¼ö ÀÖ½À´Ï´Ù...

dict.keys()¸¦ È£ÃâÇÏ¸é ±× »çÀüÀ» ½Å¼ÓÇÏ°Ô ÇÑ ¹ø Äf¾î¼­ (³»ºÎÀûÀ¸·Î, ¹Ýº¹ ÇÔ¼ö°¡ Á¸ÀçÇÕ´Ï´Ù) ±× Å° °´Ã¼¿¡ ´ëÇÑ ÂüÁ¶Á¡µéÀ» ¹Ì¸®-ÇÒ´çµÈ ÇÕ´çÇÑ Å©±âÀÇ ¸®½ºÆ® °´Ã¼¿¡ º¹»çÇÕ´Ï´Ù. ¹Ýº¹ ½Ã°£Àº ¼ÕÇØ°¡ ¾Æ´Õ´Ï´Ù (¿Ö³ÄÇϸé, ¾î·µç ¹Ýº¹Çؾ߸¸ ÇÒ °ÍÀ̱⠶§¹®ÀÔ´Ï´Ù -- ¸¹Àº °æ¿ì¿¡ ¿©·¯ºÐÀÇ È¸µ¹ÀÌ°¡ ´ë´ÜÈ÷ ÀÏÂï Á¾·áÇÏÁö ¾Ê´Â ÇÑ ¸»ÀÌÁö¿ä. (±× Å°¸¦ ¹«ÀÛÀ§ ¼ø¼­·Î ¾òÀ» °ÍÀ̱⠶§¹®¿¡ ´ë´ÜÈ÷ ÀÏÂï Á¾·áÇÏÁö´Â ¾ÊÀ» °ÍÀ̶ó°í »ý°¢ÇÕ´Ï´Ù).

³ª´Â ±× »çÀü ¹Ýº¹ ¿¬»êÀ» ÆÄÀ̽ã ÇÁ·Î±×·¡¸Óµé¿¡°Ô °ø°³ÇÏÁö ¾Ê°í Àִµ¥ ¿Ö³ÄÇÏ¸é »çÀüÀº Àüü ¹Ýº¹ ±â°£Áß¿¡ º¯°æµÇ¾î¼­´Â ¾ÈµÇ±â ¶§¹®ÀÔ´Ï´Ù -- ¸¸¾à ±×·¸°Ô µÇ¸é, ±× »çÀüÀÌ ÀçÁ¶Á÷µÉ °¡´É¼ºÀÌ ¾à°£ Àֱ⠶§¹®Àε¥ ¿Ö³ÄÇϸé Çؽ¬ Å×À̺íÀÌ ³Ê¹« ²Ë Â÷¼­, ±× ¹Ýº¹ÀÌ ¾à°£ÀÇ Ç׸ñµéÀ» ³õÄ¡°Ô µÉ ¼ö ÀÖ°í ´Ù¸¥ °ÍµéÀº µÎ¹ø ó¸®ÇÒ °¡´É¼ºÀÌ Àֱ⠶§¹®ÀÔ´Ï´Ù. Á¤È®ÇÏ°Ô ¸»Çϸé ÀÌ°ÍÀº ¾ÆÁÖ µåµÑ°Ô ÀϾ¹Ç·Î, ÇÁ·Î±×·¥¿¡ ÀÖ´Â ¹ö±×¸¦ ¼û±â´Â °æÇâÀÌ ÀÖ½À´Ï´Ù: ´ÜÁö ¹Ýº¹ÇÒ ¶§¸¶´Ù ÀÛÀº ¼öÀÇ Ç׸ñÀ» »èÁ¦Çϰųª »ðÀÔÇϱ⸸ ÇÒ »ÓÀ̶ó¸é ±×°ÍÀÌ Å×½ºÆ®Áß¿¡ Àý´ë·Î ÀϾÁö ¾Êµµ·Ï ÇÏ´Â °ÍÀº ½¬¿î ÀÏÀÔ´Ï´Ù -- ±×·¯³ª »ç¿ëÀÚµéÀº Á¶¸¸°£ È®½ÇÈ÷ ±×°Í°ú ¸¶ÁÖÄ¡°Ô µÉ °ÍÀÔ´Ï´Ù.


6.13. ÆÄÀ̽ãÀº ±â°è ÄÚµå, C ȤÀº ´Ù¸¥ ¾ð¾î·Î ÄÄÆÄÀÏ µÉ ¼ö ÀÖ³ª¿ä?

½±Áö´Â ¾Ê½À´Ï´Ù. ÆÄÀ̽ãÀÇ °í ¼öÁØ µ¥ÀÌŸ Çü, °´Ã¼¿¡ ´ëÇÑ µ¿Àû ÇüÁ¤ÀÇ ±×¸®°í ÀÎÅÍÇÁ¸®Å͸¦ ½ÇÇà-½Ã°£¿¡ È£Ãâ µîÀº ¸ðµÎ "ÄÄÆÄÀϵÈ" ÆÄÀ̽ã ÇÁ·Î±×·¥ÀÌ °ÅÀÇ ´ëºÎºÐ, ½ÉÁö¾î´Â "x+1"°ú °°Àº ´ë´ÜÈ÷ ´Ü¼øÇØ º¸ÀÌ´Â ¿¬»ê¿¡ Á¶Â÷µµ ÆÄÀ̽ãÀÇ ½ÇÇà-½Ã°£ ½Ã½ºÅÛ¿¡ ´ëÇÑ È£Ãâ·Î ±¸¼ºµÉ °ÍÀ̶ó´Â °ÍÀ» ¶æÇÕ´Ï´Ù.

ÆÄÀ̽㠴º½º±×·ì ȤÀº Áö³­ ÆÄÀ̽ã ȸÀÇ¿¡¼­ ¼³¸íµÈ ´Ù¼öÀÇ ÇÁ·ÎÁ§Æ®¸¦ º¸¸é, Áö±Ý±îÁö ´Þ¼ºµÈ ±× ¼Óµµ°¡(¿¹. 2x) °Ü¿ì ÂüÀ» Á¤µµÀ̱ä ÇÏÁö¸¸, ÀÌ·¯ÇÑ Á¢±ÙÀÌ °¡´ÉÇØ º¸ÀÔ´Ï´Ù. JPython ¿ª½Ã ÀÚ¹Ù ¹ÙÀÌÆ®ÄÚµå·Î ÄÄÆÄÀÏÇϱâ À§ÇÏ¿© °°Àº Àü·«À» »ç¿ëÇÕ´Ï´Ù. (Jim HuguninÀÌ ¿¹½ÃÇØÁØ ¹Ù¿¡ ÀÇÇϸé Àüü-ÇÁ·Î±×·¥ ºÐ¼®À» ÅëÇÏ¿© ¿©·¯ Á¶ÇÕÀ» Çغ¸¸é ÀÛÀº µ¥¸ð ÇÁ·Î±×·¥¿¡¼­´Â 1000x ¼Óµµ °³¼±µµ °¡´ÉÇØ º¸ÀÔ´Ï´Ù. 1997 ÆÄÀ̽ã ȸÀÇ¿ë À¥ »çÀÌÆ®¸¦ ÂüÁ¶Çϼ¼¿ä.)

³»ºÎÀûÀ¸·Î, ÆÄÀ̽㠼ҽº ÄÚµå´Â ("ÆÄÀ̽㠰¡»ó ±â°è" ȤÀº "¹ÙÀÌÆ®ÄÚµå ÀÎÅÍÇÁ¸®ÅÍ"¿¡ ÀÇÇÏ¿©) ¹ø¿ªµÇ±â Àü¿¡ Ç×»ó "°¡»ó ±â°è ÄÚµå" ¶Ç´Â "¹ÙÀÌÆ® ÄÚµå" Ç¥ÇöÀ¸·Î ¹ø¿ªµË´Ï´Ù. ÀÚÁÖ º¯°æµÇÁö´Â ¾Ê´Â ¸ðµâÀ» Çؼ®ÇÏ°í ¹ø¿ªÇÏ´Â ºÎ´ãÀ» ÇÇÇϱâ À§ÇÏ¿©, ÀÌ ¹ÙÀÌÆ® ÄÚµå´Â ±× À̸§ÀÌ ".py"·Î ³¡³ª´Â ÆÄÀϷκÎÅÍ ¸ðµâÀÌ Çؼ®µÉ ¶§¸¶´Ù À̸§ÀÌ ".pyc"·Î ³¡³ª´Â ÆÄÀÏ¿¡ ÀÛ¼ºµË´Ï´Ù. ±× »óÀÀÇÏ´Â .py ÆÄÀÏÀÌ º¯°æµÇ¸é, ´Ù½Ã Çؼ®µÇ°í ¹ø¿ªµÇ¾î¼­ .pyc ÆÄÀÏÀÌ ÀçÀÛ¼ºµË´Ï´Ù.

ÀÏ´Ü .pyc ÆÄÀÏÀÌ ÀûÀç µÇ¸é ¼º´ÉÂ÷ÀÌ´Â ¾ø½À´Ï´Ù. ( .pyc ÆÄÀÏ¿¡¼­ ÀÐÀº ¹ÙÀÌÆ® ÄÚµå´Â Á÷Á¢ ¹ø¿ª¿¡ ÀÇÇؼ­ »ý¼ºµÈ ¹ÙÀÌÆ® ÄÚµå¿Í Á¤È®ÇÏ°Ô ¶È °°½À´Ï´Ù). À¯ÀÏÇÑ Â÷ÀÌÁ¡Àº .pyc ÆÄÀÏÀ» ÀûÀçÇÏ´Â °ÍÀÌ .py ÆÄÀÏÀ» Çؼ®ÇÏ°í ¹ø¿ªÇÏ´Â °Íº¸´Ù ºü¸£´Ù´Â °ÍÀÔ´Ï´Ù, ±×·¡¼­ ¹Ì¸® ÄÄÆÄÀÏµÈ .pyc ÆÄÀÏÀÌ ÀÖ´Ù¸é ÀϹÝÀûÀ¸·Î ÆÄÀ̽㠽ºÅ©¸³Æ®¸¦ ±âµ¿-ÇÏ´Â ½Ã°£À» °³¼±½ÃÄÑ ÁÙ °ÍÀÔ´Ï´Ù. ¿øÇϱ⸸ ÇÑ´Ù¸é, Lib/compileall.py module/script¸¦ »ç¿ëÇؼ­ ÁÖ¾îÁø ¸ðµâ ¸ðÀ½¿¡ ´ëÇÏ¿© À¯È¿ÇÑ .pyc ÆÄÀϵéÀ» °­Á¦·Î »ý¼ºÇÒ ¼ö ÀÖ½À´Ï´Ù.

ÁÖ¸ñÇÒ °ÍÀº ÆÄÀ̽㿡 ÀÇÇÏ¿© ½ÇÇàµÇ´Â ÁÖ ½ºÅ©¸³Æ®´Â, ±× ÆÄÀÏ À̸§ÀÌ .pyÀ¸·Î ³¡³²¿¡µµ ºÒ±¸ÇÏ°í, .pyc ÆÄÀÏ·Î ÄÄÆÄÀϵÇÁö ¾Ê´Â´Ù´Â °ÍÀÔ´Ï´Ù. ±×°ÍÀº ¹ÙÀÌÆ® ÄÚµå·Î ÄÄÆÄÀϵ˴ϴÙ, ±×·¯³ª ±× ¹ÙÀÌÆ® ÄÚµå´Â ÆÄÀÏ·Î ÀúÀåµÇÁö ¾Ê½À´Ï´Ù.

¸¸¾à ÀÎÅÍÇÁ¸®ÅÍ¿Í ¶óÀ̺귯¸®¸¦ ¹èÆ÷ÇÒ ÇÊ¿ä¾øÀÌ, ÀÌÁøÆÄÀÏ ÇüÅ·Π¹èÆ÷Çϱâ À§ÇÏ¿© ÆÄÀ̽ã ÇÁ·Î±×·¥À» ¹ø¿ªÇÏ´Â ¹æ¹ýÀ» ã°í °è½Å´Ù¸é, freeze.py ½ºÅ©¸³Æ®¸¦ Tools/freeze µð·ºÅ丮¿¡¼­ ã¾Æ º¸¼¼¿ä. ÀÌ°ÍÀ¸·Î ¿©·¯ºÐÀÇ ÇÁ·Î±×·¥, ÆÄÀ̽ã ÀÎÅÍÇÁ¸®ÅÍ¿Í, ±×¸®°í ÇÊ¿äÇÑ ÆÄÀ̽㠶óÀ̺귯¸®µîÀ» ÇÑ°³ÀÇ ÀÌÁø ÆÄÀÏ·Î ¸¸µé ¼ö ÀÖ½À´Ï´Ù. ¹°·Ð, °á°ú·Î ³ª¿À´Â ÀÌÁø ÆÄÀÏÀº ±×°ÍÀ» ¸¸µå´Âµ¥ »ç¿ëÇß´ø, °°Àº ÇüÅÂÀÇ Ç÷§Æû¿¡¼­ ½ÇÇàµÉ °ÍÀÔ´Ï´Ù.


6.14. ¾î¶»°Ô ÆÄÀ̽ãÀº ¸Þ¸ð¸®¸¦ °ü¸®Çϳª¿ä? ¿Ö ¿ÏÀü ¾²·¹±â ¼öÁýÀ» ÇÏÁö ¾Ê³ª¿ä?

ÆÄÀ̽ãÀÇ ¸Þ¸ð¸® °ü¸®ÀÇ ¼¼ºÎÁ¶°ÇÀº ±× ±¸Çö¿¡ ´Þ·Á ÀÖ½À´Ï´Ù. Ç¥ÁØ ÆÄÀ̽㠱¸Çö( C ±¸Çö)Àº ÂüÁ¶ Ƚ¼ö ¸Þ¸ð¸® °ü¸®¸¦ »ç¿ëÇÕ´Ï´Ù. ÀÌ°ÍÀº ÇÑ °´Ã¼°¡ ´õ ÀÌ»ó ÆÄÀ̽㿡¼­ »ç¿ëµÇÁö ¾ÊÀ» ¶§ ±× °´Ã¼´Â, ¾à°£ÀÇ ¿¹¿Ü¸¦ °¡Áö°í ÀÚµ¿ÀûÀ¸·Î Á¦°ÅµÈ´Ù´Â °ÍÀ» ¶æÇÕ´Ï´Ù.

¹Ý¸é¿¡, JPythonÀº ÀÚ¹Ù ½ÇÇà½Ã°£ ¶óÀ̺귯¸®¿¡ ±âÃÊÇÕ´Ï´Ù; ±×·¡¼­ ±×°ÍÀº JVM ¾²·¹±â ¼öÁý±â¸¦ »ç¿ëÇÕ´Ï´Ù. ÀÌ Â÷ÀÌ·Î ÀÎÇÏ¿© ÆÄÀ̽ã Äڵ尡 ÂüÁ¶ Ƚ¼ö ±¸ÇöÀÇ ÇàÀ§¿¡ ±âÃÊÇÔ¿¡µµ ºÒ±¸ÇÏ°í ¾à°£ ¹Ì¹¦ÇÑ ÀÌ½Ä ¹®Á¦°¡ ¹ß»ýÇÕ´Ï´Ù.

Ç¥ÁØ ÆÄÀ̽㿡 ´ëÇÏ¿© ±â¾ïÇÏ¿©ÇÒ µÎ °¡Áö ¿¹¿Ü´Â:

1) ¸¸¾à °´Ã¼°¡ ¼øȯ ÂüÁ¶ °æ·Î¿¡ ÀÖ´Ù¸é ±× ¼øȯ°í¸®°¡ ±úÁöÁö ¾Ê´Â ÇÑ Á¦°ÅµÇÁö ¾ÊÀ» °ÍÀÔ´Ï´Ù. ¿¹:

       List = [None]
       List[0] = List
List´Â ±× ¼øȯ°í¸®(List[0]ÀÌ ¸®½ºÆ®ÀÔ´Ï´Ù)°¡ ²÷¾îÁöÁö ¾Ê´Â ÇÑ Á¦°ÅµÇÁö ¾ÊÀ» °ÍÀÔ´Ï´Ù. ¸®½ºÆ®°¡ Á¦°ÅµÇÁö ¾Ê´Â ÀÌÀ¯´Â ±×°ÍÀÌ Á¢±ÙÇÒ ¼ö ¾ø°Ô µÊ¿¡µµ ºÒ±¸ÇÏ°í ±× ¸®½ºÆ®´Â ±× ÀÚü¿¡ ÂüÁ¶¸¦ °¡Áö°í ÀÖ°í, ÂüÁ¶ Ƚ¼ö ¼¼±â´Â ÇÑ °´Ã¼¸¦ ¸ðµç ÂüÁ¶°¡ Æı«µÉ ¶§¿¡¸¸ ¾ø¾Ö±â ¶§¹®ÀÔ´Ï´Ù. ¼øȯ ÂüÁ¶ °æ·Î¸¦ ²÷À¸·Á¸é ±× ÂüÁ¶¸¦ ´ÙÀ½°ú °°ÀÌ Æı«ÇØ¾ß ÇÕ´Ï´Ù.

       List[0] = None
±×·¡¼­, ¸¸¾à ÇÁ·Î±×·¥ÀÌ ¼øȯ ÂüÁ¶¸¦ »ý¼ºÇϸé (±×¸®°í Àå½Ã°£ ½ÇÇàµÇ°í ȤÀº ¸¹Àº ¸Þ¸ð¸®¸¦ ¼ÒºñÇÑ´Ù¸é) ¼øȯ ±¸Á¶¸¦ ¸íÈ®ÇÏ°Ô °ü¸®ÇؾßÇÒ ÇÊ¿ä°¡ ÀÖ½À´Ï´Ù. ¸¹Àº ¾îÇø®ÄÉÀÌ¼Ç ¿µ¿ª¿¡¼­, Ȥ½Ã ÀÖÀ»Áö´Â ¸ð¸£Áö¸¸, ÀÌ°ÍÀº ±ØÈ÷ µå¹°°Ô ÇÊ¿äÇÕ´Ï´Ù.

CPython 2.0¿¡¼­´Â ÀÌ ¹®Á¦¸¦ ÇØ°á Çߴµ¥ ÁÖ±âÀûÀ¸·Î ¼øȯ Ž»ö ¾Ë°í¸®ÁòÀ» ½ÇÇà½ÃÄѼ­ Á¢±ÙÇÒ ¼ö ¾ø´Â ¼øȯÀ» ã¾Æ °ü·ÃµÈ °´Ã¼µéÀ» »èÁ¦ÇÕ´Ï´Ù. »õ·Î¿î gc ¸ðµâÀº ¾²·¹±â ¼öÁýÀ» ¼öÇàÇÏ°í, µð¹ö±ë Á¤º¸¸¦ ȹµæÇϸç, ±×¸®°í ±× ¾²·¹±â ¼öÁý±âÀÇ ¸Å°³º¯¼ö¸¦ Á¶À²ÇÏ´Â ÇÔ¼öµéÀ» Á¦°øÇÕ´Ï´Ù.

±× ¼øȯ Ž»ö ¾Ë°í¸®ÁòÀ» ¼öÇàÇÏ´Â °ÍÀº ¾à°£ ½Ã°£À» ÇÊ¿ä·Î ÇϹǷÎ, °á°úÀûÀ¸·Î ¾à°£ÀÇ ºÎ´ãÀÌ ÀÖ½À´Ï´Ù. ÆÄÀ̽ã 2.0¿¡¼­ ±× ¼øȯ ¼öÁýÀ» °æÇèÇØ º» ÈÄ¿¡, ÆÄÀ̽ã 2.1Àº ±× ºÎ´ãÀ» Á¶½É½º·´°Ô Á¶À²ÇÏ¿© ÃÖ¼ÒÈ­ ÇÒ ¼ö Àֱ⸦ ¹Ù¶ó°í ÀÖ½À´Ï´Ù. ¾ÆÁ÷±îÁö´Â ¾ó¸¶³ª ¸¹Àº ¼º´ÉÀÌ ÀúÇϵǾú´ÂÁö ¸í¹éÇÏÁö ¾Ê½À´Ï´Ù, ¿Ö³ÄÇϸé ÀÌ°ÍÀ» º¥Ä¡¸¶Å·ÇÏ´Â °ÍÀº ²Ä¼öÀûÀÌ°í ±× ÇÁ·Î±×·¥ÀÌ ¾ó¸¶³ª ÀÚÁÖ °´Ã¼¸¦ »ý¼ºÇÏ°í Æı«ÇÏ´ÂÁö¿¡ Àý´ëÀûÀ¸·Î ÀÇÁ¸Çϱ⠶§¹®ÀÔ´Ï´Ù. ¼øȯÀ» ŽÁöÇÏ´Â °ÍÀº ÆÄÀ̽ãÀÌ ÄÄÆÄÀÏ µÉ ¶§ »ç¿ëÇÏÁö ¸øÇÏ°Ô ÇÒ ¼ö ÀÖ½À´Ï´Ù, ¸¸¾à ¾à°£ÀÇ ¼Óµµ ÀúÇϵµ Çã¿ëÇÒ ¼ö ¾øÀ¸¸ç ±× ¼øȯ ¼öÁýÀÌ ¹®Á¦°¡ ÀÖ´Ù°í ÀǽɵǽŴٸé, ¼³Á¤ ½ºÅ©¸³Æ®¸¦ ½ÇÇàÇÒ ¶§¿¡ "-without-cycle-gc" ½ºÀ§Ä¡¸¦ ÁöÁ¤Çϼ¼¿ä.

2) ¶§·Î´Â °´Ã¼°¡ "¿ªÃßÀû(tracebacks)"¿¡ ÀϽÃÀûÀ¸·Î °íÂøµË´Ï´Ù ±×·¯¹Ç·Î ¿¹»ó´ë·Î Á¦°ÅµÇÁö ¾Ê½À´Ï´Ù. ±× ¿ªÃßÀûÀ» ´ÙÀ½°ú °°ÀÌ Á¦°ÅÇϼ¼¿ä

       import sys
       sys.exc_traceback = sys.last_traceback = None
¿ªÃßÀûÀº ¿¡·¯¸¦ º¸°íÇÏ°í µð¹ö°Å¸¦ ±¸ÇöÇÏ°í µîµîÀÇ °ü·ÃµÈ °ÍµéÀ» À§ÇÏ¿© »ç¿ëµË´Ï´Ù. ¿ªÃßÀû¿¡´Â ¿¹¿Ü(º¸ÅëÀº °¡Àå ÃÖ±ÙÀÇ ¿¹¿Ü)¸¦ ´Ù·ç´Â µµÁß¿¡ ÃßÃâµÈ ¾à°£ÀÇ ÇÁ·Î±×·¥ Á¤º¸°¡ ÀúÀåµË´Ï´Ù.

¼øȯ ÂüÁ¶¿Í modulo ¿ªÃßÀûÀÌ ¾ø´Ù¸é, ÆÄÀ̽ã ÇÁ·Î±×·¥Àº ¸í½ÃÀûÀ¸·Î ¸Þ¸ð¸®¸¦ °ü¸®ÇÒ ÇÊ¿ä´Â ¾ø½À´Ï´Ù.

¶§·Î Á¦¾È µÇ´Â °ÍÀº ÆÄÀ̽ãÀÌ ÀϹÝÀûÀÎ ¿ÏÀüÇÑ ¾²·¹±â ¼öÁýÀ¸·Î ÇýÅÃÀ» º¼ ¼ö ÀÖ´Ù´Â °ÍÀε¥, ±×·¯¸é ´õ¿í ´õ ÆÄÀ̽ãÀº "ÀÚµ¿ÀûÀÎ" ¾²·¹±â ¼öÁý (GC)À» ȹµæÇÒ °¡´É¼ºÀÌ ¾ø°Ô µÇ¸®¶ó°í º¾´Ï´Ù. ÇÑ ÀÌÀ¯·Î, ÀÌ°ÍÀÌ C ¿¡ Ç¥ÁØ »ç¾çÀ¸·Î Ãß°¡µÇÁö ¾Ê´Â ÇÑ, ±×°ÍÀº ¹ßµîÀ§¿¡ ¶³¾îÁø À̽ļºÀ» À§ÇÑ °íÅëÀÔ´Ï´Ù. ³× ¹°·Ð, Àúµµ Xerox ¶óÀ̺귯¸®¿¡ ´ëÇÏ¿© ¾Ð´Ï´Ù. ±×°ÍÀº °¡Àå ÀϹÝÀûÀÎ Ç÷§ÆûµéÀ» À§ÇÑ ¾î¼Àºí·¯ Äڵ带 °¡Áý´Ï´Ù. ¸ðµç °ÍÀº ¾Æ´Õ´Ï´Ù. ±×¸®°í ±×°ÍÀÌ ´ë´ÜÈ÷ Åõ¸íÇϱâ´Â ÇÏÁö¸¸, ÀüÀûÀ¸·Î Åõ¸íÇÑ °ÍÀº ¾Æ´Õ´Ï´Ù (ÇÑ ¶§ ÆÄÀ̽ãÀ» ±×°Í°ú ¿¬°áÇÏ¿© º¸´Ï, ±×°ÍÀº ³»ºÎÀÇ ºñ¹ÐÀ» ½ñ¾Æ³»¾ú½À´Ï´Ù).

"ÀûÀýÇÑ" GC´Â ¶ÇÇÑ ÆÄÀ̽ãÀÌ ´Ù¸¥ ¾îÇø®ÄÉÀ̼ǿ¡ ³»ÀåµÇ¸é ¹®Á¦°¡ µË´Ï´Ù. µ¶-¸³ ÆÄÀ̽㿡¼­´Â Ç¥ÁØ malloc()°ú free()¸¦ GC ¶óÀ̺귯¸®°¡ Á¦°øÇÑ ¹öÀüÀ¸·Î ¹Ù²Ù¾îµµ ±¦ÂúÀº ¹Ý¸é¿¡, ÆÄÀ̽ãÀ» ³»ÀåÇÑ ¾îÇø®ÄÉÀ̼ÇÀº ÆÄÀ̽ãÀÇ °ÍÀÌ ¾Æ´Ñ, ÀڽŸ¸ÀÇ malloc()°ú free() ´ëü¹°À» °¡Áö±â¸¦ ¿øÇÒ ¼ö ÀÖ½À´Ï´Ù. Áö±Ý ÇöÀç·Î¼­´Â, ÆÄÀ̽ãÀº malloc()°ú free()¸¦ ÀûÀýÇÏ°Ô ±¸ÇöÇÏ´Â ¾î¶² °Í°úµµ Àß ÀÛµ¿ÇÕ´Ï´Ù.

¾²·¹±â ¼öÁýÀ» °¡Áö°í ÀÖ´Â, JPython¿¡¼­, ´ÙÀ½ÀÇ ÄÚµå´Â (C ÆÄÀ̽㿡¼­´Â ÀÌ»ó¾øÀ½) ¸Þ¸ð¸®¸¦ ´Ù ¼ÒºñÇϱâ Àü¿¡ ¾Æ¸¶µµ ÆÄÀÏ ±â¼úÀÚ¸¦ ´Ù ¼ÒºñÇÏ°Ô µÉ °ÍÀÔ´Ï´Ù:

        for file in <very long list of files>:
                f = open(file)
                c = f.read(1)
ÇöÀçÀÇ ÂüÁ¶ Ƚ¼ö ¼¼±â¿Í Æı« Àü·«¸¦ »ç¿ëÇϸé, f¿¡ ´ëÇØ »õ·Ó°Ô ÇÒ´çÇÒ ¶§ ¸¶´Ù ±× ÀüÀÇ ÆÄÀÏÀ» ´Ý½À´Ï´Ù. GC¸¦ »ç¿ëÇϸé, ÀÌ°ÍÀ» º¸ÁõÇÒ ¼ö ¾ø½À´Ï´Ù. ¹°·Ð, ¿©·¯ºÐÀº ÀÌ ¹®Á¦¸¦ ÇØ°áÇÏ´Â ¹æ¹ý¿¡ ´ëÇØ »ý°¢ÇØ º¼ ¼ö ÀÖ½À´Ï´Ù. ±×·¯³ª ±×°ÍÀº ±¸Çü(off-the-shelf) ±â¼úÀÌ ¾Æ´Õ´Ï´Ù. ¸¸¾à ¾î¶² ÆÄÀ̽㠱¸Çö°úµµ Àß ÀÛµ¿ÇÒ Äڵ带 ÀÛ¼ºÇϱ⸦ ¿øÇÑ´Ù¸é, ¸í·áÇÏ°Ô ±× ÆÄÀÏÀ» ´Ý¾Æ¾ß¸¸ ÇÕ´Ï´Ù; ÀÌ°ÍÀº GC¿Í »ó°ü¾øÀÌ Àß ÀÛµ¿ÇÒ °ÍÀÔ´Ï´Ù:

       for file in <very long list of files>:
                f = open(file)
                c = f.read(1)
                f.close()

»ó¼úÇÑ ¸ðµç °Í¿¡µµ ºÒ±¸ÇÏ°í, ¾î¶² »ç¶÷ÀÌ GC¸¦ ÆÄÀ̽㿡 XeroxÀÇ GC ¶óÀ̺귯¸®¸¦ ÀÌ¿ëÇÏ¿© Ãß°¡ÇÏ¿´½À´Ï´Ù, ±×·¡¼­ ¸ö¼Ò ã¾Æ º¸½Ç ¼ö ÀÖ½À´Ï´Ù. ´ÙÀ½À» º¸¼¼¿ä

	http://starship.python.net/crew/gandalf/gc-ss.html
ÈçÇÑ ¸Þ¸ð¸® ´©¼öÇö»óÀ» ¼öµ¿À¸·Î Âó¾î ³»´Â ¹æ¹ý¿¡ ´ëÇÑ °ÍÀº Áú¹® 4.17À» ÂüÁ¶Çϼ¼¿ä.

¿©±â¿¡¼­ÀÇ ´äº¯¿¡ ¸¸Á·ÇÏ½Ç ¼ö ¾ø´Ù¸é, ´º½º±×·ì¿¡ ±ÛÀ» ¿Ã¸®±â Àü¿¡, GC¿¡ °üÇÑ Áö³­ ³íÀǸ¦ Moshe Zadka°¡ ¿ä¾àÇØ ³õÀº °ÍÀ» ÀÐ¾î º¸¼¼¿ä:

http://www.geocities.com/TheTropics/Island/2932/gcpy.html


6.15. ¿Ö º°°³·Î ÅÍÇðú ¸®½ºÆ® µ¥ÀÌŸ ÇüÀÌ Á¸ÀçÇϳª¿ä?

ÅÍÇÃÀº º¯°æºÒ°¡´ÉÇÏ°í ¹Ý¸é¿¡ ¸®½ºÆ®´Â º¯°æ°¡´ÉÇϵµ·Ï Çϱâ À§ÇØ ±×·¸½À´Ï´Ù.

º¯°æºÒ°¡´ÉÇÑ ÆÛÇÃÀº ¾à°£ÀÇ Ç׸ñµéÀ» ÇÔ¼ö¿¡ °Ç³Ú ÇÊ¿ä°¡ ÀÖ°í ±× ÇÔ¼ö°¡ °Ç³×Áø ÅÍÇÃÀ» º¯°æÇϱ⸦ ¿øÇÏÁö ¾ÊÀ» °æ¿ì¿¡ À¯¿ëÇÕ´Ï´Ù; ¿¹¸¦ µé¾î,

	point1 = (120, 140)
	point2 = (200, 300)
	record(point1, point2)
	draw(point1, point2)
¿©·¯ºÐÀº record()°¡ ±× ÁÂÇ¥µéÀ» º¯°æÇÑ´Ù¸é ¹«½¼ÀÏÀÌ ÀϾÁö »ý°¢ÇÒ ÇÊ¿ä°¡ Àֱ⸦ ¿øÇÏÁö ¾ÊÀ» °ÍÀÔ´Ï´Ù. -- º¯°æÇÒ ¼ö´Â ¾øÀ» ÅÙµ¥, ¿Ö³ÄÇÏ¸é ±× ÅÍÇõéÀº º¯°æºÒ°¡´ÉÇϱ⠶§¹®ÀÔ´Ï´Ù.

¹Ý¸é¿¡, °Å´ëÇÑ ¸®½ºÆ®¸¦ µ¿ÀûÀ¸·Î ¸¸µé¶§¿¡´Â, º¯°æ°¡´ÉÇÏ´Ù´Â °ÍÀÌ Àý´ëÀûÀ¸·Î Áß¿äÇÕ´Ï´Ù. -- ¿ä¼ÒµéÀ» ÅÍÇÿ¡ Çϳª¾¿ Ãß°¡ÇÏ´Â °ÍÀº ¿¬°á ¿¬»êÀÚÀÇ »ç¿ëÀ» ¿ä±¸ÇÏ°í, ±×°Í¶§¹®¿¡ Á¦°ö½Ã°£ÀÌ ¼Ò¿äµË´Ï´Ù.

ÀϹÝÀûÀÎ ÇÑ°è¼±À¸·Î¼­, ÅÍÇÃÀº C¿¡¼­ ±¸Á¶Çü ȤÀº ÆĽºÄ®¿¡¼­ ·¹ÄÚµåÇüÀ» »ç¿ëÇÏ´Â °Íó·³ »ç¿ëÇϽðí, ¸®½ºÆ®´Â (°¡º¯ ±æÀÌ) ¹è¿­ ó·³ »ç¿ëÇϼ¼¿ä.


6.16. ¸®½ºÆ®´Â ¾î¶»°Ô ±¸ÇöµÇ¾ú³ª¿ä?

¸®½ºÇÁ ÇÁ·Î±×·¡¸ÓµéÀÌ ¾î¶»°Ô »ý°¢ÇϵçÁö, ÆÄÀ̽ãÀÇ ¸®½ºÆ®´Â ½ÇÁ¦·Î´Â °¡º¯-±æÀÌ ¹è¿­ÀÔ´Ï´Ù. ±× ±¸ÇöÀº ´Ù¸¥ °´Ã¼¿¡ ´ëÇÑ ¿¬¼ÓÀûÀÎ ¹è¿­ ÂüÁ¶¸¦ »ç¿ëÇÏ°í, ±×¸®°í ÀÌ ¹è¿­¿¡ ´ëÇÑ Æ÷ÀÎÅ͸¦ (»Ó¸¸ ¾Æ´Ï¶ó ±×ÀÇ ±æÀ̵µ) ¸®½ºÆ® ¸Ó¸® ±¸Á¶¿¡ À¯ÁöÇÕ´Ï´Ù.

ÀÌ°ÍÀ¸·Î ¸®½ºÆ®¸¦ ÁöǥȭÇÏ´Â ¿¬»êÀÇ ºñ¿ëÀº ÁöÇ¥ÀÇ °ª ȤÀº ¸®½ºÆ®ÀÇ Å©±â¿¡ µ¶¸³ÀûÀÌ µË´Ï´Ù.

Ç׸ñµéÀÌ Ãß°¡µÇ°Å³ª »ðÀԵǸé, ±× ÂüÁ¶ ¹è¿­Àº Å©±â°¡ º¯ÇÕ´Ï´Ù. Ç׸ñÀ» ¹Ýº¹ÀûÀ¸·Î Ãß°¡ÇÏ´Â ¼º´ÉÀ» °³¼±Çϴµ¥ ¾à°£ÀÇ ÁöÇý¸¦ Àû¿ëÇÏ¿´½À´Ï´Ù; ±× ¹è¿­ÀÌ Ä¿Á®¾ß¸¸ ÇÑ´Ù¸é, ¿©ºÐÀÇ °ø°£ÀÌ ÇÒ´çµÇ¾î ´ÙÀ½ ¸î ¹øµ¿¾ÈÀº ½ÇÁ¦ÀûÀÎ Å©±â º¯°æÀ» ¿ä±¸ÇÏÁö ¾Ê°ÔµË´Ï´Ù.


6.17. ¾î¶»°Ô »çÀüÀÌ ±¸ÇöµÇ¾ú³ª¿ä?

ÆÄÀ̽ãÀÇ »çÀüÀº Å©±â º¯°æ°¡´ÉÇÑ Çؽ¬ Å×À̺í·Î¼­ ±¸ÇöµÇ¾ú½À´Ï´Ù.

B-Æ®¸®¿Í ºñ±³ÇÏ¿©, ÀÌ°ÍÀº ´ëºÎºÐÀÇ È¯°æÇÏ¿¡¼­ ´õ ÁÁÀº Ž»ö(³Ê¹«³ªµµ °¡Àå ÈçÇÑ ¿¬»ê) ¼º´ÉÀ» º¸¿© ÁÖ¸ç, ±× ±¸ÇöÀÌ ´õ °£´ÜÇÕ´Ï´Ù.


6.18. ¿Ö »çÀüÀÇ Å°´Â º¯°æºÒ°¡ÇÑ°¡¿ä?

Çؽ¬ Å×À̺í·Î »çÀüÀ» ±¸ÇöÇÏ¿´À¸¹Ç·Î Å° °ªÀ¸·ÎºÎÅÍ °è»êµÈ Çؽ¬ °ªÀ» »ç¿ëÇÏ¿© Å°¸¦ ã½À´Ï´Ù. ¸¸¾à ±× Å°°¡ º¯°æ°¡´ÉÇÑ °´Ã¼¶ó¸é, ±× °ªÀº º¯°æµÉ ¼ö ÀÖ½À´Ï´Ù, ±×¸®ÇÏ¿© ±× Çؽ¬°ªÀº º¯°æµÉ ¼ö ÀÖ½À´Ï´Ù. ±×·¯³ª ±× Å° °´Ã¼¸¦ º¯°æÇÏ´Â ÀÚ´Â ±×°ÍÀÌ »çÀü¿¡ ±¸Ã¼È­µÇ¾ú´ÂÁö¸¦ ±¸º°ÇÒ ¼ö ¾ø±â ¶§¹®¿¡, ±× ¿£Æ®¸®¸¦ ±× »çÀü¿¡¼­ À̸®Àú¸® ¿Å±æ ¼ö ¾ø½À´Ï´Ù. ±×¶§, °°Àº °´Ã¼¸¦ ±× »çÀü¿¡¼­ ÂüÁ¶ÇÏ·Á°í Çϸé, ¹ß°ßµÇÁö ¾ÊÀ» °ÍÀÔ´Ï´Ù, ¿Ö³ÄÇÏ¸é ±× Çؽ¬ °ªÀÌ ´Ù¸£±â ¶§¹®ÀÔ´Ï´Ù; ±×¸®°í ÀÌ ÀüÀÇ °ªÀ» ã¾Æ º¸·Á°í Çϸé, ¿ª½Ã ¹ß°ßµÇÁö ¾ÊÀ» °ÍÀÔ´Ï´Ù, ¿Ö³ÄÇϸé Çؽ¬ ±øÅë¿¡¼­ ¹ß°ßµÈ ±× °´Ã¼ÀÇ °ªÀÌ ´Ù¸£±â ¶§¹®ÀÔ´Ï´Ù.

¸®½ºÆ®·Î »öÀÎµÈ »çÀüÀÌ ÇÊ¿äÇÏ´Ù°í »ý°¢ÇϽŴٸé, ´ë½Å¿¡ ÅÍÇÃÀ» »ç¿ëÇϼ¼¿ä. ÇÔ¼ö tuple(l)Àº ¸®½ºÆ® l°ú ¶È °°Àº Ç׸ñµéÀ» °¡Áö´Â ÅÍÇÃÀÔ´Ï´Ù.

¹Þ¾ÆµéÀÏ ¼ö ¾ø´Â ÇØ°áÃ¥µéµµ Á¦½ÃµÇ¾ú´Âµ¥:

- ÁÖ¼Ò °ª( °´Ã¼ ½ÅºÐ¹øÈ£(object ID))¿¡ ÀÇÇÑ Çؽ¬ ¸®½ºÆ®. °°Àº °ªÀ¸·Î »õ·Î¿î ¸®½ºÆ®¸¦ ±¸¼ºÇÏ¸é ¹ß°ßµÇÁö ¾ÊÀ» °ÍÀ̱⠶§¹®¿¡ ÀÌ°ÍÀº ÀÛµ¿ÇÏÁö ¾Ê½À´Ï´Ù; ¿¹¸¦ µé¾î,

  d = {[1,2]: '12'}
  print d[[1,2]]
KeyError ¿¹¿Ü¸¦ ÀÏÀ¸Å³ °ÍÀÔ´Ï´Ù. µÎ¹ø° ¶óÀο¡¼­ »ç¿ëµÈ [1,2]ÀÇ id°¡ ù ¹ø° ¶óÀÎÀÇ id¿Í ´Ù¸£±â ¶§¹®ÀÔ´Ï´Ù. ´Ù¸¥ ¸»·Î Çϸé, »çÀüÀÇ Å°µéÀº 'is'¸¦ »ç¿ëÇÏÁö ¸»°í, '=='¸¦ »ç¿ëÇÏ¿© ºñ±³µÇ¾î¾ß¸¸ ÇÕ´Ï´Ù.

- ¸®½ºÆ®¸¦ Å°·Î »ç¿ëÇÒ ¶§´Â º¹»çº»À» ¸¸µé±â. ÀÌ°ÍÀº ÀÛµ¿ÇÏÁö ¾Ê½À´Ï´Ù. ¿Ö³ÄÇÏ¸é ±× ¸®½ºÆ®´Â (º¯°æ°¡´ÉÇÑ °´Ã¼À̹ǷÎ) Àڽſ¡ ´ëÇÑ ÂüÁ¶Á¡À» Æ÷ÇÔÇÒ ¼ö ÀÖ°í, ±×¸®°í ±× º¹»ç ÄÚµå´Â ½ÇÇàµÇ¾î ¹«ÇÑ È¸µ¹ÀÌ¿¡ ºüÁúÁöµµ ¸ð¸£±â ¶§¹®ÀÔ´Ï´Ù.

- ¸®½ºÆ®¸¦ Å°·Î Çã¿ëÇÏÁö¸¸ »ç¿ëÀÚ°¡ ±×°ÍµéÀ» º¯°æÇÏÁö ¸øÇϵµ·Ï ÇÑ´Ù. ÀÌ°ÍÀº ÇÁ·Î±×·¥¿¡¼­ ÃßÀû-Çϱâ-¾î·Á¿î ¹ö±×¸¦ °¡Áö´Â Ŭ·¡½º¸¦ Çã¿ëÇϴµ¥ ³ª´Â ÀÌ°ÍÀ» ¿ë¼­ÇÒ ¼ö ¾ø½À´Ï´Ù; ±×°ÍÀº »çÀüÀÇ Áß¿äÇÑ »ó¼ö¸¦ ¹«È¿ÇÏ°Ô ¸¸µì´Ï´Ù. (d.keys()¿¡ ÀÖ´Â ¸ðµç °ªÀº ±× »çÀüÀÇ Å°·Î »ç¿ëµÉ ¼ö ÀÖ½À´Ï´Ù).

- ¸®½ºÆ®°¡ »çÀüÀÇ Å°·Î »ç¿ëµÇ¸é Àбâ-Àü¿ëÀ¸·Î Ç¥½ÃÇØ ³õ±â. ¹®Á¦´Â ´ÜÁö ÃÖ»óÀ§-°´Ã¼ ¸¸ÀÌ ±× °ªÀ» º¯°æÇÒ ¼ö ÀÖ´Â °ÍÀº ¾Æ´Ï¶ó´Â °ÍÀÔ´Ï´Ù; ¸®½ºÆ®¸¦ ´ã°í ÀÖ´Â ÅÍÇÃÀ» Å°·Î »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù. ¹«¾ð°¡¸¦ »çÀü¿¡ Å°·Î ÀÔ·ÂÇÏ·Á¸é °Å±â·ÎºÎÅÍ µµ´ÞÇÒ ¼ö ÀÖ´Â ¸ðµç °´Ã¼¸¦ Àбâ-Àü¿ëÀ¸·Î Ç¥½ÃÇؾßÇÒ ÇÊ¿ä°¡ ÀÖÀ» °ÍÀÔ´Ï´Ù -- ±×¸®°í ¶Ç, ÀÚ±â-ÂüÁ¶ÀûÀÎ °´Ã¼´Â ¹«ÇÑ È¸µ¹À̸¦ ´Ù½Ã (¶Ç ´Ù½Ã °è¼ÓÇÏ¿©) ¾ß±âÇÒ ¼ö ÀÖ½À´Ï´Ù.

ÇÊ¿äÇÏ´Ù¸é ÀÌ°ÍÀ» ÇÇÇÏ´Â ²Ä¼ö°¡ ÀÖ½À´Ï´Ù, ±×·¯³ª ¿©·¯ºÐÀÇ Ã¥ÀÓÇÏ¿¡ ±×°ÍÀ» »ç¿ëÇϼ¼¿ä: º¯°æ°¡´É ±¸Á¶¸¦ __cmp__¿Í __hash__ ¸Þ½îµå µÑ ´Ù¸¦ °¡Áö´Â Ŭ·¡½º ½Çü ¾È¿¡ Æ÷ÀåÇØ ³ÖÀ» ¼ö ÀÖ½À´Ï´Ù.

   class listwrapper:
        def __init__(self, the_list):
              self.the_list = the_list
        def __cmp__(self, other):
              return self.the_list == other.the_list
        def __hash__(self):
              l = self.the_list
              result = 98767 - len(l)*555
              for i in range(len(l)):
                   try:
                        result = result + (hash(l[i]) % 9999999) * 1001 + i
                   except:
                        result = (result % 7777777) + i * 333
              return result
ÁÖ¸ñÇÒ °ÍÀº ±× ¸®½ºÆ®ÀÇ ¾î¶² ±¸¼º¿øµéÀº Çؽ¬µÉ ¼ö ¾øÀ» ¼öµµ ÀÖ´Ù´Â °¡´É¼º ±×¸®°í ¶Ç »ê¼úÀûÀÎ ¹ü¶÷ÀÇ °¡´É¼ºÀ¸·Î ÀÎÇÏ¿© Çؽ¬ °è»êÀÌ º¹ÀâÇÏ´Ù´Â °ÍÀÔ´Ï´Ù.

¹Ýµå½Ã È®ÀÎÇØ¾ß ÇÏ´Â °ÍÀº, ÇÑ »çÀü(¶Ç´Â Çؽ¬¿¡ ±âÃÊÇÑ ´Ù¸¥ ±¸Á¶)¿¡ Á¸ÀçÇÏ´Â ±×·¯ÇÑ ¸ðµç Æ÷Àå °´Ã¼¸¦ À§ÇÑ Çؽ¬ °ªÀº, ±× °´Ã¼°¡ ±× »çÀü(¶Ç´Â ´Ù¸¥ ±¸Á¶)¿¡ ÀÖ´Â µ¿¾È¿¡´Â, °íÁ¤µÇ¾î ÀÖ¾î¾ß ÇÑ´Ù´Â °ÍÀÔ´Ï´Ù.

°Ô´Ù°¡ Ç×»ó ´ÙÀ½°ú °°ÀÌ ¸¸¾à o1 == o2 (Áï o1.__cmp__(o2)==0)À̶ó¸é, ±× °´Ã¼°¡ »çÀü¿¡ ÀÖ´ÂÁö ¾ø´ÂÁö¿¡ »ó°ü¾øÀÌ, hash(o1)==hash(o2) (Áï, o1.__hash__() == o2.__hash__())À̾î¾ß ÇÕ´Ï´Ù. ÀÌ·¯ÇÑ Á¦ÇÑ»çÇ×µéÀ» ¸¸Á·½ÃÅ°Áö ¸øÇÑ´Ù¸é »çÀü°ú Çؽ¬¿¡ ±âÃÊÇÑ ´Ù¸¥ ±¸Á¶µéÀº ¾û¶×ÇÏ°Ô ÇൿÇÒÁöµµ ¸ð¸¨´Ï´Ù!

»ó¼úÇÑ ¸®½ºÆ®Æ÷ÀåÀÚÀÇ °æ¿ì¿¡ À־ ±× Æ÷Àå °´Ã¼°¡ »çÀü¿¡ Á¸ÀçÇÒ ¶§¸¶´Ù ±× Æ÷ÀåµÈ ¸®½ºÆ®´Â ÀÌ»óÁõ»óÀ» ÇÇÇϱâ À§ÇÏ¿© º¯°æµÇ¾î¼­´Â ¾ÈµË´Ï´Ù. ±×°ÍµéÀÌ Á¤È®ÇÏ°Ô ÀÏÄ¡µÇÁö ¾ÊÀ» ¶§ÀÇ °á°ú¿Í ±× Çʿ伺¿¡ °üÇÏ¿© ½É°¢ÇÏ°Ô ÀçÂ÷ °í·ÁÇغ¸Áö ¾Ê´ÂÇÑ ÀÌ·¸°Ô ÇÏÁö ¸¶¼¼¿ä. °æ°í ¹Þ½À´Ï´Ù!


6.19. µµµ¥Ã¼ ¾î¶»°Ô ÆÄÀ̽㿡¼­ ¹è¿­À» ÀÛ¼ºÇϳª¿ä?

["this", 1, "is", "an", "array"]

¸®½ºÆ®´Â C ³ª ÆĽºÄ® ¼¼°èÀÇ °üÁ¡¿¡¼­ ¹è¿­ÀÔ´Ï´Ù (Áú¹® 6.16 ÂüÁ¶). ¹è¿­ ¸ðµâÀº ¶ÇÇÑ °íÁ¤ ÇüÀÇ ¹è¿­À» °£°áÇÑ Ç¥ÇöÀ¸·Î »ý¼ºÇϱâ À§ÇÑ ¸Þ½îµåµéÀ» Á¦°øÇÕ´Ï´Ù (±×·¯³ª ±×°ÍµéÀº À妽º¿¡ ´ëÇÏ¿© ¸®½ºÆ®º¸´Ù ´À¸³´Ï´Ù). ¶Ç ÁÖ¸ñÇÒ °ÍÀº Numerics È®Àå°ú ´Ù¸¥ È®ÀåµéÀº ´Ù¾çÇÑ Æ¯Â¡ ¿ª½Ã °¡Áö´Â À¯»ç-¹è¿­ ±¸Á¶¸¦ Á¤ÀÇÇÑ´Ù´Â °ÍÀÔ´Ï´Ù.

¸®½ºÇÁ-·ùÀÇ ¸®½ºÆ®¸¦ ȹµæÇÏ°í, cons cells¸¦ Èä³»³»·Á¸é

    lisp_list = ("like",  ("this",  ("example", None) ) )
ÅÍÇÃÀ» »ç¿ëÇÏ°í (ȤÀº º¯°æ°¡´ÉÀ» ¿øÇϸé, ¸®½ºÆ®¸¦ »ç¿ëÇϼ¼¿ä). ¿©±â¿¡¼­ lispÀÇ car°ú À¯»çÇÑ °ÍÀº lisp_list[0]ÀÌ°í cdr°ú À¯»çÇÑ °ÍÀº lisp_list[1]ÀÔ´Ï´Ù. ½ÇÁ¦·Î ÇÊ¿äÇÏ´Ù°í È®½ÅÇÒ ¶§¸¸ ÀÌ·¸°Ô Çϼ¼¿ä (±×°ÍÀº º¸Åë ÆÄÀ̽ãÀÇ ¸®½ºÆ®¸¦ »ç¿ëÇÏ´Â °Íº¸´Ù ¸¹ÀÌ ´À¸³´Ï´Ù).

ÆÄÀ̽㠰´Ã¼¸¦ ´ãÀº º¯°æ°¡´ÉÇÑ ÀÌÁúÀûÀÎ ¹è¿­·Î¼­ ÆÄÀ̽ãÀÇ ¸®½ºÆ®¸¦ °í·ÁÇϼ¼¿ä (¿¹¸¦ µé¾î 10 ¹è ºü¸¨´Ï´Ù :) ).


6.20. ¿Ö list.sort()°¡ Á¤·ÄµÈ ¸®½ºÆ®¸¦ ¹ÝȯÇÏÁö ¾Ê³ª¿ä?

¼öÇà¼Óµµ°¡ ¹®Á¦°¡ µÇ´Â »óȲ¿¡¼­, ´ÜÁö Á¤·ÄÇϱâ À§ÇØ ±× ¸®½ºÆ®¸¦ º¹»çÇÑ´Ù´Â °ÍÀº ³¶ºñ°¡ µÉ °ÍÀÔ´Ï´Ù. ±×·¯¹Ç·Î, list.sort() ´Â ±× ¸®½ºÆ®¸¦ ÀûÀýÇÏ°Ô Á¤·ÄÇÕ´Ï´Ù. ±×°ÍÀº, ±× »ç½ÇÀ» ¿©·¯ºÐ¿¡°Ô ¾Ë·Á ÁÖ±â À§ÇÏ¿©, ±× Á¤·ÄµÈ ¸®½ºÆ®¸¦ ¹ÝȯÇÏÁö´Â ¾Ê½À´Ï´Ù. ÀÌ·¯ÇÑ ¹æ½Ä ¶§¹®¿¡, Á¤·ÄµÈ º¹»çº»ÀÌ ÇÊ¿äÇÏ°í, Á¤·ÄµÇÁö ¾ÊÀº ¹öÀü ¿ª½Ã À¯ÁöÇÒ ÇÊ¿ä°¡ ÀÖÀ» ¶§, Âø°¢Çؼ­ ¿ì¿¬ÇÏ°Ô ¸®½ºÆ®¸¦ µ¤¾î¾²Áö´Â ¾Ê°Ô µÉ °ÍÀÔ´Ï´Ù.

°á°úÀûÀ¸·Î, Á¤·ÄµÈ ¼ø¼­·Î Á¸ÀçÇÏ´Â »çÀüÀÇ Å°µé¿¡ °üÇÏ¿© ¿©±â¿¡ ¹Ýº¹ÇؾßÇÒ °ü¿ë±¸°¡ ÀÖ½À´Ï´Ù:

	keys = dict.keys()
	keys.sort()
	for key in keys:
		...do whatever with dict[key]...


6.21. ÆÄÀ̽㿡¼­ ¾î¶»°Ô ÀÎÅÍÆäÀ̽º »ç¾çÀ» ÁöÁ¤ÇÏ°í °­Á¦Çϳª¿ä?

C++À̳ª ÀÚ¹Ù°°Àº ¾ð¾îµéÀÌ Á¦°øÇÏ´Â ¸ðµâÀ» À§ÇÑ ÀÎÅÍÆäÀ̽º »ç¾çÀº ±× ¸ðµâÀÇ ÇÔ¼ö¿Í ¸Þ½îµå¿¡ ´ëÇÑ ÇÁ·ÎÅäŸÀÔÀ» ±â¼úÇÕ´Ï´Ù. ¸¹Àº »ç¶÷µéÀÌ ÄÄÆÄÀÏ ½Ã°£¿¡ ÀÎÅÍÆäÀ̽º »ç¾çÀ» °­Á¦ÇÏ´Â °ÍÀÌ °Å´ëÇÑ ÇÁ·Î±×·¥À» ¸¸µé ¶§¿¡ µµ¿òÀÌ µÈ´Ù°í ´À³§´Ï´Ù. ÆÄÀ̽ãÀº ÀÎÅÍÆäÀ̽º ÁöÁ¤À» Á÷Á¢ÀûÀ¸·Î Áö¿øÇÏÁö ¾Ê½À´Ï´Ù, ±×·¯³ª ÄÄÆ÷³ÍÆ®¸¦ À§ÇÑ ÀûÀýÇÑ Å×½ºÆ® ±ÔÀ²·Î ¸¹Àº ÀÌÁ¡µéÀ» ¾òÀ» ¼ö Àִµ¥, ÆÄÀ̽㿡¼­´Â ½±°Ô ´Þ¼ºµÉ ¼ö ÀÖ½À´Ï´Ù.

¸ðµâÀ» À§ÇÑ ÈǸ¢ÇÑ Å×½ºÆ® ¸ðµÒÀº ȸ±Í Å×½ºÆ®¸¦ Á¦°øÇÒ ¼ö ÀÖÀ» »Ó¸¸ ¾Æ´Ï¶ó ¸ðµâ ÀÎÅÍÆäÀ̽º »ç¾çÀ¸·Î ±â´ÉÇÒ ¼öµµ ÀÖ½À´Ï´Ù (´õ ÁÁÀº °ÍÀº ±×°ÍÀÌ ¿¹Á¦ »ç¿ë¹ýÀ» Á¦°øÇϱ⵵ Çϱ⠶§¹®ÀÔ´Ï´Ù). ¸¹Àº Ç¥ÁØ ¶óÀ̺귯¸®¸¦ »ìÆì º¸¸é ¶§·Î´Â "½ºÅ©¸³Æ® ¹ø¿ª(script interpretation)"À» °¡Áö°í Àִµ¥ °£´ÜÇÑ "ÀÚ±â Å×½ºÆ®(self test)"¸¦ Á¦°øÇÏ´Â °ÍÀ» º¼ ¼ö ÀÖ½À´Ï´Ù. º¹ÀâÇÑ ¿ÜºÎ ÀÎÅÍÆäÀ̽º¸¦ »ç¿ëÇÏ´Â ¸ðµâÁ¶Â÷µµ ¶§·Î´Â ±× ¿ÜºÎ ÀÎÅÍÆäÀ̽º¿¡ ´ëÇÑ, ¾ÆÁÖ ÀÛÀº "±×·çÅͱâ(stub)-Àӽà Å×½ºÆ® ¸ðµâ" Èä³»¸¦ »ç¿ëÇÏ¿© µ¶¸³ÀûÀ¸·Î Å×½ºÆ®µÉ ¼ö ÀÖ½À´Ï´Ù.

ÀûÀýÇÑ Å×½ºÆ® ±ÔÀ²Àº (°­Á¦ µÇ¸é) ÆÄÀ̽ãÀ¸·Î °Å´ëÇÏ°í º¹ÀâÇÑ ¾îÇø®ÄÉÀ̼ÇÀ» ±¸ÃàÇÏ´Â °ÍÀ» µµ¿ï ¼ö ÀÖ½À´Ï´Ù »Ó¸¸ ¾Æ´Ï¶ó ÀÎÅÍÆäÀ̽º »ç¾çÀ» °¡Áö´Â °Íµµ ±×·² °ÍÀÔ´Ï´Ù (¶Ç´Â ´õ ÁÁÀ» ¼öµµÀÖ½À´Ï´Ù). ¹°·Ð ÆÄÀ̽㿡 ¿©·¯ºÐÀº ³ª¾àÇØÁö°í ±×·¸°Ô ÇÏÁö ¸ø ÇÕ´Ï´Ù. ¶ÇÇÑ ½±°Ô Å×½ºÆ®Çϱâ À§ÇÏ¿© ´«À¸·Î Äڵ带 µðÀÚÀÎÇϱ⸦ ¿øÇÒ ¼öµµ ÀÖ½À´Ï´Ù.


6.22. ¿Ö ¸ðµç Ŭ·¡½º´Â °°Àº ÇüÀ» °¡Áö³ª¿ä? ¿Ö ½ÇüµéÀº ¸ðµÎ °°Àº ÇüÀ» °¡Áö³ª¿ä?

"Çü(type)"À̶ó´Â ´Ü¾î¸¦ ÆÄÀ̽ãÀûÀ¸·Î »ç¿ëÇÏ´Â °ÍÀº ´Ù¸¥ ¸¹Àº ÇÁ·Î±×·¡¹Ö ¾ð¾îÀÇ ¼¼°è¿¡¼­ÀÇ ÀϹÝÀûÀÎ »ç¿ë¹ý°ú ¾ÆÁÖ ¸¹ÀÌ ´Ù¸¨´Ï´Ù. ÆÄÀ̽㿡¼­ "type"Àº ÇÑ °´Ã¼ÀÇ ¿¬»ê¿¡ ´ëÇÑ ¼³¸íÀ¸·Î¼­ ±× ¿¬»êÀº C·Î ±¸ÇöµË´Ï´Ù. ¸ðµç Ŭ·¡½º´Â, ¶§·Î´Â ÆÄÀ̽ãÀ¸·Î ±¸ÇöµÈ ´Ù¸¥ ÇÁ·Î±×·¥ Á¶°¢À» "¿ª È£ÃâÇÏ´Â", C ·Î ±¸ÇöµÈ, ¶È °°Àº ¿¬»êÀ» °¡Áý´Ï´Ù, ±×·¯¹Ç·Î ¸ðµç Ŭ·¡½º´Â °°Àº ÇüÀ» °¡Áý´Ï´Ù. ºñ½ÁÇÏ°Ô C ¼öÁØ¿¡¼­ ¸ðµç Ŭ·¡½º ½Çü´Â °°Àº C ±¸ÇöÀ» °¡Áý´Ï´Ù, ±×·¯¹Ç·Î ¸ðµç ½ÇüµéÀº °°Àº ÇüÀ» °¡Áý´Ï´Ù.

±â¾ïÇÒ °ÍÀº ÆÄÀ̽㿡¼­ÀÇ "type" »ç¿ëÀÌ ÇÑ °´Ã¼ÀÇ C ±¸ÇöÀ» ÂüÁ¶ÇÑ´Ù´Â °ÍÀÔ´Ï´Ù. ¼­·Î ´Ù¸¥ Ŭ·¡½ºÀÇ ½Çüµé »çÀ̸¦ ±¸º°ÇÏ·Á¸é Instance.__class__¸¦ »ç¿ëÇϽðí, ¶Ç 4.47À» ÂüÁ¶Çϼ¼¿ä. ¿ë¾î»óÀÇ È¥µ¿¿¡ ´ëÇÏ¿© À¯°¨ÀÔ´Ï´Ù¸¸, ÆÄÀ̽ãÀÇ ¹ßÀü ´Ü°èÀÇ ÀÌ ½ÃÁ¡¿¡¼­´Â, ¹¹¶ó°í ¸»ÇÒ ¼ö ¾ø½À´Ï´Ù!


6.23. ¿Ö ÆÄÀ̽ãÀÌ Á¾·áÇÒ ¶§ ¸ðµç ¸Þ¸ð¸®°¡ Ç®¾îÁöÁö ¾Ê³ª¿ä?

ÆÄÀ̽㠸ðµâÀÇ Àü¿ª À̸§ °ø°£À¸·ÎºÎÅÍ ÂüÁ¶µÈ °´Ã¼µéÀº ÆÄÀ̽ãÀÌ Á¾·áÇÒ ¶§¿¡ Ç×»ó ÇÒ´çÀÌ Ãë¼ÒµÇÁö ¾Ê½À´Ï´Ù.

ÀÌ°ÍÀº ¼øȯ ÂüÁ¶°¡ ÀÖÀ» °æ¿ì¿¡(Áú¹® 4.17 ÂüÁ¶) ÀϾ´Ï´Ù. Ç®±â ºÒ°¡´ÉÇÑ C ¶óÀ̺귯¸®¿¡ ÀÇÇÏ¿© ÇÒ´çµÈ ¸Þ¸ð¸®µµ ÀÖ½À´Ï´Ù (¿¹¸¦ µé¾î Purify¿Í °°Àº µµ±¸´Â ÀÌ°Í¿¡ °üÇÏ¿© ºÒÆòÀ» ÇÒ °ÍÀÔ´Ï´Ù).

±×·¯³ª ÀϹÝÀûÀ¸·Î, ÆÄÀ̽ã 1.5 À̻󿡼­´Â (ÀÌÀüÀÇ ¹öÀü°ú ´ëÁ¶ÀûÀ¸·Î) Á¾·á½Ã¿¡ ´ë´ÜÈ÷ °ø°ÝÀûÀ¸·Î ¸Þ¸ð¸®¸¦ û¼ÒÇÕ´Ï´Ù.

°­Á¦ÀûÀ¸·Î ÆÄÀ̽ãÀÌ ÇÒ´ç Ãë¼Ò½Ã¿¡ ¾î¶² °ÍµéÀ» »èÁ¦Çϵµ·Ï Çϱ⸦ ¿øÇÑ´Ù¸é, sys.exitfunc ³¬¾Æä±â¸¦ »ç¿ëÇÏ¿© ±×·¯ÇÑ »èÁ¦¸¦ °­Á¦Çϼ¼¿ä. ¿¹¸¦ µé¾î ¸¸¾à ¸Þ¸ð¸® ºÐ¼® µµ±¸¸¦ »ç¿ëÇÏ¿© È®Àå ¸ðµâÀ» µð¹ö±ëÇÏ°í ÀÖ°í ÆÄÀ̽ãÀÌ °ÅÀÇ ¸ðµç °ÍµéÀ» ÇÒ´çÃë¼ÒÇϵµ·Ï °­Á¦Çϱ⸦ ¿øÇÑ´Ù¸é ´ÙÀ½°ú °°Àº exitfunc¸¦ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù:

  import sys
  def my_exitfunc():
       print "cleaning up"
       import sys
       # do order dependant deletions here
       ...
       # now delete everything else in arbitrary order
       for x in sys.modules.values():
            d = x.__dict__
            for name in d.keys():
                 del d[name]
  sys.exitfunc = my_exitfunc
¹°·Ð, ´Ù¸¥ exitfuncs´Â ´ú °­·ÄÇÒ ¼ö ÀÖ½À´Ï´Ù.

(»ç½Ç, ÀÌ ÇÔ¼ö´Â ÆÄÀ̽ãÀÌ ÇöÀç ÀÌ¹Ì ÀÚüÀûÀ¸·Î ÇÏ°í ÀÖ´Â °ÍÀ» ¼öÇàÇÏ°í ÀÖ½À´Ï´Ù; ±×·¯³ª sys.exitfunc¸¦ »ç¿ëÇÏ¿© °­Á¦·Î û¼Ò¸¦ ÇÏ´Â ¿¹Á¦´Â ¿©ÀüÈ÷ À¯¿ëÇÕ´Ï´Ù.)


6.24. ¿Ö Ŭ·¡½º ¸Þ½îµå ¶Ç´Â Ŭ·¡½º º¯¼ö°¡ ¾ø½À´Ï±î?*

´ÙÀ½°ú °°Àº Ç¥±â¹ýÀº

    instance.attribute(arg1, arg2)
º¸Åë ´ÙÀ½°ú °°ÀÌ µ¿µîÇÏ°Ô ¹ø¿ªµË´Ï´Ù

    Class.attribute(instance, arg1, arg2)
¿©±â¿¡¼­ Class´Â ½ÇüÀÇ (»óÀ§)Ŭ·¡½º ÀÔ´Ï´Ù. ºñ½ÁÇÏ°Ô ´ÙÀ½Àº

    instance.attribute = value
½ÇüÀÇ ¼Ó¼ºÀ» ¼³Á¤ÇÕ´Ï´Ù (½Çü°¡ »ó¼Ó¹ÞÀº Ŭ·¡½ºÀÇ ¾î¶² ¼Ó¼ºÀÌ¶óµµ µ¤¾î½á¼­).

°¡²û ÇÁ·Î±×·¡¸ÓµéÀº ´Ù¸¥ ÇàÀ§¸¦ °¡Áö±â¸¦ ¿øÇÕ´Ï´Ù -- ½Çü¿¡ ¿«¿©ÀÖÁö ¾Ê´Â ¸Þ½îµå ±×¸®°í ÀûÀýÇÏ°Ô º¯°æµÇ´Â Ŭ·¡½º ¼Ó¼ºÀ» ¿øÇÕ´Ï´Ù. ÆÄÀ̽ãÀº ÀÌ·¯ÇÑ ÇàÀ§µéÀ» ¸·Áö ¾Ê½À´Ï´Ù, ±×·¯³ª °ü·ÊÀûÀ¸·Î ±×°ÍµéÀ» ±¸ÇöÇÒ ÇÊ¿ä°¡ ÀÖ½À´Ï´Ù. ÀÌ°ÍÀ» ´Þ¼ºÇÏ´Â ÇÑ °¡Áö ¹æ¹ýÀº "¸®½ºÆ® Æ÷ÀåÀÚ(list wrappers)"¿Í Àü¿ª ÇÔ¼ö¸¦ »ç¿ëÇÏ´Â °ÍÀÔ´Ï´Ù.

   def C_hello():
         print "hello"
   class C:
        hello = [C_hello]
        counter = [0]
    I = C()
¿©±â¿¡¼­ I.hello[0]()´Â "class method"¿Í ¾ÆÁÖ ¶È °°ÀÌ ÇൿÇÕ´Ï´Ù ±×¸®°í I.counter[0] = 2 ´Â C.counter¸¦ º¯°æÇÕ´Ï´Ù (±×¸®°í ±×°ÍÀ» µ¤¾î¾²Áö ¾Ê½À´Ï´Ù). µµ´ëü ¿Ö ÀÌ·¸°Ô ÇØ¾ß ÇÏ´ÂÁö¸¦ ÀÌÇØ ¸øÇÏ°Ú´Ù¸é, ±×°ÍÀº ¿©·¯ºÐÀÌ ¼ø¼öÇϱ⠶§¹®ÀÔ´Ï´Ù, ±×¸®°í ¾Æ¸¶µµ Àý´ë·Î ±×·¸°Ô Çϱ⸦ ¿øÇÏÁö ¾ÊÀ» °ÍÀÔ´Ï´Ù! ÀÌ°ÍÀº À§ÇèÇÑ ²Ä¼öÀÔ´Ï´Ù, °¡´ÉÇÏ´Ù¸é ÃßõÇÏÁö ¾Ê½À´Ï´Ù. (Tim PeterÀÇ Åä·Ð¿¡¼­ ¿µ°¨À» ¾òÀ½.)

ÆÄÀ̽ã 2.2¿¡¼­´Â, »õ·ÎÀÌ ³»ÀåµÈ ¿¬»êÀÎ classmethod¿Í staticmethod¸¦ »ç¿ëÇÏ¿© ÀÌ·¸°Ô ÇÒ ¼ö ÀÖ½À´Ï´Ù. ´ÙÀ½À» ÂüÁ¶: http://www.python.org/2.2/descrintro.html#staticmethods


6.25. ¿Ö ±âº» °ªµéÀÌ ¶§·Î´Â °´Ã¼µé »çÀÌ¿¡ °øÀ¯µÇ³ª¿ä?

ÇÔ¼ö È£ÃâÀ» ÇÏ¸é ±âº» °ª¿¡ ´ëÇÏ¿© »õ·Î¿î °´Ã¼°¡ ¸¸µé¾î Áø´Ù°í ÀÚÁÖ ¿¹»óÇÏÁö¸¸, ½ÇÁ¦·Î ÀÌ°ÍÀÌ ÀϾ´Â °ÍÀÌ ¾Æ´Õ´Ï´Ù. ±âº» °ªµéÀº ÇÔ¼ö°¡ Á¤ÀÇµÉ ¶§ ÀÛ¼ºµË´Ï´Ù, Áï, ¸ðµç ÇÔ¼öµéÀÌ ÂüÁ¶ÇÏ´Â ±×·¯ÇÑ ¿ÀÁ÷ ÇϳªÀÇ °´Ã¼ ¸¸ÀÌ ÀÖ½À´Ï´Ù. ¸¸¾à ±× °´Ã¼°¡ º¯°æµÈ´Ù¸é, ±× ÇÔ¼ö¿¡ ´ëÇÑ ÀÕ´Ù¸£´Â È£ÃâµéÀº ÀÌ º¯°æµÈ °´Ã¼¸¦ ÂüÁ¶ÇÒ °ÍÀÔ´Ï´Ù. Á¤ÀÇ»óÀ¸·Î, (¼ýÀÚ, ¹®ÀÚ¿­, ÅÍÇÃ, None°ú °°Àº) º¯°æ ºÒ°¡ °´Ã¼´Â º¯°æÀ¸·ÎºÎÅÍ ¾ÈÀüÇÕ´Ï´Ù. (»çÀü, ¸®½ºÆ®, Ŭ·¡½º ½Çü¿Í °°Àº) º¯°æ°¡´É °´Ã¼¿¡ ´ëÇÑ º¯°æÀÌ È¥µ¿À» ¾ß±âÇÏ´Â °ÍÀÔ´Ï´Ù.

ÀÌ·¯ÇÑ »ç¾ç ¶§¹®¿¡ º¯°æ°¡´É °´Ã¼¸¦ ±âº» °ªÀ¸·Î »ç¿ëÇÏÁö ¾Ê°í, ¿ÀÈ÷·Á ±×°ÍµéÀ» ±× ÇÔ¼ö¿¡ µµÀÔÇÏ´Â °ÍÀÌ ÁÁÀº ÇÁ·Î±×·¡¹Ö °ü½ÀÀÔ´Ï´Ù. ´ÙÀ½°ú °°ÀÌ ÀÛ¼ºÇÏÁö ¸¶¼¼¿ä:

	def foo(dict={}):  # XXX shared reference to one dict for all calls
	    ...
±×·¯³ª:
	def foo(dict=None):
		if dict is None:
			dict = {} # create a new dict for local namespace
ÀÌ·¯ÇÑ »ç¾ç¿¡ ´ëÇÑ ³íÀǸ¦ º¸·Á¸é "ÆÄÀ̽ãÀ¸·Î ÇÏ´Â ÀÎÅÍ³Ý ÇÁ·Î±×·¡¹Ö(Internet Programming with Python)"ÀÇ 182 ÆäÀÌÁö¸¦ º¸¼¼¿ä. ȤÀº ¶Ç ´Ù¸¥ ³íÀǸ¦ º¸·Á¸é "ÆÄÀ̽ã ÇÁ·Î±×·¡¹ÖÇϱâ(Programming Python)"ÀÇ 144 ÆäÀÌÁö »ó´Ü ¶Ç´Â 277 ÆäÀÌÁö ÇÏ´ÜÀ» º¸¼¼¿ä.


6.26. ¿Ö no goto°¡ ¾ø´Â°¡?

½ÇÁ¦·Î, ¿¹¿Ü¸¦ »ç¿ëÇÏ¿© "±¸Á¶ÀûÀÎ goto"¸¦ Á¦°øÇÒ ¼ö Àִµ¥ ½ÉÁö¾î´Â ÇÔ¼ö È£Ãâ¿¡µµ ÀÛµ¿ÇÕ´Ï´Ù. ¸¹Àº »ç¶÷µéÀº C, Æ÷Æ®¶õ, ±×¸®°í ´Ù¸¥ ¾ð¾îµéÀÌ ÃæºÐÇÑ ÀÌÀ¯¸¦ °¡Áö°í "go" ȤÀº "goto" ±¸Á¶¸¦ »ç¿ëÇÏ´Â ¸ðµç °÷¿¡ ´ëÇÏ¿© ¿¹¿Ü·Î Æí¸®ÇÏ°Ô Èä³»³¾¼ö ÀÖ´Ù°í ´À³§´Ï´Ù. ¿¹¸¦ µé¾î:

   class label: pass # declare a label
   try:
        ...
        if (condition): raise label() # goto label
        ...
   except label: # where to goto
        pass
   ...
ÀÌ°ÍÀ¸·Î ȸµ¹ÀÇ Áß¾Ó¿¡ ¶Ù¾î µé ¼ö´Â ¾ø½À´Ï´Ù, ±×·¯³ª º¸Åë ±×°ÍÀº ¾î¶µç gotoÀÇ ³²¿ëÀ̶ó°í °£Áֵ˴ϴÙ. ¾Æ²¸¼­ »ç¿ëÇϼ¼¿ä.


6.27. ÆÄÀ̽㿡¼­ ´õ ³ôÀº ¼øÀ§ÀÇ ÇÔ¼ö¸¦ ¾î¶»°Ô ÀÛ¼ºÇϳª¿ä?

µÎ °³ÀÇ ¼±ÅÃÀÌ ÀÖ½À´Ï´Ù: ±âº» ÀμöµéÀ» »ç¿ëÇؼ­ ±×°ÍµéÀ» µ¤¾î ¾µ ¼ö Àְųª ȤÀº "È£Ãâ °¡´É °´Ã¼ (callable objects)."¸¦ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù. ¿¹¸¦ µé¾î linear(a,b)¸¦ Á¤ÀÇÇؼ­ ÇÔ¼ö f¸¦ ¹Ýȯ½ÃÅ°±â¸¦ ¿øÇÑ´Ù°í °¡Á¤ÇսôÙ. °Å±â¿¡¼­ f(x)´Â ±× °ª a*x+b¸¦ °è»êÇÕ´Ï´Ù.

±âº» ÀμöµéÀ» »ç¿ëÇϱâ:

     def linear(a,b):
         def result(x, a=a, b=b):
             return a*x + b
         return result
ȤÀº È£Ãâ°¡´É °´Ã¼¸¦ »ç¿ëÇϱâ:

     class linear:
        def __init__(self, a, b):
            self.a, self.b = a,b
        def __call__(self, x):
            return self.a * x + self.b
µÑ ¸ðµÎÀÇ °æ¿ì¿¡:

     taxes = linear(0.3,2)
¶ó°í Çϸé È£Ãâ°¡´ÉÇÑ °´Ã¼¸¦ ¾ò´Âµ¥ ¿©±â¿¡¼­ taxes(10e6) == 0.3 * 10e6 + 2 ÀÔ´Ï´Ù.

±âº» °ª Àü·«Àº ¾àÁ¡ÀÌ Àִµ¥ ±âº» ÀμöµéÀÌ ¿ì¿¬ÇÏ°Ô È¤Àº ¾ÇÀÇÀûÀ¸·Î µ¤¾î¾º¿©Áú ¼ö ÀÖ½À´Ï´Ù. È£Ãâ°¡´É °´Ã¼ Á¢±Ù¹ýÀÇ ¾àÁ¡Àº ¾à°£ ´À¸®°í ¾à°£ ´õ ±æ´Ù´Â °ÍÀÔ´Ï´Ù. ±×·¸Áö¸¸ ÁÖ¸ñÇÒ °ÍÀº È£Ãâ°¡´É °´Ã¼µéÀÇ ¸ðÀÓÀÌ »ó¼ÓÀ» ÅëÇÏ¿© ÀÎÁõÀ» °øÀ¯ÇÑ´Ù´Â °ÍÀÔ´Ï´Ù. ¿¹¸¦ µé¾î:

      class exponential(linear):
         # __init__ inherited
         def __call__(self, x):
             return self.a * (x ** self.b)
comp.lang.python¿¡¼­, zenin@bawdycaste.orgÀÌ ÁöÀûÇÑ ¹Ù¿¡ ÀÇÇÏ¸é °´Ã¼´Â ´Ù¼öÀÇ ¸Þ½îµåµéÀ» À§ÇÑ »óÅÂÁ¤º¸¸¦ ĸ½¶È­ ÇÒ ¼ö À־ ±â´ÉÀû ÇÁ·Î±×·¡¹Ö ¾ð¾î¿¡¼­ ºô·Á¿Â "¿ïŸ¸®(closure)"ÀÇ °³³äÀ» Èä³»³¾ ¼ö ÀÖ½À´Ï´Ù, ¿¹¸¦ µé¾î:

    class counter:
        value = 0
        def set(self, x): self.value = x
        def up(self): self.value=self.value+1
        def down(self): self.value=self.value-1
    count = counter()
    inc, dec, reset = count.up, count.down, count.set
¿©±â¿¡¼­ inc, dec ±×¸®°í resetÀº (±×·± ½ÄÀ¸·Î »ý°¢ÇÏ°íÀÚ ÇÑ´Ù¸é) "º¯¼ö count.value¸¦ ´ã°í ÀÖ´Â, °°Àº ¿ïŸ¸®¸¦ °øÀ¯ÇÏ´Â ÇÔ¼öó·³ ÇൿÇÕ´Ï´Ù".


6.28. 'try' ¾È¿¡¼­ 'continue'¿¡ ´ëÇÏ¿© ¿Ö ±¸¹®¿¡·¯¸¦ ¸ÂÀÌ Çϳª¿ä?

ÀÌ°ÍÀº ±¸ÇöÀÇ ÇÑ°èÀε¥, ¹ÙÀÌÆ® Äڵ带 »ý¼ºÇÏ´Â ÆÄÀ̽ãÀÇ ³Ê¹«³ª °£°áÇÑ-»ç°í ¹æ½ÄÀ¸·Î ¾ß±âµË´Ï´Ù. try ºí·ÏÀº ¹«¾ð°¡¸¦ "ºí·Ï ½ºÅÃ(block stack)"¿¡ ¹Ð¾î ³Ö´Âµ¥ continue¹®Àº ´Ù½Ã ±×°ÍÀ» ²ø¾î ³»¾ß ÇÒ °ÍÀÔ´Ï´Ù. ÇöÀçÀÇ ÄÚµå »ý¼º±â´Â ±× µ¥ÀÌŸ ±¸Á¶¸¦ °¡ÁöÁö ¾ÊÀ¸¹Ç·Î 'continue'°¡ ¿Ã¹Ù¸¥ Äڵ带 ¸¸µé¾î ³¾ ¼ö ÀÖ½À´Ï´Ù.

ÁÖ¸ñÇÒ °ÍÀº JPythonÀº ÀÌ·¯ÇÑ Á¦ÇÑÀ» °¡ÁöÁö ¾Ê´Â´Ù´Â °ÍÀÔ´Ï´Ù!


6.29. ¿Ö ¹Ì°¡°ø ¹®ÀÚ¿­ (r-strings)Àº ¿ª»ç¼±À¸·Î ³¡³¯ ¼ö ¾ø³ª¿ä?

´õ Á¤È®È÷ À̾߱â Çϸé, ¹Ì°¡°ø ¹®ÀÚ¿­Àº Ȧ¼ö°³ÀÇ ¿ª»ç¼±À¸·Î ³¡³¯ ¼ö ¾ø½À´Ï´Ù: ¸Ç ³¡¿¡ Ȧ·Î ¿ª»ç¼±ÀÌ ³²À¸¸é ´ÝÀ½ ºÎÈ£ ¹®ÀÚ°¡ ¹«½ÃµÇ¾î, ³¡³ªÁö ¾ÊÀº ¹®ÀÚ¿­À» ³²±é´Ï´Ù.

ÀڽŸ¸ÀÇ ¿ª»ç¼± Å»Ãâ 󸮸¦ °¡Áö°íÀÚ Çϴ ó¸®±â(ÁÖ·Î Á¤±Ô Ç¥Çö½Ä ¿£Áø)¿¡ ´ëÇÏ¿©, ÀÔ·ÂÀ» ½±°Ô »ý¼ºÇÒ ¼ö ÀÖµµ·Ï ¹Ì°¡°ø ¹®ÀÚ¿­Àº µðÀÚÀÎ µÇ¾ú½À´Ï´Ù. ¾î·µç ±×·¯ÇÑ Ã³¸®±â´Â ÈĹÌÀÇ Â¦ÀÌ ¾ø´Â ¿ª»ç¼±À» ¿¡·¯¶ó°í °£ÁÖÇÕ´Ï´Ù, ±×·¡¼­ ¹Ì°¡°ø ¹®ÀÚ¿­Àº ±×°ÍÀ» Çã¿ëÇÏÁö ¾Ê½À´Ï´Ù. º¸»óÀ¸·Î, ¿©·¯ºÐÀº ¿ª»ç¼±À¸·Î Å»Ãâ½ÃÅ´À¸·Î½á, ±× ¹®ÀÚ¿­¿¡ ÀÎ¿ë ¹®ÀÚ¸¦ ³Ñ°Ü ÁÙ ¼ö ÀÖ½À´Ï´Ù. ÀÌ·¯ÇÑ ±ÔÄ¢Àº ¹Ì°¡°ø ¹®ÀÚ¿­(r-strings)ÀÌ ÀǵµÇÑ ¸ñÀû¿¡ »ç¿ëµÉ ¶§´Â Àß ÀÛµ¿ÇÕ´Ï´Ù .

¸¸¾à À©µµ¿ì¿¡¼­ °æ·ÎÀ̸§À» ±¸ÃàÇÏ°íÀÚ ÇÑ´Ù¸é, ÁÖ¸ñÇÒ °ÍÀº ¸ðµç À©µµ¿ì ½Ã½ºÅÛ È£ÃâÀº Á¤»ç¼±µµ ¿ª½Ã ¹Þ¾ÆµéÀδٴ °ÍÀÔ´Ï´Ù:

    f = open("/mydir/file.txt") # works fine!
µµ½º ¸í·É¾î¿¡ ´ëÇÑ °æ·Î À̸§À» ±¸ÃàÇÏ°íÀÚ ÇÑ´Ù¸é, ¿¹¸¦ µé¾î ´ÙÀ½ ÁßÀÇ Çϳª¸¦ ½ÃµµÇØ º¸¼¼¿ä

    dir = r"\this\is\my\dos\dir" "\\"
    dir = r"\this\is\my\dos\dir\ "[:-1]
    dir = "\\this\\is\\my\\dos\\dir\\"


6.30. ¿Ö Ç¥Çö½Ä¿¡¼­ ÇÒ´çÀ» »ç¿ëÇÒ ¼ö ¾ø³ª¿ä?

¸¹Àº »ç¶÷µéÀÌ C ³ª ÆÞÀÇ ºÒÆò¿¡ Àͼ÷Çѵ¥, ±×µéÀº ¿¹¸¦ µé¾î ÀÌ·¯ÇÑ C °ü¿ë±¸¸¦ »ç¿ëÇÒ¼ö Àֱ⸦ ¿øÇÕ´Ï´Ù:

    while (line = readline(f)) {
        ...do something with line...
    }
ÀÌ°Í¿¡ ´ëÇÏ¿© ÆÄÀ̽ãÀ¸·Î´Â ÀÌ·¸°Ô ÀÛ¼ºµÇ¾î¾ß ÇÕ´Ï´Ù:

    while 1:
        line = f.readline()
        if not line:
            break
        ...do something with line...
ÀÌ ¹®Á¦´Â ÆÄÀ̽㠴º½º ±×·ì¿¡ ³î¶ó¿ï Á¤µµ·Î ÀÚÁÖ ¿Ã¶ó¿É´Ï´Ù -- µ¥ÀÚ ´º½º¸¦ Ž»öÇÏ¿© ÇÒ´ç Ç¥Çö½Ä¿¡ ´ëÇÑ Áö³­ ¸Þ½ÃÁöµéÀ» ã¾Æº¸¼¼¿ä. ÆÄÀ̽ã Ç¥Çö½Ä¿¡¼­ ÇÒ´çÀÌ Çã¿ëµÇÁö ¾Ê´Â ÀÌÀ¯´Â ´Ù¸¥ ¾ð¾î¿¡¼­ ÀÌ ±¸Á¶¿¡ ÀÇÇؼ­ ¾ß±âµÇ´Â, ÀÚÁÖÀÖ´Â, ã±â-³Ê¹«-¾î·Á¿î ¹ö±× ¶§¹®ÀÔ´Ï´Ù:

    if (x = 0) {
        ...error handling...
    }
    else {
        ...code that only works for nonzero x...
    }
¸¹Àº ´ë¾ÈµéÀÌ Á¦¾ÈµÇ¾ú½À´Ï´Ù. ´ëºÎºÐÀº ÇØÅ· ¼öÁØÀ¸·Î ¾à°£ÀÇ Å¸ÀÚ ¼ö°í¸¦ Àý¾àÇØÁÖ±â´Â ÇÏÁö¸¸ ÀÓÀÇÀûÀÌ°í ºñ¹Ð½º·± ±¸¹® ȤÀº Å°¿öµå¸¦ »ç¿ëÇϱ⠶§¹®¿¡, ¾ð¾î º¯°æ Á¦¾È¿¡ ´ëÇÏ¿© ³»°¡ »ç¿ëÇÑ, °£°áÇÑ ±âÁØ¿¡ ¸ÂÁö ¾Ê½À´Ï´Ù: ±× ±âÁØÀº ¾ÆÁ÷±îÁö ±×·¯ÇÑ ±¸Á¶¸¦ Á¢ÇØ º»ÀûÀÌ ¾ø´Â Àΰ£ µ¶ÀÚ¿¡°Ô ÀûÀýÇÑ Àǹ̸¦ Á¦°øÇؾ߸¸ ÇÕ´Ï´Ù.

ÀÌ°Í¿¡ ´ëÇÏ¿© ¹«¾ð°¡¸¦ ÇÒ ¼ö ÀÖ´Ù¸é ½Å¼ÓÇÏ°Ô ÆÄÀ̽ã 2.0¿¡ ±¸ÇöµÉ °ÍÀÔ´Ï´Ù. -- °íÃľ߸¸ ÇÒ °¡Ä¡°¡ ÀÖ´Ù¸é. Àç¹ÌÀÖ´Â Çö»óÀº ´ëºÎºÐÀÇ °æ·Â ÆÄÀ̽ã ÇÁ·Î±×·¡¸ÓµéÀº "while 1" °ü¿ë±¸¸¦ ÀνÄÇÏ°í ÀÖ°í Ç¥Çö ±¸Á¶¿¡¼­ ±×·¸°Ô ¸¹ÀÌ ÇÒ´çÀ» »©¸Ô´Â °Í °°Áö´Â ¾Ê´Ù´Â °ÍÀÔ´Ï´Ù; ¿À·ÎÁö Ãʺ¸ÀÚ¸¸ÀÌ ÀÌ°ÍÀ» ¾ð¾î¿¡ Ãß°¡ÇÏ·Á´Â °­·ÄÇÑ ¿å¸ÁÀ» Ç¥ÃâÇÕ´Ï´Ù.

ÇϳªÀÇ ¾ÆÁÖ ¿ì¾ÆÇÑ ÇØ°áÃ¥À̶ó¸é ":="·Î öÀڵǴÂ, Ç¥Çö½Ä¿¡¼­ÀÇ ÇÒ´çÀ» À§ÇÑ »õ·Î¿î ¿¬»êÀÚ¸¦ µµÀÔÇÏ´Â °ÍÀÏ °Ì´Ï´Ù. -- ÀÌ°ÍÀº "=="¹®Á¦°¡ ¾Æ´Ï¶ó "=" ¹®Á¦¸¦ ÇÇÇϱâ À§ÇÑ °ÍÀÔ´Ï´Ù. this avoids the "=" instead of "==" problem. ±×°ÍÀº ºñ±³ ¿¬»êÀڷμ­ °°Àº ¿ì¼± ¼øÀ§¸¦ °¡Áú °ÍÀÔ´Ï´Ù ±×·¯³ª Çؼ®±â´Â ´Ù¸¥ ºñ±³ ¿¬»êÀÚ¿ÍÀÇ Á¶ÇÕÀ» (°ýÈ£¸¦ °í·Áµµ ÇÏÁö ¾Ê°í) ¿¡·¯·Î ¼±¾ðÇÒ °ÍÀÔ´Ï´Ù.

¸¶Áö¸·À¸·Î -- ÀÌ°ÍÀ» öÀÚÇÑ´Ù´Â ´ë¾ÈÀûÀÎ ¹æ½ÄÀº ¸Å·ÂÀûÀ¸·Î º¸ÀÌÁö¸¸ ÀϹÝÀûÀ¸·Î "while 1" ÇØ°áÃ¥º¸´Ù´Â ´ú Æ°Æ°ÇÕ´Ï´Ù:

    line = f.readline()
    while line:
        ...do something with line...
        line = f.readline()
ÀÌ°Í¿¡ °üÇÑ ¹®Á¦´Â, ¸¸¾à Á¤È®ÇÏ°Ô ¾î¶»°Ô ´ÙÀ½ ¶óÀÎÀ» ¾ò´ÂÁö¿¡ °üÇÏ¿© »ý°¢À» ¹Ù²Û´Ù¸é (¿¹¸¦ µé¾î. ±×°ÍÀ» sys.stdin.readline() ¾ÈÀ¸·Î º¯°æÇϱ⸦ ¿øÇÑ´Ù¸é) ÇÁ·Î±×·¥¿¡¼­ µÎ ±ºµ¥¸¦ º¯°æÇØ¾ß ÇÑ´Ù´Â °ÍÀ» ±â¾ïÇÒ ÇÊ¿ä°¡ ÀÖ½À´Ï´Ù -- µÎ¹ø°´Â ±× ȸµ¹ÀÌÀÇ ¾Æ·¡ºÎºÐ¿¡ ¼û¾î ÀÖ½À´Ï´Ù.


6.31. ¿Ö ÆÄÀ̽ãÀº ´Ù¸¥ ¾ð¾îó·³ "with" ¼­¼ú¹®À» °¡ÁöÁö ¾Ê³ª¿ä?

±âº»ÀûÀ¸·Î, ±×·¯ÇÑ ±¸Á¶´Â ³Ê¹«³ª ¸ðÈ£ÇÏ°Ô µÉ Áöµµ ¸ð¸£±â ¶§¹®ÀÔ´Ï´Ù. ´ÙÀ½ÀÇ ÀÇ°ß¿¡ ´ëÇÏ¿© Carlos Ribeiro¾¾¿¡°Ô °¨»çÇÕ´Ï´Ù:

°´Ã¼ ÆĽºÄ®, µ¨ÆÄÀÌ, ±×¸®°í C++ °°Àº, ¾î¶² ¾ð¾îµéÀº Á¤Àû ÇüÀ» »ç¿ëÇÕ´Ï´Ù. ±×·¡¼­ ¾î¶² ±¸¼º¿øÀÌ "with"Àý¿¡¼­ ÇÒ´çµÇ¾ú´ÂÁö¸¦ ¸í·áÇÏ°Ô ¾Ë ¼ö ÀÖ½À´Ï´Ù. ÀÌ°ÍÀÌ ÁÖ¿ä ³íÁ¡ÀÔ´Ï´Ù - ±× ÄÄÆÄÀÏ·¯´Â Ç×»ó ÄÄÆÄÀÏ ½Ã°£¿¡ °¢ º¯¼öµéÀÇ ¿µ¿ªÀ» ¾Ë°í ÀÖ½À´Ï´Ù.

ÆÄÀ̽ãÀº µ¿Àû ÇüÀ» »ç¿ëÇÕ´Ï´Ù. ¾î¶² ¼Ó¼ºµéÀÌ ½ÇÇà½Ã°£¿¡ ÂüÁ¶µÉÁö¸¦ ¹Ì¸® ¾Æ´Â °ÍÀº ºÒ°¡´ÉÇÕ´Ï´Ù. ±¸¼º¿ø ¼Ó¼ºµéÀº Ãß°¡µÉ ¼öµµ ÀÖ°í ȤÀº °´Ã¼·ÎºÎÅÍ ºÐÁÖÇÏ°Ô Á¦°Å µÉ ¼öµµ ÀÖ½À´Ï´Ù. ÀÌ·± Á¡ ¶§¹®¿¡, ´Ü¼øÇÑ Àбâ·Î´Â, ¾î¶² ¼Ó¼ºÀÌ ÂüÁ¶µÇ°í ÀÖ´ÂÁö - Áö¿ª ¼Ó¼º, Àü¿ª ¼Ó¼º, ȤÀº ±¸¼º¿ø ¼Ó¼ºÀÎÁö¸¦ ¾Ë ¼ö ¾øÀ» °ÍÀÔ´Ï´Ù.

¿¹¸¦ µé¾î, ´ÙÀ½ÀÇ Á¶°¢Äڵ带 ¿¹·Î µé¾î º¾½Ã´Ù (±×·±µ¥ ÀÌ°ÍÀº ¹Ì¿Ï¼ºÀ̸ç, ´ÜÁö ±× ¾ÆÀ̵ð¾î¸¦ º¸¿©ÁÖ±â À§ÇÑ °ÍÀÔ´Ï´Ù):

   def with_is_broken(a):
      with a:
         print x
Á¶°¢ÄÚµå´Â "a"°¡ "x"¶ó°í ºÎ¸£´Â ±¸¼º¿ø ¼Ó¼ºÀ» °¡Á®¾ß¸¸ ÇÑ´Ù°í °¡Á¤ÇÕ´Ï´Ù. ±×·¸Áö¸¸, ÆÄÀ̽㿡¼­´Â ¾Æ¹«°Íµµ ±×°ÍÀ» º¸ÀåÇÏÁö ¾Ê½À´Ï´Ù. ¸¸¾à "a"°¡, ¿¹¸¦ µé¾î, Á¤¼ö¶ó¸é ¹«½¼ÀÏÀÌ ÀϾ °ÍÀΰ¡? ±×¸®°í "x"¶ó´Â À̸§ÀÇ Àü¿ª º¯¼ö¸¦ °¡Áö°í ÀÖ´Ù¸é, ±×°ÍÀº ºí·Ï ¾È¿¡¼­ »ç¿ëµÇ´Â °ÍÀ¸·Î ³¡³¯ °ÍÀΰ¡? º¸½Ã´Ù½ÃÇÇ, ÆÄÀ̽ãÀÇ µ¿Àû Ư¼ºÀº ±×·¯ÇÑ ¼±ÅÃÀ» ´õ¿í ¾î·Æ°Ô ÇÏ°í ÀÖ½À´Ï´Ù.


¾ÕÀ¸·Î    ¸ñÂ÷    1    2    3    4    5    Á¦6Àå    7    8    ´ÙÀ½À¸·Î