ÀåÁ¡:
¿¹¸¦ µé¾î, 1ºÎÅÍ N±îÁöÀÇ ÇÕÀ» ±¸ÇÏ´Â ÇÁ·Î±×·¥À» ÀÛ¼ºÇÑ´Ù°í Çϸé, ´ëºÎºÐÀÇ ÇÁ·Î±×·¡¸ÓµéÀº ±¸Ã¼Àû ·ÎÁ÷ºÎÅÍ »ý°¢ÇÏ´Â BottomUp?¹æ½ÄÀ¸·Î Á¢±ÙÇÒ °ÍÀÌ´Ù. ÇÏÁö¸¸ ÀÌ·± °æ¿ì, ¸ÛÇÏ´Ï ¸Õ »ê¸¸ ¹Ù¶óº¸¸ç ¹» ¸ÕÀú ÇؾßÇÒÁö °¨ÀÌ ¿ÀÁö ¾Ê´Â °æ¿ìµµ ¸¹°í, ¾ðÁ¦ ÀÌ ÇÁ·Î±×·¥ÀÌ ¿Ï¼ºµÇ´ÂÁöµµ ¾Ë±â Èûµé°í, ´õ±¸³ª ÇÁ·Î±×·¥ ÀÛ¼º Áß°£¿¡ Äڵ带 °íÄ¡´Â °ÍÀ» ²¨¸®°Ô µÈ´Ù.
ÇÏÁö¸¸, ProgrammingByIntention?°ú TestFirstProgramming¿¡¼´Â ¸ÕÀú "Àǵµ"(intention)°¡ µå·¯³ªµµ·Ï ÇÑ´Ù. µû¶ó¼ ÈǸ¢ÇÑ µðÀÚÀεµ ´ýÀ¸·Î ¾ò´Â´Ù.
TFP¿Í PBI¸¦ ÇÏ´Â ÇÁ·Î±×·¡¸Ó´Â ¸ÕÀú ´ÙÀ½ÀÇ Äڵ带 ÀÛ¼ºÇÑ´Ù:
... out=1+2+3+4+5+6+7+8+9+10 self.assertEqual(out,sumFromOne(10)) ...
ÀÌ ¶§ ÀÌ¹Ì ÇÁ·Î±×·¡¸Ó´Â, °¡Àå ºÐ¸íÇÏ°í ´Ü¼øÇÑ ÄÚµùÀ» ÇÏ¸é¼ µ¿½Ã¿¡ ÀÚ½ÅÀÌ ÀÛ¼ºÇÒ ÇÁ·Î±×·¥ÀÇ ÀÎÅÍÆäÀ̽º¸¦ µðÀÚÀÎÇÑ °ÍÀÌ´Ù. ¸ñÇ¥°¡ ¸¸µé¾î Á³À¸¸é ÀÌ ¸ñÇ¥¸¦ ¿Ï¼öÇÏ´Â ÇÁ·Î±×·¥À» ¸¸µé¸é µÈ´Ù.
»ç½Ç ÀÌ Å×½ºÆ® Äڵ带 ¸ÕÀú ÀÛ¼ºÇÏ°í ¹Ù·Î Å×½ºÆ® Äڵ带 ½ÇÇàÇÑ´Ù. ±×·¯¸é ´ç¿¬È÷ sumFromOneÀ̶ó´Â À̸§ÀÌ Á¤ÀǵǾî ÀÖÁö ¾Ê´Ù´Â ¿¡·¯°¡ ³ª¿Â´Ù. ÀÌ ¶§ ¹Ù·Î, ÄÄÇ»ÅÍ°¡ ¿ä±¸ÇÏ´Â °ÍÀ» µé¾îÁÖ¸é µÈ´Ù. Áï, sumFromOneÀ̶ó´Â À̸§À» Á¤ÀÇÇÑ´Ù.
def sumFromOne(upTo): pass
¿©±â±îÁö¸¸ ÀÛ¼ºÇÏ°í ´Ù½Ã Å×½ºÆ® Äڵ带 µ¹¸°´Ù. ±×·¯¸é À̹ø¿¡´Â ¾Æ±îÀÇ À̸§ÀÌ Á¤ÀǵǾî ÀÖÁö ¾Ê´Ù´Â ¿¡·¯´Â »ç¶óÁö°í À̹ø¿¡´Â 1ºÎÅÍ 10±îÁöÀÇ ÇÕÀÌ None°ª(sumFromOneÀÇ ¸®ÅÏ°ª)°ú ´Ù¸£´Ù´Â "½ÇÆÐ"(failure) ¸Þ¼¼Áö°¡ ³ª¿Â´Ù.
±×·³, ÀÌÁ¦´Â ´Ù½Ã ÄÄÇ»ÅÍ°¡ ¿ä±¸ÇÏ´Â, µÎ °ªÀ» µ¿ÀÏÇÏ°Ô ÇØÁÖ´Â Äڵ带 ÀÛ¼ºÇÏ¸é µÈ´Ù. (¾ðÁ¦³ª ½ÇÆÐÇÏ´Â ºÎºÐÀÌ ÇÑ ±ºµ¥ ÀÓ¿¡ ÁÖÀÇÇÑ´Ù. »õ·Î¿î ±â´ÉÀ» Ãß°¡ÇÒ ¶§µµ, Å×½ºÆ® Äڵ忡 ÇØ´ç ±â´É °ü·Ã Å×½ºÆÃÀ» ¸ÕÀú Ãß°¡ÇÏ°í, ´ÙÀ½ ±× Äڵ带 ÆнºÇÏ´Â ½ÇÇà Äڵ带 ÀÛ¼ºÇϴµ¥, ¾ðÁ¦³ª ÇÑ °ÉÀ½ ¾¿ ³ª°¡¾ß ÇÑ´Ù. µ¿½Ã¿¡ µÎ°³ ÀÌ»óÀÇ ±â´ÉÀ» Ãß°¡ÇÏ°í Å×½ºÆÃÀÌ ½ÇÆÐÇÏ¸é ¾î´À °ÍÀÌ ¹®Á¦¿´´ÂÁö ã¾Æ³»´Â µ¥¿¡ ½Ã°£ÀÌ ÇãºñµÈ´Ù)
def sumFromOne(upTo): sum=0 for i in range(1,upTo+1): sum+=i return sum
ÀÌÁ¦ Å×½ºÆ® Äڵ带 µ¹¸®¸é ÆнºÇÏ´Â °ÍÀ» È®ÀÎÇÒ ¼ö ÀÖ´Ù.
ÀÌ·Î½á ¿ì¸®´Â "Áö¼ÓÀûÀ¸·Î ÄÄÇ»ÅÍ°¡ ¿ä±¸ÇÏ´Â ÇÑ°¡Áö"¸¸ ÇØ°áÇØ ÁÖ¸é¼ Àüü¹®Á¦¸¦ Á¡ÁøÀûÀ¸·Î ÇØ°áÇß´Ù. ¶Ç óÀ½ Ãâ¹ß ¶§ °¡Àå ºÐ¸íÇÏ°Ô "Àǵµ"¸¦ µå·¯³Â±â ¶§¹®¿¡ ÀÎÅÍÆäÀ̽º µðÀÚÀÎ(¿©±â¼´Â ÇÔ¼ö À̸§, ÀÎÀÚ ³»¿ë µî) µîÀÌ ±ò²ûÇÏ°í, ·ÎÁ÷µµ ºÐ¸íÇÏ´Ù.
¶Ç 100% ÆнºÇÏ´Â Å×½ºÆ® Äڵ尡 °®ÃçÁ® Àֱ⠶§¹®¿¡ °ú°¨È÷ ½ÇÇà Äڵ带 º¯°æ/°³¼±ÇÒ ¼ö ÀÖ´Ù. ¸¸¾à ÇÑ ºÎºÐÀ» °³¼±Çߴµ¥(small step is important!) ±âÁ¸¿¡ ÆнºÇÏ´ø Å×½ºÆ® ¸î °³°¡ ½ÇÆи¦ ÇÑ´Ù¸é ¹æ±Ý °íÄ£ ºÎºÐÀÌ ¹®Á¦¸¦ ¾ß±âÇÑ °ÍÀ̹ǷΠ±× ºÎºÐÀ» ´Ù½Ã ºÐ¼®ÇÑ´Ù.
ÀÌÁ¦´Â Á»ÀüÀÇ Å×½ºÆ®¸¦ 100% Åë°úÇÒ ¼ö ÀÖ´Â ¹æ¹ýÀ» »ý°¢ÇÑ´Ù. ÀÌ°ÍÀÌ ³Ê¹« º¹ÀâÇÏ´Ù¸é, ´Ù½Ã ÀÛÀº ´ÜÀ§ÀÇ Å×½ºÆ®¸¦ ¸¸µé°í, ÀÌ Å×½ºÆ®¸¦ Åë°úÇÒ ¹æ¹ýÀ» »ý°¢ÇÑ´Ù. ÁÖÀÇÁ¡Àº Çѹø¿¡ ²À ÇϳªÀÇ Å×½ºÆ®¸¸ Åë°úÇÒ °í¹ÎÀ» ÇØ¾ß ÇÑ´Ù.
¿¹¸¦ µé¾î, ºÎ»ê¿¡ °¡¾ßÇÑ´Ù¸é, ÀÚ½ÅÀÌ ºÎ»êÀÌ µµÂøÇß´Ù´Â °ÍÀ» È®ÀÎÇÒ ¼ö ÀÖ´Â °£´ÜÇÑ Å×½ºÆ®¸¦ »ý°¢ÇÑ´Ù. "ºÎ»ê¿ª"¿¡¼ ±× ±ÛÀÚ¸¦ Àд °Íó·³ ºÐ¸íÇÏ°í ´Ü¼øÇÑ °ÍÀϼö·Ï ÁÁ´Ù. ÀÌÁ¦´Â ºÎ»ê¿ª ±ÛÀÚ¸¦ Àоî¾ß ÇÏ´Â Å×½ºÆ®¸¦ Åë°úÇÒ ¹æ¹ýÀ» »ý°¢ÇÑ´Ù. °£´ÜÇÏ°Ô´Â ¼¿ï¿ª¿¡¼ ±âÂ÷¸¦ Ÿ°í ºÎ»ê¿ªÀ¸·Î °¡´Â °ÍÀÌ´Ù. ±×·¯¸é ¶Ç ´Ù½Ã, ¼¿ï¿ª¿¡¼ ±âÂ÷¸¦ ÅÀ´Ù´Â °ÍÀ» È®ÀÎÇÒ Å×½ºÆ®¸¦ »ý°¢ÇÏ°í, ¶Ç ÀÌ Å×½ºÆ®¸¦ Åë°úÇÒ ¹æ¹ýÀ» »ý°¢ÇØ ³½´Ù.
º¹ÀâÇÑ ÀÏÀϼö·Ï ÀÌ ¹®Á¦ÇØ°á¹ýÀº È¿·Â¸¦ ¹ßÈÖÇÑ´Ù.