Humble Little Ruby Book/Chap2
1. 2 ÀÌÁ¦ Äڵ带 ÂÉ°³ º¾½Ã´Ù ¶ÀÌÁ¦ ±âº»ÀûÀÎ °´Ã¼µé°ú °´Ã¼µéÀ» ´Ù·ç´Âµ¥ Á¶±Ý Àͼ÷ÇØÁ³À¸´Ï, Äڵ带 ³ª´©±â ½ÃÀÛÇÒ Â÷·ÊÀÔ´Ï´Ù. ¹°·Ð ÇÑ µ¢¾î¸®ÀÇ Å« ÄÚµå·Î ÀÀ¿ë ÇÁ·Î±×·¥À» ½ÇÇàÇÒ °ÍÀ̶ó°í´Â »ý°¢Çϼ̴ø °ÍÀº ¾Æ´Ï½Ã°ÚÁÒ! ´Ù½Ã ¾²°í ½ÍÀº Äڵ带 ¸Å¹ø ¹Ýº¹Çؼ ½á¾ß ÇÏ°í, 30000ÁÙ Àü¿¡ ½è´ø º¯¼ö¸¦ °Çµå¸®Áö´Â ¾ÊÀ»±î ³ë½ÉÃÊ»çÇϸç Äڵ带 ÀÛ¼ºÇØ¾ß ÇÑ´Ù¸é Á¤¸» ¹Ùº¸°°À» °Ì´Ï´Ù. ±×·¡¼ ¾ð¾îÀÇ ÃµÀçµé²²¼ Äڵ带 ³ª´©´Â ¸î °¡Áö ¹æ¹ýÀ» âÁ¶Çϼ̽À´Ï´Ù.
ÀÌ ¹æ¹ýµé Áß¿¡¼ °¡Àå ±âÃÊÀûÀÎ °ÍÀº ºí·ÏÀÔ´Ï´Ù. ºí·ÏÀº Äڵ带 ½ÃÀÛ°ú ³¡À» ³ªÅ¸³»´Â ¿¹¾à¾î·Î ¹®¸Æ¿¡¼ ¶¼¾î³½ ÄÚµå Á¶°¢ÀÏ »ÓÀÔ´Ï´Ù. ½ÃÀÛÀ» ³ªÅ¸³»´Â Å°¿öµå´Â ¿©±â¼ ¿¹Á¦·Î º¸¿©ÁÙ begin Å°¿öµå³ª ´ÙÀ½ Àå¿¡¼ ¹è¿ï if³ª for °°Àº °ÍµéÀÔ´Ï´Ù. ÄÚµå ºí·ÏÀ» ¸¸µå·Á¸é ºí·ÏÀÇ ½ÃÀÛÀ» ³ªÅ¸³»´Â ¸» ´ÙÀ½¿¡ ÇÊ¿äÇÑ °Í(begin Å°¿öµå¿¡¼´Â ÇÊ¿äÇÑ °ÍÀÌ ¾øÀ¸´Ï ±×³É begin¸¸ ¾²½Ã¸é µË´Ï´Ù)µéÀ» µ¡ºÙÀÌ°í ÀÌ°ÍÀ» ºí·ÏÀ¸·Î ³õÀ» ÄÚµå ¾Õ¿¡ ¾²°í ¸¶Áö¸·¿¡ end Å°¿öµå·Î ¸¶Ä¡¸é µË´Ï´Ù. ¾î¶² ºÐµéÀº ±â¾ïÇϽñ⠾î·Á¿ï °Ì´Ï´Ù. ¿¹Á¦¸¦ º¸¼¼¿ä.
begin puts "I'm in a block." puts "Still there..." puts "Stillllll in here..." puts "OK, I'm done." end begin /end ÀÚü¸¦ »ç¿ëÇÏ´Â °ÍÀº ºí·ÏÀÌ ¹®¸Æ¿¡¼ ºÐ¸®µÇ¾ú´Ù´Â °ÍÀ» ³ªÅ¸³»´Â °Í »ÓÀÌÁö¸¸, ÀÌ°ÍÀ» ´Ù¾çÇÑ ±¸¼ºÃ¼¿Í ¦ Áþ°í Àß Á¶ÇÕÇÏ¸é ´Ù¸¥ °á°ú¸¦ ³¾ ¼ö ÀÖ½À´Ï´Ù. ÀÌ Àý¿¡¼ ÀÌ·± ±¸¼ºÃ¼¿¡ ´ëÇؼ ¸¹ÀÌ ´Ù·ç°í, ³ªÁß¿¡ ºí·ÏµéÀ» ´õ È¿°úÀûÀ¸·Î ¾²´Â ¹ýÀ» ¾Ë·Áµå¸± °Å¿¡¿ä. (±×·±°Ô ÀÖ¾î¿ä. Àý ¹ÏÀ¸¼¼¿ä.)
1.1. ¸Þ¼Òµå ¶ÀÌÀüÀÇ ¿¹Á¦µé¿¡¼ Àú´Â º°·Î ¼³¸íÀ» ÇÏÁö ¾Ê°í ¿ÀÈ÷·Á ´õ ÀÚÀ¯·Ó°Ô ¸Þ¼Òµå¸¦ ½è½À´Ï´Ù. °´Ã¼¿Í º¯¼ö°¡ ÇÁ·Î±×·¡¹ÖÀÇ ¸í»ç¶ó°í ÇÑ´Ù¸é, ¸Þ¼Òµå´Â µ¿»ç¶ó°í ÇÒ ¼ö ÀÖ½À´Ï´Ù. "¹«¾ùÀ» ÇÏ´Â °Í"ÀÌ ¸Þ¼ÒµåÀÔ´Ï´Ù. Á» ´õ Àü¹®ÀûÀÎ ¸»·Î, ¸Þ¼Òµå´Â È£Ãâ¹Þ´Â ÄÚµå·Î µé¾î°¡´Â ¸Å°³º¯¼ö(ÀÎÀÚ³ª ¿É¼ÇÀ̶ó°íµµ ºÎ¸¨´Ï´Ù)¶ó´Â º¯¼ö¸¦ ÀÌ¿ëÇÏ¿© ´Ù¸¥ ÄÚµå ³»¿¡¼ È£ÃâÇÒ ¼ö ÀÖ´Â ÄÚµåÀÇ Á¶°¢ÀÔ´Ï´Ù. ÀÓÀǷΠȣÃâÇÒ ¼ö ÀÖ´Â
begin /end ºí·ÏÀ̶ó°í »ý°¢Çϼ¼¿ä. ÀÓÀǷΠȣÃâ ÇÒ ¼ö ÀÖ´Ù´Â °ÍÀº ¾ðÁ¦µçÁö ¾îµð¼µç È£ÃâÇÒ ¼ö ÀÖ´Ù´Â ¶æÀÔ´Ï´Ù. ¸ðµç ¸Þ¼Òµå È£ÃâµéÀÌ »ì°í ÀÖ´Â "¸Þ¼Òµå" ºí·Ï ¸ðÀÓ °°Àº °ÍÀº ¾ø½À´Ï´Ù. ¸Å°³º¯¼ö¿Í ±×¿Í °°Àº °ÍµéÀÌ Á» Çò±ò¸°´Ù´Â °ÍÀº ¾ËÁö¸¸, ÀÌ¹Ì ÅؽºÆ®¸¦ puts·Î º¸³»°Å³ª ¹®ÀÚ¿À» chopÀ¸·Î º¸³ÂÀ» ¶§, ¸Þ¼Òµå·Î ¸Å°³º¯¼ö¸¦ º¸³½ ÀûÀÌ ÀÖ½À´Ï´Ù! ±×·± °ÍÀ» ÇÑ´Ù°í ÇÑ Àûµµ ¾ø´Âµ¥ ÀÌ¹Ì ±×·¸°Ô ÇÏ°í ÀÖ¾ú´ø °ÍÀÔ´Ï´Ù! Àú´Â Àº±Ù½½Àû ±×·± ½ÄÀ¸·Î ³Ñ¾î°¬½À´Ï´Ù. Àú´Â ¸» ¼Ø¾¾°¡ ÁÁÀº ¹üÁËÀÚ¶ø´Ï´Ù.
[JPG image (69.83 KB)] ±×¸² 5: ¸Þ¼Òµå È£Ãâ.
Á» ´õ Àü¹®ÀûÀ¸·Î ¸»ÇÑ´Ù¸é, ·çºñ¿¡¼ ¸Þ¼Òµå¸¦ È£ÃâÇÏ´Â °ÍÀº ¸Þ¼Òµå¸¦ "È£Ãâ"ÇÏ´Â °ÍÀÌ ¾Æ´Õ´Ï´Ù. ¹°·Ð È£ÃâÇѴٴ ǥÇöÀ» ÀÚÁÖ »ç¿ëÇϱâ´Â ÇÏÁö¸¸ ¸»ÀÔ´Ï´Ù. ½ÇÁ¦·Î´Â °´Ã¼¿¡ "¾ß~ ³Ê ÀÌ ¸Þ¼Òµå ÀÖ´Ï?"¶ó´Â ¸Þ½ÃÁö¸¦ º¸³»´Â °ÍÀÔ´Ï´Ù. ¸Þ¼Òµå°¡ ÀÖÀ¸¸é ¸Þ¼Òµå°¡ ½ÇÇàµÇ°í ¸Þ¼Òµå°¡ ¾øÀ¸¸é À̸¦ °¥¸é¼ ÇÑźÇϸç,
NoMethodError ¿¹¿Ü¸¦ ´øÁø´ä´Ï´Ù. "ÁÁ±¸³ª, ÁÁ±â´Â ÇÏÁö¸¸ ¸Þ¼Òµå´Â ¹½ÇÏ·¯ Àִ°ÅÁö?" ¶ó°í ¸»¾¸ÇϽðÚÁö¿ä. ¹°·Ð, "¹«¾ð°¡¸¦ ÇÏ´Â °Í"ÀÇ ¿ëµµ·Î »ç¿ëÇÒ ¼ö ÀÖ°Ú½À´Ï´Ù¸¸, ´õ Å« ¸ñÀûÀÌ ÀÖÀ»±î¿ä? ¹°·Ð ÀÖÁö¿ä.
ÀÏ´Ü, ¸Þ¼Òµå´Â Áߺ¹µÇ´Â °ÍÀ» ¾ø¾ÖÁÝ´Ï´Ù. ¿¹¸¦ µé¾î, ¶È°°Àº 15ÁÙÂ¥¸® Äڵ带 Àüü ÇÁ·Î±×·¥¿¡¼ ¿©·¯ ¹ø »ç¿ëÇÒ »ý°¢Àε¥, °è¼Ó ¹Ýº¹Çؼ ½á ³Ö¾î¾ß ÇÑ´Ù¸é Âü ¹Ùº¸°°À» °Ì´Ï´Ù. ±×Àú ¸Þ¼Òµå¸¦ ¸¸µé¾î¼ ÇÊ¿äÇÒ ¶§¸¶´Ù È£ÃâÇÏ¸é µÇ´Â °ÍÀÌÁö¿ä. µÎ¹ø°·Î, ¸Þ¼Òµå´Â Äڵ带 ´õ Àß ³ª´ ¼ö ÀÖ°Ô ÇØ ÁÝ´Ï´Ù. 550 ÁÙÂ¥¸® ÄÚµå ÇÑ µ¢¾î¸®´Â º°·Î Àç¹Ì ¾øÀ»°Ì´Ï´Ù. (½ÉÇÏ°Ô ÀÚ½ÅÀ» ÇдëÇÏ°í Ȥ»çÇÏ°í, ¸¶Á¶È÷½ºÆ® °°Àº ¹ÌÄ£ »ç¶÷À̶ó¸é ±×·²¼öµµ ÀÖ°ÚÁö¸¸ ±×·± »ç¶÷µéÀº ¸ðµÎ ȸ°è ÀÏÀ» ÇÏ°í ÀÖÀ¸´Ï±î¿ä. Á¦ ¸»ÀÌ ¸Â³ª¿ä?) ¸Þ¼Òµå´Â °Å´ëÇÏ°í ³ÀâÇÑ ·ÎÁ÷µéÀ» ÀÛ°í ´õ °ü¸®Çϱâ ÆíÇÑ Á¶°¢À¸·Î ³ª´¯´Ï´Ù.
1.1.1. ¸Þ¼Òµå Á¤ÀÇÇϱ⠶ÀÌÁ¦ ¿©·¯ºÐÀº ÀڽŸ¸ÀÇ »Ç´ë³ª´Â ¸Þ¼Òµå¸¦ ¸¸µé ¼ö Àֱ⸦ ±â´ëÇÏ°í °¥¸ÁÇÏ°í ÀÖÀ» °Ì´Ï´Ù. ÀÌÁ¦ ´õ ÀÌ»ó ÁöüÇÒ ÇÊ¿ä°¡ ¾ø³×, ±ÞÇÑ Ä£±¸! ¹Ù·Î ¿©±â ÀÚ³×°¡ ã°í ÀÖ´ø °Ô ÀÖÀ¸´Ï.
def my_new_method(name) puts "hey, " + name + ", this is my new method..." end my_new_method('magnus') ¡æ hey, magnus, this is my new method... def¸¦ ¾²°í ¸Þ¼Òµå À̸§°ú ¸Å°³º¯¼ö¸¦ ¾²¸é µË´Ï´Ù. ¸Å°³º¯¼ö¶ó°í ÇÏ´Â °ÍÀº ±× ¸Þ¼Òµå ³»¿¡¼ ¾µ ¼ö ÀÖ°Ô ³Ñ°ÜÁÖ´Â º¯¼ö¶ó´Â °ÍÀ» ±â¾ïÇϽÃÁÒ? ´ÙÀ½ ÁÙºÎÅÍ ¸Þ¼Òµå Äڵ尡 Æ÷ÇԵǰí, end Å°¿öµå·Î ³¡ÀÌ ³³´Ï´Ù. ÀÌ°Ô ÀüºÎÀÔ´Ï´Ù. °£´ÜÇÏÁÒ?
À½, »ç½Ç ¸Þ¼Òµå´Â ±×°Ô ÀüºÎ°¡ ¾Æ´Õ´Ï´Ù. ù°·Î, ¸Þ¼Òµå À̸§Àº (¹°·Ð, °ü·Ê»ó) ¼Ò¹®ÀÚ·Î ½ÃÀÛÇÏ°í °¡´ÉÇϸé ÀüºÎ ¼Ò¹®ÀÚÀÎ °ÍÀÌ ÁÁ½À´Ï´Ù. ÀÌÀ¯´Â ·çºñ°¡ ´ë¹®ÀÚ·Î ½ÃÀÛÇÏ´Â °ÍÀº ¸Þ¼Òµå¶ó°í »ý°¢ÇÏÁö ¾Ê°í, »ó¼ö³ª Ŭ·¡½º¶ó°í »ý°¢Çϱ⠶§¹®ÀÌÁÒ. ÀÌ·¸°Ô µÈ´Ù¸é ÀÀ¿ë ÇÁ·Î±×·¥ÀÌ ÁöÀúºÐÇÏ°Ô µ¿ÀÛÇÒ ¼ö ÀÖÁÒ. °ü·Ê¿¡ ´ëÇؼ ¸»¾¸µå¸®´Â ±è¿¡ ¸»¾¸µå¸®´Â °ÍÀε¥ ¸Þ¼Òµå À̸§¿¡ ¾î¿ï¸®´Â ´Ù¸¥ °ü·ÊµéÀÌ ÀÖ½À´Ï´Ù. ¸ÕÀú, ¾î¶² ¼Ó¼º¿¡ ´ëÇؼ ¹¯´Â °ÍÀÌ¸é ¹°À½Ç¥·Î ³¡ÀÌ ³ª¾ß ÇÕ´Ï´Ù. ¿¹¸¦ µé¾î¼ ÇÁ¶û½º ±ºÀÇ ½Â¸® ¿©ºÎ¸¦ ¹¯´Â ¸Þ¼Òµå¸¦ ÀÛ¼ºÇÑ´Ù¸é French.has_military_victories?¿Í °°Àº ¸Þ¼Òµå¸¦ ÀÛ¼ºÇÒ °ÍÀÔ´Ï´Ù. ¹°·Ð ¹Ýȯ°ªÀº
false ÀÏ °ÍÀÔ´Ï´Ù. ´Ù¸¥ °ü·Ê´Â, ¸Þ¼Òµå°¡ ±×°ÍÀ» È£ÃâÇÑ °´Ã¼¸¦ ¼öÁ¤ÇÏ´Â °æ¿ì¿¡´Â ¸Þ¼Òµå À̸§ÀÌ ´À³¦Ç¥·Î ³¡³ª¾ß ÇÕ´Ï´Ù. ¿¹¸¦ µé¾î, ¸ðµç ÇöÁ¸ÇÏ´Â »çÀ̺¸±× ¼ÒÇÁÆ®¿þ¾î¸¦ ·çºñ·Î ´ëüÇÏ¿© ¸ðµç ·Îº¿ À¯¸íÀλçµéÀÌ È£È·Î¿î ·çºñ ±â¹Ý ½Ã½ºÅÛÀ¸·Î µ¿ÀÛÇÑ´Ù°í ÇսôÙ. °Ô´Ù°¡ ¾ó±¼ ÁÖ¸§À» Æì´Â ¼ºÇü¼ö¼ú±îÁö Çؼ 40»ìÀº ´õ Àþ¾îº¸ÀÌ°Ô ÇØ¾ß µÈ´Ù°í Çϸé, ±×Àú Dolly_Parton.facelift!¶ó°í ÇØ ÁÖ¸é µË´Ï´Ù. ¾Æ´Ï¸é, ³ªÀ̸¦ ÀÓÀÇÀÇ °ªÀ¸·Î ¹Ù²Ü ¼öµµ ÀÖ¾î¼ Bob_Baker.set_age!(30)À» È£ÃâÇصµ µË´Ï´Ù.
¸Þ¼Òµå¿¡ ´ëÇؼ ´ÙÀ½À¸·Î ¾Ë¾Æº¼ °ÍÀº ³Ñ°Ü¹Þ´Â ¸Å°³º¯¼ö(ÀÎÀÚ ¾Æ´Ï¸é ¹«¾ùÀÌµç °£¿¡ ¸¶Âù°¡Áö)ÀÔ´Ï´Ù. ÀÌ º¯¼öµéÀº ¸Þ¼Òµå¿¡ ³Ñ¾î°¡¼ Áö¿ª º¯¼ö°¡ µË´Ï´Ù. Áö¿ª º¯¼ö´Â Áö¿ªÀûÀÌ¾î¼ ÄÚµå(¸Þ¼Òµå) ºí·Ï ¾È¿¡¼¸¸ »ç¿ëÇÒ ¼ö ÀÖ´Â °ÍÀÔ´Ï´Ù. ÀÌ ¸»Àº ÄÚµå ºí·Ï ¾È¿¡¼ »ý¼ºµÈ º¯¼ö¿Í ¸Å°³º¯¼ö´Â ÄÚµå ºí·Ï ¹Û¿¡¼´Â »ç¿ëÇÒ ¼ö ¾ø´Ù´Â ¶æÀÔ´Ï´Ù. ¸»·Î ÀÌ°ÍÀ» ¼³¸íÇϱ⿡´Â Á¶±Ý ¾î·Á¿ì´Ï±î ¿¹Á¦¸¦ º¸µµ·Ï ÇսôÙ.
def my_method(first, second) puts first third = second puts second end my_method("yes.", "no.") ¡æ yes. ¡æ no. puts first ¡æ ! NameError: undefined local variable or method puts third ¡æ ! NameError: undefined local variable or method ¹Ýȯ°ªÀ¸·Î ¹ÝȯÇϰųª ¹Ù±ùÀ¸·Î ³Ñ°ÜÁØ °æ¿ì°¡ ¾Æ´Ï¶ó¸é ¸Å°³º¯¼ö¿Í »ý¼ºµÈ Áö¿ªº¯¼ö ¸ðµÎ ¸Þ¼Òµå ¹Û¿¡¼´Â »ç¿ëÇÒ ¼ö ¾ø´Ù´Â Á¡À» ÁÖ¸ñÇϽñ⠹ٶø´Ï´Ù. ÀÌ °³³äÀ» ½ºÄÚÇÁ(scoping)¶ó°í ÇÏ°í ·çºñ ÇÁ·Î±×·¡¹ÖÀ» ÇÏ¸é¼ ¿©·¯ ¹ø Á¢ÇÒ °ÍÀÔ´Ï´Ù. »õ·Î¿î °³³ä¿¡¼ ½ºÄÚÇÁ°¡ Áß¿äÇØÁö¸é °Á¶ÇÏ¿© ¾Ë·Áµå¸®°Ú½À´Ï´Ù. º¯¼ö´Â Àü¿ªÀûÀ¸·Î, Áö¿ªÀûÀ¸·Î, ¾Æ´Ï¸é Ŭ·¡½º ½ºÄÚÇÁ ³» µî¿¡¼ ½ºÄÚÇÁÇÏ¿© »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù. Á¶°Ç ºí·ÏÀ̳ª ¹Ýº¹ ºí·ÏÀ» Æ÷ÇÔÇÏ¿© ¾î¶² ºí·ÏÀ̵çÁö Áö¿ª º¯¼ö¸¦ µÑ ¼ö ÀÖ½À´Ï´Ù. ´Ù¸¥ Àû¿ë ¹üÀ§¿¡ ´ëÇؼ´Â ¾ÕÀ¸·Î Â÷Â÷ ¹è¿ì°Ô µÇ°ÚÁö¸¸ ¸Þ¼Òµå¿¡¼ ½ºÄÚÇÁ°¡ ¾î¶»°Ô µ¿ÀÛÇÏ´ÂÁö¸¦ Àß ±â¾ï¿¡ µÎ¼Å¾ß ÇÕ´Ï´Ù. ÁÖÀÇÇϽÃÁö ¾ÊÀ¸½Å´Ù¸é ½É°¢ÇÑ µÎÅëÀÌ ¿Ã ¼öµµ ÀÖ½À´Ï´Ù.
ÀÌÁ¦ ¸Å°³º¯¼ö°¡ ¹«¾ùÀÌ°í ¹«¾ùÀ» ÇÏ´Â °ÍÀÎÁö¸¦ ÀÌÇØÇϼÌÀ¸´Ï, ¸ÚÁø °ÍÀ» ÇØ º¾½Ã´Ù. ƯÁ¤ ¸Å°³º¯¼ö¸¦ ¿ä±¸ÇÏ°í ½ÍÁö ¾Ê´Ù¸é ¾î¶»°Ô ÇÏ¸é µÉ±î¿ä? ¾Æ´Ï¸é ¿©·¯ °³ÀÇ ¸Å°³º¯¼ö¸¦ ¹Þ°í ½ÍÀ¸½Ç °ÍÀÔ´Ï´Ù. ·çºñ¿¡¼´Â µÎ °¡Áö ¸ðµÎ °¡´ÉÇÕ´Ï´Ù. ·çºñ´Â ¸Þ¼Òµå¿¡ ¼±ÅÃÀû(optional)ÀÎ ¸Å°³º¯¼ö¸¦ Áö¿øÇÕ´Ï´Ù. ½ÇÁ¦·Î´Â ¼±ÅÃÀûÀ̶ó±âº¸´Ù´Â ±âº»°ªÀ» ÇÒ´çÇÒ ¼ö ÀÖ´Ù´Â °Í¿¡ ´õ °¡±õ½À´Ï´Ù. ¿¹¸¦ µé¾î ´ÙÀ½°ú °°½À´Ï´Ù.
def new_method(a = "This", b = "is", c = "fun") puts a + ' ' + b + ' ' + c + '.' end new_method('Rails') ¡æ Rails is fun. ÀÌ Å×Å©´ÐÀº ¸Å°³º¯¼ö³ª Áö¿ª º¯¼ö°¡ 99%ÀÇ °æ¿ì¿¡ ƯÁ¤ÇÑ °ªÀ¸·Î ¸Þ¼Òµå°¡ µ¿ÀÛÇÏ´Â °æ¿ì¶ó¸é ¸Å¿ì À¯¿ëÇÏÁö¸¸ ¸Å¹ø ±× °ªÀ» ¹Ù²Ü ¼öµµ ÀÖ½À´Ï´Ù. ±âº»°ªÀ» »ç¿ëÇÏ°í ½ÍÀ» ¶§¸¶´Ù ¸Þ¼Òµå·Î
nil °ªÀ» º¸³»¸é ¸Þ¼Òµå°¡ ÀÌ°ÍÀ» ¹Þ¾Æ¼ ÇÊ¿äÇÑ °ÍÀ» °Ë»çÇÏ¿© °É·¯³»°í, ÀÌ·¡Àú·¡ ó¸®ÇÒ ¼ö ÀÖ°ÚÁö¸¸ ÀÌ°ÍÀÌ Å¸ÀÔÀ» º¸Á¸ÇØÁÖ´Â °Íµµ ¾Æ´Ï°í º°·Î ÇÒ ÇÊ¿ä¾ø´Â ÀÏÀÔ´Ï´Ù. ±âº»°ªÀ» Á¤ÇØÁÙ ¼ö ÀÖ´Â ÀÌ·± Ư¡ ¶§¹®¿¡ ÇÊ¿äÇÑ ¸Å°³º¯¼ö¸¸ °£´ÜÈ÷ Á¤ÇÏ°í, ³ª¸ÓÁö´Â ±×´ë·Î µÑ ¼ö ÀÖ½À´Ï´Ù. ±×·¸Áö¸¸ ÀÌ Æ¯Â¡À» ¾²·Á¸é ¸Å°³º¯¼ö°¡ °°Àº ¼ø¼´ë·Î ÀÖ¾î¾ß ÇÏ°í, ¸ñ·Ï¿¡¼ ´Ù¸¥ ¸Å°³º¯¼ö¸¦ °Ç³Ê¶Ù¸é ¾È µË´Ï´Ù. ÀÚÁÖ ¸í½ÃÀûÀ¸·Î Á¤ÇÏÁö ¾ÊÀ» °ÍµéÀ» µÚÂÊ¿¡ ³õ´Â °ÍÀÌ ÁÁ°ÚÁö¿ä.
¸Å°³º¯¼ö ¸ñ·ÏÀº °¡º¯ÀûÀÏ ¼ö ÀÖ½À´Ï´Ù. ³Ñ°ÜÁØ ¸Å°³º¯¼öµé°úÀÇ °ü°è¸¦ Ãâ·ÂÇÏ´Â ´õ ÁÁÀº ¸Þ¼Òµå¸¦ ¸¸µé¸é ¸Þ¼Òµå´Â ÀÌ·¸°Ô µË´Ï´Ù.
def print_relation(relation, *names) puts "My #{relation} include: #{names.join(', ')}." end print_relation("cousins", "Morgan", "Miles", "Lindsey") ¡æ My cousins include: Morgan, Miles, Lindsey. ¸ñ·Ï¿¡´Â ¸î¸íÀÌ ¿Àµç °£¿¡ À̸§À» ³ÖÀ» ¼ö ÀÖ½À´Ï´Ù. ¸¶Áö¸· ¸Å°³º¯¼öÀÇ ½Äº°ÀÚ ¾Õ¿¡ º°Ç¥(*) ¹®ÀÚ¸¦ ³õÀ¸¸é °¡º¯ ±æÀÌ ¸ñ·ÏÀ¸·Î ¹Ù²Ü ¼ö ÀÖ½À´Ï´Ù. ½ÇÁ¦·Î´Â °´Ã¼¿¡¼ ¹è¿ÀÌ »ý¼ºµÈ °ÍÀε¥, ±×·¸±â ¶§¹®¿¡ join ¸Þ¼Òµå¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Â °ÍÀÔ´Ï´Ù. ÀÌ Å×Å©´ÐÀº °´Ã¼ÀÇ ¸ñ·ÏÀ» ´Ù·ç°Å³ª ¸Þ¼ÒµåÀÇ À¯¿¬¼ºÀ» ÃÖ´ëÈÇÒ ¶§ À¯¿ëÇÕ´Ï´Ù. ¿¹¸¦µé¾î ¸Þ¼Òµå¸¦ ¿©·¯ ¹ø È£ÃâÇϱ⺸´Ù Çϳª ÀÌ»óÀÇ °´Ã¼µéÀº Çѹø¿¡ ³Ñ°Ü È£ÃâÇÏ´Â °æ¿ì¿¡µµ À¯¿ëÇÕ´Ï´Ù.
1.1.2. ¸Þ¼Òµå »ç¿ëÇϱ⠶ÀÌÁ¦ ¾î¶»°Ô ¸Þ¼Òµå¸¦ ¸¸µå´ÂÁö ¹è¿üÀ¸´Ï, ¾î¶»°Ô ÇÏ¸é ´õ È¿°úÀûÀ¸·Î »ç¿ëÇÏ´ÂÁö¸¦ ¾Ë°í ½ÍÀ» °ÍÀÔ´Ï´Ù. ÀÌÀü ÄÚµå ¿¹Á¦¿¡¼ º¸¾ÒµíÀÌ ¸Þ¼Òµå È£ÃâÀº ¸Þ¼Òµå À̸§¿¡ ¸Å°³º¯¼ö°¡ ÀÖ´Ù¸é ¸Å°³º¯¼ö¸¦ ºÙ¿©¼ È£ÃâÇÏ¸é µÉ ¸¸Å °£´ÜÇÑ °ÍÀÔ´Ï´Ù. ¸Þ¼Òµå È£ÃâÀÇ Çü½ÄÀº ¿©·¯°¡Áö°¡ ÀÖ½À´Ï´Ù. ¾î¶² °æ¿ì¿¡ ¸Þ¼Òµå´Â ¸Å°³º¯¼ö¸¦ ¹ÞÁö ¾Ê±â ¶§¹®¿¡ ¸Å°³º¯¼ö¿Í ±×°ÍÀ» µÑ·¯½Î´Â °ýÈ£°¡ ÇÊ¿ä¾ø½À´Ï´Ù. ¿©·¯ °æ¿ì¿¡ °ýÈ£ ¾øÀÌ ¸Þ¼Òµå¸¦ È£ÃâÇÒ ¼ö ÀÖÁö¸¸ º°·Î ÁÁÀº ¹æ¹ýÀÌ ¾Æ´Õ´Ï´Ù. ¸Å°³º¯¼ö Çϳª¸¸À» È£ÃâÇÏ´Â °æ¿ì°¡ ¾Æ´Ï¶ó¸é µÎ ±ÛÀÚ ´õ ÃÄ ³Ö´Â °Í ¶§¹®¿¡ °¡µ¶¼ºÀ» ÇìÄ£´Ù¸é ¹Ùº¸°°Àº ÁþÀÌ°ÚÁÒ. ¿¹Á¦¸¦ º¸°Ú½À´Ï´Ù.
puts "Look ma! No parentheses!" puts("Look ma! No parentheses!") puts puts() ¸ðµÎ ¿Ã¹Ù¸£°Ô puts¸¦ È£ÃâÇÑ °ÍÀÔ´Ï´Ù. óÀ½ µÎ ¿¹Á¦´Â °ýÈ£°¡ Çʼö°¡ ¾Æ´Ï¶ó´Â °ÍÀ» º¸¿©ÁÝ´Ï´Ù. ±× ´ÙÀ½ ¿¹Á¦´Â ¸Þ¼Òµå¿¡ ¸Å°³º¯¼ö°¡ ¾øÀ» ¼öµµ ÀÖ´Ù´Â °ÍÀ» º¸¿©ÁÝ´Ï´Ù. ´ëºÎºÐÀÇ ¸Þ¼Òµå´Â ¸Å°³º¯¼ö°¡ ÇÊ¿äÇÏ°í Á¦´ë·ÎµÈ °³¼öÀÇ ¸Å°³º¯¼ö¸¦ ¹ÞÁö ¸øÇϸé
ArgumentError ¸¦ ´øÁú °ÍÀÔ´Ï´Ù.
¸Þ¼Òµå¶õ °Í ´ë´ÜÇÏÁö ¾Ê³ª¿ä? ±×·¯³ª ±×°ÍÀ¸·Î ¹«¾ùÀ» ÇÏ´Â °ÍÀÌÁÒ? º¯¼öµéÀÌ ±× ¾È¿¡¼ »ç¿ëµÇ°í ¹Ù±ùÀ¸·Î ³ª¿À¸é ¾µ¸ð¾ø¾îÁö´Âµ¥ ¸»ÀÔ´Ï´Ù. ¿©±â¼ ¸Þ¼ÒµåÀÇ ¹Ýȯ°ªÀÌ µîÀåÇÏ°Ô µË´Ï´Ù. ¸Þ¼Òµå´Â Çϳª ÀÌ»óÀÇ °ªÀ» ¹Û¿¡¼ »ç¿ëÇÒ ¼ö ÀÖµµ·Ï ¸Þ¼Òµå ¾È¿¡¼ ¹ÝȯÇÕ´Ï´Ù. ¸Þ¼Òµå´Â Ç×»ó °ªÀ» ¹ÝȯÇϴµ¥ ¸í½ÃÀûÀ¸·Î °áÁ¤µÇÁö ¾Ê¾ÒÀ¸¸é
nil À» ¹Ýȯ(¸Þ¼Òµå°¡ Á¤ÀǵǾúÀ» ¶§¿¡µµ ·çºñ´Â nil À» ¹ÝȯÇÏÁÒ)Çϰųª ¸Þ¼Òµå ¾È¿¡¼ ¾²ÀÎ ¸¶Áö¸· °ªÀ» ¹ÝȯÇÕ´Ï´Ù. ¿¹¸¦ µé¾î
def return_me(value) scoped_value = value end def echo_me(value) value end def multi_return return 'more', 'than', 'one' end my_value = return_me('this is fun!') puts my_value ¡æ this is fun! one, two, three = multi_return puts one + three ¡æ more one ¸Þ¼Òµå ¾È¿¡ ¹Ýȯ°ªÀÌ ¾øÀ» °æ¿ì¿¡´Â ¸Þ¼Òµå¿¡¼ »ç¿ëÇÑ ¸¶Áö¸· °ªÀÌ ¹ÝȯµÈ´Ù. °ªÀº ù ¹ø° ¿¹Á¦Ã³·³ º¯¼ö°¡ µÉ ¼öµµ ÀÖ°í, »ý¼ºµÈ °´Ã¼°¡ µÉ ¼öµµ ÀÖ°í(¹®ÀÚ¿ Ç¥Çö ±× ÀÚü¸¦ ÇÑ ÁÙ¿¡ ³ÖÀ¸¸é ¹®ÀÚ¿ °´Ã¼°¡ »ý¼ºµÈ´Ù) µÎ ¹ø° ¿¹Á¦Ã³·³ ¸Þ¼ÒµåÀÇ ¸¶Áö¸· ÁÙ¿¡¼ ÂüÁ¶ÇÏ´Â ¾î¶² °´Ã¼µçÁö µÉ ¼ö ÀÖ´Ù. µû¶ó¼ ù ¹ø° ¿¹Á¦Ã³·³, ¹ÝȯÇÏ°í ½ÍÀº °ªÀ» ¸¶Áö¸· °ªÀ¸·Î ÇÏ¸é ¹Ýȯ ¸í·ÉÀ̳ª ¸¶Áö¸· ÂüÁ¶°¡ ²À ÇÊ¿äÇÑ °ÍÀº ¾Æ´Ï´Ù. ÀÌ·± °æ¿ì°¡ ¾Æ´Ï¶ó¸é µÎ ¹ø° ¿¹Á¦¿¡¼´Â °ªÀ» ¹ÝȯÇÏ´Â ¹æ¹ý Áß ¸¶Áö¸· ÁÙÀÇ ÂüÁ¶°ªÀ» ÀÌ¿ëÇÏ´Â °ÍÀÌ°í, ¸¶Áö¸· ¿¹Á¦´Â ¹Ýȯ ¹®ÀÇ »ç¿ë¹ýÀ» º¸¿©ÁÖ°í ÀÖ´Ù. ¸¶Áö¸· ¿¹Á¦´Â (º¯¼ö ´ëÀÔ¿¡ ´ëÇÏ¿© ¾Ë¾Æº¸¾Ò´ø Àý¿¡¼ ¹è¿üµíÀÌ) ¸Þ¼Òµå ¹Ýȯ½Ã¿¡ ¹Ýȯ¹®°ú ÇÔ²² º´·ÄÀûÀ¸·Î º¯¼ö¿¡ °ªÀ» ´ëÀÔÇÏ´Â °ÍÀ» º¸¿©ÁØ´Ù. ´ëÀÔ¹®ÀÇ ÁÂÇ׿¡¼ ¸ðÀº ¹è¿À» °£´ÜÈ÷ ³õÀ» ¼ö Àֱ⠶§¹®¿¡ ¹è¿¿¡ °ªÀ» ³õ´Âµ¥¿¡µµ ÀÌ ¹æ¹ýÀ» ÀÌ¿ëÇÒ ¼ö ÀÖ´Ù.
1.2. ºí·Ï°ú Proc °´Ã¼ ¶ÀÌ ÀåÀÇ Àü¹ÝºÎ¿¡¼ ºí·Ï¿¡ ´ëÇؼ ¾Ë¾Æº¸¾ÒÁö¸¸, ÀÌÁ¦ ´õ ±íÀÌ ¾Ë¾Æº¸·Á°í ÇÕ´Ï´Ù. ºí·ÏÀº ·çºñ¿¡¼ ¾ÆÁÖ °·ÂÇÑ °³³äÀÔ´Ï´Ù. ±×·¯³ª »õ·Î ¹è¿ì´Â »ç¶÷¿¡°Ô´Â È¥¶õ½º·¯¿ï ¼öµµ Àֱ⠶§¹®¿¡ ¾à°£ÀÇ ³íÀÇ°¡ ÇÊ¿äÇÕ´Ï´Ù. ·çºñ¿¡¼ ºí·ÏÀº ¹®¸Æ»óÀ¸·Î ½ÇÇàÇÒ ÇÊ¿ä°¡ ÀÖ´Â ·çºñ Äڵ带 ´ã°í ÀÖ´Â °´Ã¼ÀÔ´Ï´Ù. ÄÚµå ºí·ÏÀÌ °´Ã¼¶ó´Â °ÍÀÌ ÀÌÇØ°¡ µÇÁö ¾Ê°ÚÁö¸¸ ·çºñ¿¡ ÀÖ´Â ¸ðµç °ÍÀº °´Ã¼¶ó´Â »ç½ÇÀ» ±â¾ïÇØ ÁÖ¼¼¿ä.
1.2.1. ºí·Ï ±âÃÊ ¶ÀÌÀü¿¡ ºí·ÏÀº °£´ÜÈ÷
do /end ±¸Á¶·Î µÑ·¯½ÎÀÎ ÄÚµå¶ó°í ÇßÁö¸¸, ´ÜÁö ±×°Í »ÓÀÎ °ÍÀº ¾Æ´Õ´Ï´Ù. ºí·ÏÀº ¿©·¯ °¡Áö ¹æ¹ýÀ¸·Î ±¸¼ºÇÒ ¼ö ÀÖÀ¸¸ç ±×·¸°Ô ÇÔÀ¸·Î½á Äڵ带 ´ã°í ÀÖ´Â °´Ã¼¸¦ »ý¼ºÇÏ¿© ¸Þ¼Òµå·Î ³Ñ°ÜÁְųª º¯¼ö¿¡ ´ã¾ÆµÑ ¼ö ÀÖ½À´Ï´Ù. °£´ÜÈ÷ ¸»Çؼ, ·çºñ ÄÚµå ºí·ÏÀº À̸§ÀÌ ºÙ¾îÀÖÁö ¾ÊÀº ¸Þ¼Òµå¿Í ºñ½ÁÇÕ´Ï´Ù. ¾Æ¸¶µµ CÀÇ ÇÔ¼ö Æ÷ÀÎÅͳª C++ÀÇ ÇÔ¼ö °´Ã¼, ÆÄÀ̽ãÀÇ ¶÷´Ù¿Í ¸®½ºÆ® ÇÔÃà, ÆÞÀÇ À͸í ÇÔ¼ö, ÀÚ¹ÙÀÇ ÀÍ¸í ³»ºÎ ÇÔ¼ö, ȤÀº Á» ´õ °¡±î¿î ¿¹·Î ½º¸ôÅäÅ©³ª ¸®½ºÇÁÀÇ ºí·Ï°ú ¸Å¿ì ºñ½ÁÇÏ´Ù°í »ý°¢ÇÏ½Ã¸é ´õ ÀÌÇØ°¡ ½¬¿ï ¼öµµ ÀÖ½À´Ï´Ù. ¹æ±Ý ¿¹·Î µç ¾ð¾îµé Áß¿¡¼ »ç¿ëÇØ º¸½Å ¾ð¾î°¡ ÀÖÀ¸½Ã°Ç Àͼ÷ÇÑ °ÍÀÌ ¾øÀ¸½Ã°Ç °£¿¡ ÀÌ°ÍÀº ÀÌ»óÇÑ ÀÏÀÌ ¾Æ´Õ´Ï´Ù. º¸Åë ¾ð¾î Àü¹®°¡°¡ ¾Æ´Ï°í¼´Â »ý¼ÒÇÑ °³³äÀÔ´Ï´Ù. ¿î ÁÁ°Ôµµ, ¾î¶² ¾ð¾î¿¡¼µçÁö ¾ÆÁÖ Áß¿äÇÑ ÀÌ °³³äÀ» Á¦°¡ °¡¸£Ãĵ帮°Ú´Ù´Â °Ì´Ï´Ù! ±×¸®°í ±×°É ±»ÀÌ ¾È ¹è¿ì½Ã°Ú´Ù°í ÇϽôõ¶óµµ ¾ÈŸ±õÁö¸¸ ÀÌ°Í ¾øÀÌ´Â ·çºñ Äڵ带 ÀÛ¼ºÇÏ½Ç ¼ö°¡ ¾ø½À´Ï´Ù.
ºí·ÏÀÇ °£´ÜÇÑ »ç¿ë¹ýÀÎ ¸Þ¼Òµå ¸Å°³º¯¼ö¸¦ Çѹø º¸°Ú½À´Ï´Ù. ¸¹Àº ¸Þ¼ÒµåµéÀÌ ºí·ÏÀ» ¸Å°³º¯¼ö·Î ¹Þ´Âµ¥ ±× Áß¿¡ Çϳª¸¦ Áö±Ý º¾½Ã´Ù.
myarray = %w{one two three four} myarray.each {|element| print "[" + element + "]... " } ¡æ [one]... [two]... [three]... [four]... ÀÌ ÄÚµå Á¶°¢Àº °£´ÜÈ÷
each ¸Þ¼Òµå¸¦ »ç¿ëÇÏ¿© ¹è¿À» ¹Ýº¹½ÃÅ°°í °¢ ¿ø¼ÒµéÀ» ÄÚµå ºí·ÏÀ¸·Î ³Ñ°ÜÁÝ´Ï´Ù. ÄÚµå ºí·ÏÀº ¹è¿ÀÇ ¿ø¼Ò¸¦ ÀÎÀÚ·Î Ãë±ÞÇÏ°í ¸Þ¼Òµå ÀÎÀÚ°¡ µÈ °Í °°Àº È¿°ú¸¦ ÁÝ´Ï´Ù. ¿©±â¼´Â ÄÚµå ºí·ÏÀ» Áß°ýÈ£¸¦ ÀÌ¿ëÇÏ¿© ±¸¼ºÇÏ¿´½À´Ï´Ù. ÀÌ°ÍÀº do /end Á¶ÇÕÀ» »ç¿ëÇÏ´Â °Í ÀÌ¿Ü¿¡ ÄÚµå ºí·ÏÀ» Çü¼ºÇÏ´Â ¹æ¹ýÀÔ´Ï´Ù. ºñ·Ï each ¸Þ¼Òµå¸¦ »ç¿ëÇÏ¿© ÄÚµå ºí·ÏÀ» ¿¬ °Íó·³ º¸ÀÌÁö¸¸ ½ÇÁ¦·Î´Â ÄÚµå ºí·ÏÀ» ¸Å°³º¯¼öÈÇÏ¿© each ¸Þ¼Òµå¿¡ ³Ñ°ÜÁØ °ÍÀÔ´Ï´Ù. ¹«½¼ ¶æÀÎÁö ÀÌÇØÇÏÁö ¸øÇϽðÚÀ¸¸é ¾Æ¸¶µµ ´ÙÀ½ ¿¹Á¦¸¦ »ìÆ캸½Ã¸é ¸íÈ®È÷ ¾Æ½Ç ¼ö ÀÖÀ¸½Ç °ÍÀÔ´Ï´Ù. ÀÌ¹Ì °³³äÀ» ÀâÀ¸¼Ì´Ù¸é ´ÙÀ½ ¹®´ÜÀ¸·Î ³Ñ¾î°¡¼¼¿ä. ¶È°°Àº ¸»À» ¹Ýº¹ÇÏ´Â °ÍÀ̴ϱî¿ä.
´ÙÀ½ ÄÚµå ÁÙÀ» ¶¼¾î³õ°í °¢°¢ÀÇ È£Ã⠺κÐÀ» ºÐ¸®ÇÏ¿© º¸°Ú½À´Ï´Ù.
myarray.each {|element| print "[" + element + "]... " } ¸ÕÀú ¹è¿ °´Ã¼ÀÎ
myarray ÀÇ each ¸Þ¼Òµå È£ÃâÇÕ´Ï´Ù. ¸Þ¼Òµå´Â ºí·ÏÀ» ÀÎÀÚ·Î Ãë±ÞÇÕ´Ï´Ù. ´Ù½Ã ¸»ÇÏ¸é ½ÇÇàÇÏ·Á°í ÇÏ´Â ÄÚµå ºí·ÏÀ» ¸Å°³º¯¼ö·Î ¹Þ½À´Ï´Ù. ÀÌ ºí·ÏÀº ÀÌÀü¿¡ º¸¾Ò´ø begin /end ºí·Ï°ú ¸Å¿ì À¯»çÇÕ´Ï´Ù. ¿øÇÑ´Ù¸é, ´ÙÀ½°ú °°Àº ÄÚµå·Î ´Ù½Ã ¾µ ¼öµµ ÀÖ½À´Ï´Ù.
myarray.each do |element| print "[" + element + "]... " end °£´ÜÈ÷ Áß°ýÈ£°¡
do /end ·Î ´ëüµÇ¾ú´Ù´Â Á¡¿¡ ÁÖÀÇÇϽʽÿÀ. µÎ °¡Áö Ç¥Çö ¹æ½Ä ¸ðµÎ °°Àº ÀÏÀ» ÇÏÁö¸¸ ÇÑ µÎÁÙÂ¥¸® Äڵ忡¼´Â Áß°ýÈ£ Ç¥Çö ¹æ½ÄÀÌ ´õ °£°áÇÏ°í ÀÌÇØÇϱ⠽±½À´Ï´Ù. ³ªÁß¿¡ ¿©·¯ºÐ²²¼ ÀÛ¼ºÇϽŠ¸Þ¼Òµå¿¡¼ ºí·ÏÀ» ÀÌ¿ëÇÏ´Â ¹æ¹ýÀ» ¹è¿ï ¶§ ³íÀÇÇØ º¼ ÀÌ·¯ÇÑ ¸Þ¼ÒµåÀÇ °üÁ¡¿¡¼ ÄÚµå´Â ·çºñ°¡ ºí·ÏÀÇ ¸Å°³º¯¼ö¸¦ ³Ñ°ÜÁÖ°í ±× ºí·ÏÀ» ½ÇÇàÇÏ°Ô ÇÕ´Ï´Ù. ·çºñ°¡ ÀÌ·¸°Ô ÇÏ°í ºí·ÏÀÇ °ªÀÌ ÀÖ´Ù¸é ºí·ÏÀÇ °ªÀ» ¹ÝȯÇÏ°í ´õ Á¤È®ÇÏ°Ô´Â ¸Þ¼ÒµåÀÇ °ªÀ» ¹ÝȯÇÕ´Ï´Ù. °³³äÀ» ¹Ù·ÎÀâ±â À§ÇÏ¿© Á¦¾î È帧À» ±×¸²À¸·Î Ç¥ÇöÇØ º¾½Ã´Ù.
¾ÆÁ÷±îÁö ÀÌÇØÇϽÃÁö ¸øÇϽôõ¶óµµ ÀÌÇØÇÏ¼Å¾ß ÇÕ´Ï´Ù. ºÎ·Ï AÀÇ ¹®¼È Àý¿¡ ÀÖ´Â ¸µÅ©¸¦ ¹æ¹®ÇØ º¸½Ã°í, ±¸±ÛÀ» ã¾Æº¸½Ã°í, ºÎ·Ï AÀÇ ·çºñ ¾ð¾î Àý¿¡ ¸ð¾Æ³õÀº ºí·Î±×¸¦ ¹æ¹®ÇØ º¸¼¼¿ä. Á¦°¡ ¿©·¯ºÐÀ» ÀÌÇؽÃÅ°Áö ¸øÇß´Ù°í ÇÏ´õ¶óµµ ´©±º°¡, ¾îµð¼±°¡ ¿©·¯ºÐÀÌ ÀÌÇØÇÏ½Ç ¼ö ÀÖ´Â ¹æ¹ýÀ¸·Î ÀÌ °³³äÀ» ¼³¸íÇØ ³õ¾ÒÀ» °ÍÀÔ´Ï´Ù. Àú´Â ÀÌ°ÍÀÌ ·çºñ¿¡¼ ¾ÆÁÖ ¸ÚÁö°í, À¯¿ëÇÏ°í °·ÂÇÏ°í ÇʼöÀûÀÎ °³³äÀÌ ¾Æ´Ï¾ú´Ù¸é ÀÌ °³³äÀ» ¿Ïº®È÷ ÀÌÇØÇÏÁö ¾Ê¾ÒÀ» °ÍÀÔ´Ï´Ù. Á¤¸» ºí·ÏÀ» ÀÌÇØÇϼ̴ٸé ÀÌÁ¦ ¿©·¯ºÐ²²¼ ÀÛ¼ºÇϽŠÄڵ忡¼ ÀÌ°ÍÀ» »ç¿ëÇÏ´Â ¹æ¹ýÀ» ¹è¿öº¾½Ã´Ù.
1.2.2. Proc°ú ºí·Ï ¶Proc °´Ã¼´Â ºí·ÏÀÌ º¯¼ö¿¡ ´ã°ÜÁø ÇüŶó°í »ý°¢Çϼ¼¿ä. µÑÀÇ Â÷ÀÌÁ¡ÀÌ ÀÖÁö¸¸ ¾ÆÁ÷±îÁö´Â ²À ¾Ë¾Æ¾ß ÇÒ Á¤µµ·Î Áß¿äÇÑ ³»¿ëÀº ¾Æ´Õ´Ï´Ù. ±×¸®°í ¶§°¡ µÇ¸é ¾Ë°Ô µÇ°ÚÁö¿ä. °¡Àå ±Ùº»ÀûÀÎ Â÷ÀÌÁ¡Àº ¼º´ÉÀÌÁö¸¸ ÀÌ°ÍÀº ³¡³¯ ¶§ ³íÀÇÇÏ°Ú½À´Ï´Ù.
Proc °´Ã¼´Â °£´ÜÈ÷ ¸»Çؼ ½ÇÇà°¡´ÉÇÑ ÄÚµå ºí·ÏÀ» ´ã°í ÀÖ´Â Proc Ŭ·¡½ºÀÇ °´Ã¼ÀÔ´Ï´Ù.
myproc = Proc.new {|animal| puts "I love #{animal}!"} myproc.call("pandas") ¡æ I love pandas! º¸½Ã´Ù½ÃÇÇ
Proc Àº »ý¼ºÀÚ°¡ È£ÃâµÉ ¶§ »ý¼ºµÇ°í ¸Å°³º¯¼ö·Î ºí·ÏÀ» ¹Þ½À´Ï´Ù. ºí·Ï¿¡ ÀÖ´Â ÄÚµå´Â Proc ÀÇ ÀνºÅϽº ³»¿¡ ¼û¾î¹ö¸®°í ¾ðÁ¦µçÁö È£ÃâÇÒ ¼ö ÀÖ°Ô µË´Ï´Ù. Proc °´Ã¼´Â ÄÚµå ºí·ÏÀ» »ý¼ºÇÏ°í ±×°ÍÀ» ³Ñ°ÜÁְųª ±×°ÍÀ¸·ÎºÎÅÍ »õ·Î¿î ºí·ÏÀ» »ý¼ºÇÒ ¶§ ƯÈ÷ À¯¿ëÇÕ´Ï´Ù. Proc °´Ã¼ ³»ÀÇ Äڵ带 È£ÃâÇÏ·Á¸é call ¸Þ¼Òµå¸¦ È£ÃâÇÏ¸é µÇ°í, ÀÌ ¸Þ¼Òµå°¡ ÀÌÀü¿¡ ³Ñ°ÜÁÖ¾ú´ø ºí·ÏÀÇ ³»ºÎ¿¡ ÀÖ´Â Äڵ带 È£ÃâÇÏ°Ô µË´Ï´Ù. ¿¹¸¦ µé¾î, Å« ÅÚ·¹ºñÀü ¹æ¼Û±¹ÀÌ »õ·Î¿î ¼î ÇÁ·Î±×·¥ ¿¹Á¤Ç¥¿¡ È£½ºÆ®¿Í ÇÔ²² ȸ鿡 º¸¿©ÁÖ´Â ·çºñ ½ºÅ©¸³Æ®¸¦ ÀÛ¼ºÇÏ´Â ÀÏÀ» ¸Ã°å´Ù°í ÇսôÙ. ¹êÁ¶ ºôÀÇ ºê¸´Áö ºê¸®°ÔÀ̵å, ¶óÆÄ¿¤ ¶ó¹Ì·¹½º ·Îµå¸®°Ô½º µå ¿¹¼öÀÇ ÄíÄ¡³ª ÀÌÅ»¸®¾Æ³ª¿Í ÆÒ´õ!¸ð´Ï¿ò°ú °°Àº ¼î ÇÁ·Î±×·¥µé ¸»ÀÌÁÒ. ¿©·¯ºÐÀº ±×Àú ÅؽºÆ®¸¦ Äֿܼ¡ Ç¥½ÃÇÏ°í, ¹æ¼Û±¹ÀÇ È·ÁÇÑ ±×·¡ÇÈ ¹é¿£µå°¡ ³ª¸ÓÁö¸¦ ¸ðµÎ ´Ù ÇÒ °Ì´Ï´Ù. ³×, ±×·¸½À´Ï´Ù. ¹æ¼Û±¹ÀÇ ±â¼úÀÌ ±× Á¤µµ·Î ´ë´ÜÇÑ °ÍÀÌÁÒ. À¯ÀÏÇÑ ¹®Á¦Á¡Àº È£½ºÆ®°¡ ³Ê¹« ÀÚÁÖ ¹Ù²ï´Ù´Â °ÍÀÔ´Ï´Ù. ¿¹¸¦ µé¾î ¶óÆÄ¿¤¾¾°¡ °©Àڱ⠼î Áß°£ Âë¿¡ ÄíÄ¡³ª ÀÌÅ»¸®¾Æ³ªÀÇ ÁÖ¹æÀåÀ» ȣġ¹Î¾¾·Î ±³Ã¼Çß´Ù°í ÇսôÙ. ¼î À̸§°ú È£½ºÆ® À̸§À» µû·Î Á¤ÇÏ¿© È£½ºÆ® À̸§À» ¹æ¼Û Áß¿¡ ¹Ù²Ü ¼ö ÀÖ¾î¾ß ÇÕ´Ï´Ù. "ºí·ÏÀ» ÀÌ¿ëÇÏ¸é µÇ°Ú±º!"À̶ó°í ¸»¾¸ÇϽðÚÁö¿ä.
def make_show_name(show) Proc.new {|host| show + " with " + host} end show1 = make_show_name("Practical Cannibalism") show2 = make_show_name("Cotillions in the Amazon") show1.call("H. Annabellector") ¡æ Practical Cannibalism with H. Annabellector show2.call("Jack Hannah") ¡æ Cotillions in the Amazon with Jack Hannah show1.call("Kirstie Alley") ¡æ Practical Cannibalism with Kirstie Alley ÀÌÀü¿¡ º» ´ë·Î ÀÌ°ÍÀº ÀüÇüÀûÀÎ
Proc È£ÃâÀÌÁö¸¸, ¿©±â ¹º°¡ ÁøÇàµÇ°í ÀÖ´Â °Í¿¡ ÁÖ¸ñÇϽʽÿÀ. Proc ÀÌ »ý¼ºµÉ ¶§ ¼î ÇÁ·Î±×·¥ÀÇ À̸§À» ³Ñ°ÜÁÖ°í, ±× ´ÙÀ½ºÎÅÍ´Â ÀÌ°Í¿¡ ´ëÇÏ¿© ¾ð±ÞÇÏÁö ¾Ê¾Ò½À´Ï´Ù. ¾î¶»°Ô ÀÌ°ÍÀÌ °¡´ÉÇÒ±î¿ä? make_show_name ¸Þ¼Òµå·Î ³Ñ¾î°£ ¼î ¸Å°³º¯¼ö°¡ ¸Þ¼Òµå°¡ ³¡³ª¼ ½ºÄÚÇÁ ¹ÛÀ¸·Î ³ª°¡¸é¼ Á¦°ÅµÇ¾î¾ß ÇÒ °ÍÀε¥ ¸»ÀÌÁÒ. ¾Æ, ÇÏÁö¸¸ ÀÌ°ÍÀÌ Proc °´Ã¼ÀÇ ¾Æ¸§´Ù¿î Á¡ÀÔ´Ï´Ù. »ý¼ºµÇ¾úÀ» ´ç½ÃÀÇ ¹®¸ÆÀ» º¸Á¸ÇÏ°í Ç×»ó ÀÌ°Í¿¡ Á¢±ÙÇÒ ¼ö ÀÖ½À´Ï´Ù. ÀÌ°ÍÀÌ ¿ì¸®°¡ º°´Ù¸¥ ³ë·ÂÀ» ±â¿ïÀÌÁö ¾Ê¾Ò´Âµ¥µµ ¼î ÇÁ·Î±×·¥ÀÌ À̸§ÀÌ º¸Á¸µÇ´Â ÀÌÀ¯ÀÔ´Ï´Ù.
Proc °´Ã¼¸¦ »ý¼ºÇÏ´Â ´Ù¸¥ ¹æ¹ýÀº ÄÚµå ºí·ÏÀ» ¶÷´Ù(lambda ) ¸Þ¼Òµå¸¦ ÀÌ¿ëÇÏ¿© ¹´Â °ÍÀÔ´Ï´Ù. ÀÌ ¸Þ¼Òµå¸¦ È£ÃâÇÏ´Â °ÍÀº Proc.new ¸¦ È£ÃâÇÏ´Â °Í°ú µ¿ÀÏÇÕ´Ï´Ù.
myproc = lambda {|x| puts "Argument: #{x}"} myproc.call("Texas forever!") ¡æ Argument: Texas forever! lambda ÇÔ¼ö°¡ ¸¶Ä¡ Proc.new ó·³ ÄÚµå ºí·ÏÀ» ¹Þ¾Æ¼ Proc ¿¡ ¹´Â °ÍÀ» º¸°í °è½Ê´Ï´Ù. À§ÀÇ ¿¹Á¦¸¸À¸·Î´Â ¼·Î ´Ù¸¥Á¡À» ¾Ë ¼ö ¾ø½À´Ï´Ù. ù°·Î lambda ·Î »ý¼ºµÈ Proc °´Ã¼´Â Proc.new ·Î »ý¼ºµÈ °Íº¸´Ù ÀÎÀÚÀÇ °Ë»ç°¡ ´õ ¾ö°ÝÇÏ´Ù´Â Â÷ÀÌÁ¡ÀÌ ÀÖ½À´Ï´Ù.
lproc = lambda {|a,b| puts "#{a + b} <- the sum"} nproc = Proc.new {|a,b| puts "#{a + b} <- the sum"} nproc.call(1, 2, 3) ¡æ 3 lproc.call(1, 2, 3) ¡æ !ArgumentError (wrong number of arguments (3 for 2)) Proc.new ·Î »ý¼ºµÈ Proc °´Ã¼´Â ³Ê¹« ¸¹Àº ÀÎÀÚ¸¦ ³Ñ°ÜÁÙ °æ¿ì¿¡µµ Àß µ¿ÀÛÇÕ´Ï´Ù¸¸ ³ªÄ¡ °°Àº lambda Proc ÀÇ ÀÎÀÚ °Ë»ç´Â ArgumentError ¿¹¿Ü¸¦ ´øÁý´Ï´Ù. Âü ´ä´äÇϳ׿ä. ´ÜÁö ³Ê¹« ¸¹Àº ÀÎÀÚ¸¦ ³Ñ°ÜÁÖ¾ú´Ù°í Çؼ Àüü ÀÀ¿ë ÇÁ·Î±×·¥ÀÌ ¸ØÃß´Ù´Ï¿ä. ÁÁÁö ¾ÊÀºµ¥¿ä. ¾î·µç µÑÀÌ ±¸º°µÇ´Â Á¡Àº ¿©·¯ºÐÀÇ ÀÀ¿ë ÇÁ·Î±×·¥ÀÇ È帧À» Á¦¾îÇÏ´Â ¹æ¹ý¿¡ ÀÖ½À´Ï´Ù. lambda ·Î »ý¼ºµÈ °´Ã¼´Â °ªÀ» ¹ÝȯÇÒ ¶§ ºí·Ï ¹Ù±ùÀÇ È帧¿¡´Â ¿µÇâÀ» ÁÖÁö ¾Ê½À´Ï´Ù. ¹Ý¸é¿¡, Proc.new ·Î »ý¼ºµÈ Proc °´Ã¼´Â °ªÀ» ¹ÝȯÇÒ ¶§ ¹Ù±ù¿¡ ÀÖ´Â ¸Þ¼Òµå°¡ Á¾·áµÇ°Ô µË´Ï´Ù.
def procnew new_proc = Proc.new { return "I got here..." } new_proc.call return "...but not here." end def lambdaproc new_proc = lambda { return "You get here..." } new_proc.call return "And I got here!" end puts lambdaproc ¡æ And I got here! puts procnew ¡æ I got here... procnew ÀÇ °æ¿ì¸¦ »ìÆ캸¸é, ¹ÝȯµÈ °ªÀº ºí·Ï ³»¿¡¼ ¹ÝȯÇÑ °ªÀÌ µË´Ï´Ù. ¶÷´Ù·Î »ý¼ºÇÑ Proc °´Ã¼´Â ´Ü¼øÈ÷ ±× °ªÀ» ºÎ¸ð ¸Þ¼Òµå¿¡ ¹ÝȯÇÏ°í ºÎ¸ð ¸Þ¼Òµå°¡ ÀÌ°ÍÀº º¯¼ö¿¡ ´ã°Å³ª ÇÊ¿äÇÏ´Ù¸é ¹ÝȯÇϰųª ÇÒ ¼ö ÀÖ½À´Ï´Ù. ÀÌ°ÍÀÌ ±â¾ïÇÏ¼Å¾ß ÇÒ Áß¿äÇÑ ±¸º°µÇ´Â Á¡ÀÔ´Ï´Ù. ¿Ö³ÄÇϸé Proc °´Ã¼¸¦ ¸Þ¼Òµå ³»¿¡¼ »ç¿ëÇÏ¸é¼ ¿Ö ¸Þ¼Òµå°¡ Áß°£¿¡ ºüÁ®³ª°¡´ÂÁö¸¦ ¾ËÁö ¸øÇÏ¿© ½ÉÇÑ µÎÅëÀ¸·Î °í»ýÇÒ ¼ö°¡ Àֱ⠶§¹®ÀÔ´Ï´Ù. (°æÇè¿¡¼ ¿ì·¯³ª¿À´Â ¸»ÀÔ´Ï´Ù!) ÀÌÁ¦ ¿©·¯ºÐÀº Proc °´Ã¼¸¦ ÀÌ¿ëÇÏ¿© ºí·ÏÀ» ¿©·¯ºÐÀÇ ÄÚµå¾È¿¡ ³Ö¾úÀ» ¶§ ¾î¶»°Ô µ¿ÀÛÇÏ´ÂÁö¸¦ ÀÌÇØÇϼÌÀ¸´Ï, ÀÌÁ¦ ÀÌ°ÍÀ» ¾î¶»°ÔÇÏ¸é ¿©·¯ºÐÀÇ ¸Þ¼Òµå¿¡ ´õ ´Ü´ÜÈ÷ ÇÕÄ¡´ÂÁö¸¦ ¾Ë¾Æº¾½Ã´Ù.
1.2.3. ºí·Ï ¸¸µé±â ¶¿©·¯ºÐ²²¼ ÀÛ¼ºÇϽŠ¸Þ¼Òµå¿¡¼ ºí·ÏÀ» µ¿ÀÛ½ÃÅ°´Â ¹æ¹ýÀÌ ¸î °¡Áö ÀÖ½À´Ï´Ù. ù ¹ø° ¹æ¹ýÀº ´Ù¸¥ °´Ã¼µéÀ» ´Ù·ê ¶§Ã³·³
Proc °´Ã¼¸¦ ¸Å°³º¯¼ö·Î ³Ñ°Ü¹Þ´Â ¹æ¹ýÀÔ´Ï´Ù. ÇÏÁö¸¸ ÀÌ°ÍÀº º°·Î ÁÁÀº ¹æ¹ý °°Áö´Â ¾Ê°í, ¼º´É¿¡ Ÿ°ÝÀÌ ÀÖ½À´Ï´Ù. Àú´Â ÀÌ Å¸°ÝÀ» ±â¸§Áø º£ÀÌÄÁ Á¶°¢À¸·Î Âû½Ï ¸Â´Â °Í°ú ȲȦÇÔ »çÀÌÀÇ ¼öÁØ¿¡ µÎ°í ½Í³×¿ä. ¿î ÁÁ°Ôµµ ·çºñ¿¡´Â ¾ß´Ü¹ý¼® ¶³ ÇÊ¿ä ¾øÀÌ ¼º´É ÀúÇϸ¦ ÃÖ¼ÒÈÇÏ´Â ¸î °¡Áö ¹æ¹ýÀÌ ÀÖ½À´Ï´Ù. ºí·ÏÀ» ¸Å¹ø ¿©·¯ºÐÀÇ Äڵ忡 ÅëÇÕ½ÃÅ°´Â ¹æ¹ýÀº ²Ï °£´ÜÇÕ´Ï´Ù. ±×Àú ¿©±âÀú±â¿¡ ÀÖ´Â ÇÊ¿äÇÑ À§Ä¡¿¡ yield ¸¦ ÁÖÀÔÇÏ°í ¸Þ¼ÒµåÀÇ °æ°è¸¦ dzºÎÇÏ°Ô ÀÀ¿ëÇÏ¿© ÀÛÀº ÅëÇÕµÈ °³¹ß Á¢½Ã¿¡ ÇÕÃÄ ´ãÀº µÚ ¹Ù»èÇØÁú ¶§±îÁö 400µµ¾¾¿¡¼ 15ºÐ°£ ±¸¿ì¸é µË´Ï´Ù.
¹¬½ÃÀû ºí·Ï »ç¿ë
Proc ¸Å°³º¯¼ö¸¦ ¾ò´Â °÷ÀÇ ¹Ù±ùÂÊ¿¡¼´Â, ·çºñ¿¡¼ ºí·ÏÀ» ¸Å°³º¯¼ö·Î »ç¿ëÇÏ´Â ¹æ¹ýÀº ÇÑ °¡Áö ¹Û¿¡ ¾ø½À´Ï´Ù. ±×·¯³ª ÀÌ ¹æ¹ýÀº ´õ Á÷°üÀûÀÏ »Ó¸¸ ¾Æ´Ï¶ó ´õ Àß ¼öÇàµË´Ï´Ù. Àú´Â ÀÌ°ÍÀ» ¹¬½ÃÀû ºí·Ï »ç¿ëÀ̶ó°í ºÎ¸£´Âµ¥ ¸Þ¼Òµå¿¡°Ô "¾îÀÌ, ³ª´Â ÀÌ ºí·ÏÀ» ¿©±â¼ »ç¿ëÇÑ´Ù."¶ó°í ¾Ë·ÁÁÙ ¼ö ¾ø±â ¶§¹®ÀÌ°í, ±×¸®°í ³ª¼ ±×°ÍÀ» ¸Þ¼Òµå ³»¿¡¼ È£ÃâÇÒ ¼ö ¾ø±â ¶§¹®ÀÔ´Ï´Ù. ±×Àú ºí·ÏÀÇ ÄÚµå Á¦¾î¸¦ ¾çº¸ÇÏ´Â °ÍÀÔ´Ï´Ù. ÀÌ°ÍÀº ¿¹Á¦ ¾øÀÌ´Â ÀÌÇØÇϱâ Èûµé°Ú±º¿ä. ±×·¡¼ Á» °£´ÜÇÑ ÄÚµå Á¶°¢À» º¸¿©µå¸®°Ú½À´Ï´Ù.
def yieldme print "1. Enter method. " yield print "3. Exit method." end yieldme { print "2. Enter block. "} ¡æ 1. Enter method. 2. Enter block. 3. Exit method. ¿©±â¼ ÀϾ´Â ÀÏ¿¡ ÁÖ¸ñÇØÁÖ¼¼¿ä. ¸ÕÀú ¸Þ¼Òµå·Î µé¾î°¡¼ ù¹ø° ¸í·É¹®À» ¼öÇàÇÕ´Ï´Ù. µÎ¹ø°·Î,
yield ¸Þ¼Òµå°¡ È£ÃâµÇ°í ¿ì¸®ÀÇ ºí·ÏÀÌ ¼öÇàµË´Ï´Ù. ¾²·¹µå°¡ ÀÓ½ÃÀûÀ¸·Î ºí·Ï¿¡°Ô Á¦¾î±ÇÀ» ¾çº¸ÇÕ´Ï´Ù. ºí·ÏÀÌ Á¾·áµÇ¸é ºí·ÏÀ» È£ÃâÇÑ °÷À¸·Î Á¦¾î±ÇÀÌ µ¹¾Æ¿É´Ï´Ù. ¸¶Áö¸·À¸·Î ¸Þ¼ÒµåÀÇ ³ª¸ÓÁö ºÎºÐÀÌ ¼öÇàµË´Ï´Ù. ÀÌ°ÍÀÌ ¹è¿¿¡ each ¸Þ¼Òµå¸¦ »ç¿ëÇÏ¿´À» ¶§ µ¿ÀÛÇÏ´ø ¹æ½ÄÀÔ´Ï´Ù. ¿ì¸®°¡ ÀÌ ¸Þ¼Òµå¸¦ ¾î¶² ÀÌÀ¯¿¡¼µçÁö ´Ù½Ã ÀÛ¼ºÇÏ°í ½Í¾îÁ³´Ù°í ÇսôÙ. ¾Æ¸¶ ¿©·¯ºÐÀÇ ¾Ö¿Ïµ¿¹°ÀÎ ¹Ì±¹³Ê±¸¸®°¡ º¼¸µ ¼±¼ö¸¦ ÁÁ¾ÆÇÏ°í, ¸Þ¼ÒµåÀ» ´Ù½Ã ÀÛ¼ºÇ϶ó°í ¼³µæÇßÀ» °ÍÀÔ´Ï´Ù. ºí·ÏÀ» ¼öÇàÇϱâ À§Çؼ yield ¸¦ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù.
def myeach(myarray) iter = 0 while (iter < myarray.length): yield(myarray[iter]) iter += 1 end end testarray = [1,2,3,4,5] myeach(testarray) {|item| print "#{item}:"} ¡æ 1:2:3:4:5: ÀÌ ÄÚµå Á¶°¢¿¡¼ ƯÈ÷
while ÀÌ ÀÖ´Â ÁÙÀº Á» ¾î·Æ°ÚÁö¸¸ ÀÌ°ÍÀº ÀÌÇØÇÒ ¼ö ÀÖÀ» Á¤µµ·Î ÃæºÐÈ÷ °£´ÜÇÑ ÄÚµå Á¶°¢À̱⠶§¹®¿¡ Á» Âü¾ÆÁÖ¼¼¿ä. while ºí·ÏÀº ¼øȯÀ» »ý¼ºÇϴµ¥, ÀÌ°ÍÀº ºí·Ï ¾È¿¡¼ Äڵ带 ¿©·¯¹ø ¼öÇàÇÑ´Ù´Â ¶æÀÔ´Ï´Ù(53 ÆäÀÌÁö¿¡¼ ¼øȯ¿¡ ´ëÇÏ¿© ´õ ÀÚ¼¼È÷ ¾Ë¾Æº¸½Ç ¼ö ÀÖ½À´Ï´Ù). º¹ÀâÇØ º¸ÀÌ°ÚÁö¸¸ ÀÌÀü°ú´Â °°Àº °³³äÀÌ Àû¿ëµË´Ï´Ù. ¸Þ¼Òµå´Â Á¦¾î±ÇÀ» ºí·Ï¿¡°Ô ³Ñ°ÜÁÝ´Ï´Ù. ¿©±â¼ ´Ù¸¥ Á¡Àº ¸Å°³º¯¼ö¸¦ Äڵ带 ¹Ýº¹ÇÒ ¶§¸¶´Ù ¸Å¹ø ºí·ÏÀ¸·Î ³Ñ°ÜÁÖ¾ú´Ù´Â °ÍÀÔ´Ï´Ù. ¿©·¯ºÐÀÌ ÀÛ¼ºÇÑ ÁýÇÕü(collection)¿¡¼ yield ¸¦ »ç¿ëÇϸé ÀÌ¿Í °°ÀÌ ¹Ýº¹ÀÚ¸¦ ÈǸ¢ÇÏ°Ô ±¸ÇöÇÒ ¼ö ÀÖ½À´Ï´Ù.
¾ÚÆÛ»÷µå(&) ¸Å°³º¯¼ö ¸Þ¼ÒµåÀÇ ¸¶Áö¸· ¸Å°³º¯¼ö ¾Õ¿¡ ¾ÚÆÛ»÷µå¸¦ µ¡ºÙÀÌ¸é ¸Þ¼Òµå·Î ³Ñ°ÜÁø ºí·ÏÀº Á¤»óÀûÀ¸·Î ¸Å°³º¯¼ö·Î ³Ñ°ÜÁÙ ¶§Ã³·³
Proc ÀÌ µË´Ï´Ù. ±Û½ê¿ä, ¿ÏÀüÈ÷ Á¤»óÀûÀ¸·Î ±×·¸´Ù´Â °ÍÀº ¾Æ´Ï°í ¾à°£ÀÇ ¼ö¹ýÀÌ ÀÖ½À´Ï´Ù.
def ampersand(&block) block.call yield end ampersand { print "I'm gettin' called! " } ¡æ I'm gettin' called! I'm gettin' called! ³Ñ°ÜÁØ ºí·ÏÀÌ
Proc ÀÌ µÉ °ÍÀ̶ó°í ÇßÀ¸´Ï call ¸Þ¼Òµå¸¦ ¾µ ¼ö ÀÖ½À´Ï´Ù¸¸, yield ¿ª½Ã µ¿ÀÛÇÑ´Ù´Â °Í¿¡ ÁÖ¸ñÇϼ¼¿ä. ÀÌ°ÍÀº call À̳ª yield ¸¦ °¢°¢ ´Ù¸¥ °æ¿ì¿¡¼ ¾µ ¼ö ÀÖ´Â Àç¹ÌÀÖ°í À¯¿ëÇÑ ¼ö¹ýÀÔ´Ï´Ù.
1.3. ¿©·¯ºÐÀÇ °´Ã¼´Â Ŭ·¡½º°¡ ºÎÁ·ÇÕ´Ï´Ù! ¶ÀÌÀü¿¡ ¿©·¯¹ø ¾ð±ÞÇßµíÀÌ ·çºñ¿¡ ÀÖ´Â ¸ðµç °ÍÀº °´Ã¼ÀÔ´Ï´Ù. ¹°·Ð ·çºñ´Â °´Ã¼¸¦ ¹¦»çÇϴ Ŭ·¡½º¶ó´Â °ÍÀ¸·ÎºÎÅÍ °´Ã¼¸¦ »ý¼ºÇØ ³¾ ¼ö ÀÖ½À´Ï´Ù. C#, C++, ÆÄÀ̽ãÀ̳ª ÀÚ¹Ù¿Í °°Àº °´Ã¼ ÁöÇâ ¾ð¾î¿¡¼ ÇÁ·Î±×·¥À» Â¥ º» °æÇèÀÌ ÀÖÀ¸½Ã´Ù¸é Ŭ·¡½º¿Í °´Ã¼ÀÇ °³³äÀº »ý¼ÒÇÑ °ÍÀÌ ¾Æ´Ò °ÍÀÔ´Ï´Ù. ±×·¯³ª ±×·± ¾ð¾îµéÀÇ °´Ã¼ ÁöÇâ ±¸Çö°ú ·çºñÀÇ ±¸ÇöÀº ±¸º°µÇ´Â Á¡ÀÌ ÀÖ½À´Ï´Ù.
ÇÑ °¡Áö »ý¼ÒÇÑ °ÍÀº ·çºñ´Â °´Ã¼ÀÇ Å¸ÀÔÀ» ´Ù·ç´Â ¹æ¹ýÀÔ´Ï´Ù. C++À̳ª ÀÚ¹Ù´Â ´ÜÁö Á¤Àû(ȤÀº ¸í½ÃÀû)ÀΠŸÀÔÀ» ´Ù·ì´Ï´Ù. ÀÌ·± ½ÄÀ¸·Î ŸÀÔÀ» ´Ù·ç·Á¸é °´Ã¼ÀÇ Å¸ÀÔÀº ÄÄÆÄÀÏ ½Ã°£¿¡ Á¤ÀǵǾî¾ß ÇÏ°í ±×·¸Áö ¾ÊÀ¸¸é ÄÄÆÄÀÏ·¯°¡ ¿¡·¯ ¸Þ½ÃÁö¸¦ Ãâ·ÂÇÕ´Ï´Ù. ´ëºÎºÐÀÇ Á¤ÀûÀ¸·Î ŸÀÔÀ» ´Ù·ç´Â ´ëºÎºÐÀÇ Çö´ë ¾ð¾îµéÀº Åõ¿µ(reflection)À̳ª µ¿ÀûÀ¸·Î ŸÀÔÀ» °¡Á®¿Ã ¼ö ÀÖ´Â ¸ðµâÀ» Á¦°øÇÕ´Ï´Ù. ±×·¯³ª ·çºñ´Â ŸÀÔÀ» ¿ÏÀüÈ÷ ´Ù¸¥ ¹æ¹ýÀ¸·Î Á¢±ÙÇÕ´Ï´Ù. ÆÄÀ̽ãÀ» »ç¿ëÇØ º¸½Å ÀûÀÌ ÀÖ´Ù¸é ÀÌ·± µ¿Àû ŸÀÔ¿¡ Àͼ÷ÇÒ °ÍÀÔ´Ï´Ù. ·çºñ´Â °°Àº ¾ÆÀ̵ð¾î¸¦ ÀÌ¿ëÇÏÁö¸¸ "´ö ŸÀÌÇÎ(duck typing)"À̶ó°í ºÎ¸¨´Ï´Ù(ÀÌ°ÍÀÌ Á» ´õ ¼³¸íÇϱ⠽±½À´Ï´Ù).
[JPG image (95.85 KB)] ±×¸² 6: °¢°¢ÀÇ Å¬·¡½º°¡
sayhello ¶ó´Â ¸Þ¼Òµå¸¦ ±¸ÇöÇÏ°í ÀÖ°í µÑ ´Ù ¸Þ½ÃÁö¿¡ ¹ÝÀÀÇÕ´Ï´Ù. yourclass ¿¡ smells ¸¦ Ãß°¡ÇÏ°í ½Í±º¿ä.
C++À̳ª PHP ÇÁ·Î±×·¡¸Ó¿¡°Ô »ý¼ÒÇÒ¸¸ÇÑ(±×·¯³ª ÀÚ¹Ù³ª C# ÇÁ·Î±×·¡¸Ó¿¡°Ô´Â »ý¼ÒÇÏÁö ¾ÊÀ») ´Ù¸¥ °³³äÀº ¾ð¾î Àü¹Ý¿¡ °ÉÄ£ Ŭ·¡½º °èÃþÀÔ´Ï´Ù. ·çºñ¿¡¼´Â ¸ðµç Ŭ·¡½º´Â Object Ŭ·¡½º¿¡¼ ÆÄ»ýµÈ Class Ŭ·¡½ºÀÇ ÀνºÅϽºÀÎ °´Ã¼ÀÔ´Ï´Ù. ´ÙÀ½°ú °°Àº ÄÚµå·Î º¸¿©µå¸± ¼ö ÀÖ½À´Ï´Ù.
puts File.class ¡æ Class puts File.superclass ¡æ Object puts Object.superclass ¡æ nil Ŭ·¡½ºÀÇ »óÀ§ Ŭ·¡½º´Â ±× Ŭ·¡½º°¡ ¾îµð¼ºÎÅÍ ÆÄ»ýµÇ¾ú´ÂÁö¸¦ ³ªÅ¸³»´Â °ÍÀÔ´Ï´Ù. ·çºñ¿¡¼ Ŭ·¡½º°¡ ´Ù¸¥ Ŭ·¡½º·ÎºÎÅÍ ¸ðµç ¸Þ¼Òµå¿Í º¯¼ö¸¦ "»ó¼Ó"¹ÞÀ» ¼ö ÀÖ½À´Ï´Ù. °á°úÀûÀ¸·Î Ŭ·¡½º°¡ ´Ù¸¥ Ŭ·¡½º·ÎºÎÅÍ ÆÄ»ýµÇ¾ú´Ù¸é (¿¹¸¦ µé¾î ´Ù¸¥ Ŭ·¡½º·ÎºÎÅÍ »ó¼Ó ¹Þ¾Ò´Ù¸é), »óÀ§ Ŭ·¡½ºÀÇ ¸ðµç ¸Þ¼Òµå¿Í º¯¼ö¿¡ Á¢±ÙÇÒ ¼ö ÀÖ½À´Ï´Ù. ·çºñÀÇ °áÇÔÀº ´Ù¸¥ ¸î¸î ¾ð¾îµé°ú ´Þ¸® Ŭ·¡½º°¡ Çѹø¿¡ ÇÑ Å¬·¡½º¿¡¼¸¸ »ó¼Ó¹ÞÀ» ¼ö ÀÖ´Ù´Â °ÍÀÔ´Ï´Ù. ¿¹¸¦ µé¾î¼ Ŭ·¡½º´Â ´Ù¸¥ Ŭ·¡½º·ÎºÎÅÍ »ó¼Ó¹ÞÀº ´Ù¸¥ Ŭ·¡½º·ÎºÎÅÍ »ó¼Ó¹ÞÀº Ŭ·¡½º·ÎºÎÅÍ »ó¼Ó¹ÞÀ» ¼ö ÀÖÁö¸¸ ÇϳªÀÇ Å¬·¡½º´Â ¿©·¯ Ŭ·¡½º·ÎºÎÅÍ Çѹø¿¡ »ó¼Ó¹ÞÀ» ¼ö ¾ø½À´Ï´Ù. º¸½Ã´Ù½ÃÇÇ
File Ŭ·¡½º´Â ±×Àú ÃÖ»óÀ§ Ŭ·¡½º(¾Æ¹« °ÍÀ¸·ÎºÎÅÍ »ó¼Ó¹ÞÁö ¾ÊÀº Ŭ·¡½º)ÀÎ Object Ŭ·¡½º·ÎºÎÅÍ »ó¼Ó¹ÞÀº Class Ŭ·¡½ºÀÇ ÀνºÅϽºÀÔ´Ï´Ù. ´Ù¸¥ Ŭ·¡½ºµéó·³ File ¸ðµç ´Ù¸¥ Object ÀÇ ¸Þ¼Òµå¿Í º¯¼ö¿¡ Á¢±ÙÇÒ ¼ö ÀÖ´Ù´Â ¶æÀÔ´Ï´Ù. ÀÌ°ÍÀº Object Ŭ·¡½º´Â ¸ðµç ´Ù¸¥ °´Ã¼µéÀÇ ±Ùº»À̶ó´Â ¶æÀ̱⵵ ÇÕ´Ï´Ù. ¾Æ´ã°ú À̺ê, âÁ¶ÀÚ, ¼³°èÀÚ, ¸ðµç °´Ã¼¿Í Ŭ·¡½ºÀÇ ¾î¸Ó´ÏÀÔ´Ï´Ù!
Ŭ·¡½º°¡ ¾î¶² °ÍÀÇ ÀνºÅϽº°¡ µÈ´Ù´Â ¸»Àº Á» È¥¶õ½º·¯¿ï °ÍÀÔ´Ï´Ù. ±×·¯³ª ·çºñ¿¡ ÀÖ´Â ¸ðµç °ÍÀº °´Ã¼¶ó´Â Á¡À» ¸í½ÉÇϼ¼¿ä. ¸ðµç °Í ¸»ÀÔ´Ï´Ù. ±×·¡¼ Ŭ·¡½º¸¦ Á¤ÀÇÇÒ ¶§
Class Ŭ·¡½ºÀÇ ÀνºÅϽº¸¦ ¸¸µå´Â °ÍÀÔ´Ï´Ù. Ŭ·¡½º·ÎºÎÅÍ »õ·Î¿î °´Ã¼¸¦ ¸¸µé ¶§, Ŭ·¡½º°¡ ¹¦»çÇÏ°í ÀÖ´Â »õ·Î¿î °´Ã¼ ÀνºÅϽº¸¦ ¹ÝȯÇÏ´Â ¸Þ¼ÒµåÀÎ (Ŭ·¡½º À̸§).new¸¦ È£ÃâÇÕ´Ï´Ù. ·çºñ¿¡ ÀÖ´Â °ÍÀº ¹«¾ùÀ̵çÁö °´Ã¼ÀÔ´Ï´Ù!
1.3.1. Ŭ·¡½º Á¤ÀÇÇϱ⠶ÀÚ ÀÌÁ¦ ½ÃÀÛÇØ º¾½Ã´Ù. Ŭ·¡½º¸¦ Á¤ÀÇÇÏ·Á¸é
class Å°¿öµå¸¦ ù ÁÙ¿¡ ³õ°í Ŭ·¡½º¿¡¼ »ó¼ÓÀ» ¹ÞÀ¸·Á¸é < ¸¦ ¾²°í »ó¼Ó¹ÞÀ¸·Á´Â Ŭ·¡½º¸¦ ¾¹´Ï´Ù. ¿¹¸¦ µé¸é ´ÙÀ½°ú °°½À´Ï´Ù.
class MyFirstClass < Object end ÀÌ°Ô ÀüºÎÀÔ´Ï´Ù. ¹æ±Ý ¿ì¸®´Â óÀ½À¸·Î Ŭ·¡½º¸¦ Á¤ÀÇÇß½À´Ï´Ù. ÀÌ ¿¹Á¦´Â Áö±Ý±îÁö ³ª¿Â ¿¹Á¦ Áß¿¡¼ °¡Àå ÀÎÀ§ÀûÀÌ°í ¿ÏÀüÈ÷ ¾µ¸ð¾ø´Â Ŭ·¡½º¸¦ ³ªÅ¸³»´Â °ÍÀÓÀ» ÀÎÁ¤ÇÕ´Ï´Ù¸¸, ¾î·µç ¿ì¸®´Â Ŭ·¡½º¸¦ Á¤ÀÇÇß½À´Ï´Ù.
Object ·ÎºÎÅÍ »ó¼ÓÀ» ¹Þ¾Ò´Ù´Â °ÍÀ» ³ªÅ¸³Â´Ù´Â Á¡¿¡ ÁÖ¸ñÇϽʽÿÀ. ÀÌ°ÍÀº ¿ÏÀüÈ÷ ÇÊ¿ä ¾ø´Â °ÍÀÔ´Ï´Ù. ·çºñ¿¡¼´Â »ó¼Ó °ü°è¸¦ Á¤ÇÏÁö ¾ÊÀ¸¸é Object ¿¡¼ »ó¼Ó ¹Þ¾Ò´Ù°í °¡Á¤ÇÕ´Ï´Ù.
1.3.2. ¸Þ¼Òµå¿Í º¯¼ö ¶Å¬·¡½º´Â º¯¼ö¿Í ¸Þ¼Òµå¸¦ Æ÷ÇÔÇÒ ¼ö ÀÖ½À´Ï´Ù. Ŭ·¡½º¿¡ ¾î¶² ÀÏÀ» ½ÃÅ°·Á¸é Á¦ÀÏ ¸ÕÀú Áý¾î³Ö°í ½ÍÀº °ÍÀº ¸Þ¼ÒµåÀÏ °ÍÀÔ´Ï´Ù. Ãß°¡ÇØ¾ß ÇÒ Ã¹ ¹ø° ¸Þ¼Òµå´Â
initialize ¸Þ¼ÒµåÀε¥, ÀÌ°ÍÀº (Ŭ·¡½º À̸§).new ¸Þ¼Òµå¸¦ È£ÃâÇÒ ¶§¸¶´Ù ·çºñ¿¡¼ ÀÚµ¿À¸·Î È£ÃâÇØÁÖ´Â ¸Þ¼ÒµåÀÔ´Ï´Ù. new ¸Þ¼Òµå¸¦ È£ÃâÇÏ¸é »õ·Î¿î °´Ã¼°¡ »ý¼ºµÇ°í initialize ¸Þ¼Òµå°¡ new¿¡ ³Ñ°ÜÁØ ¸Å°³º¯¼ö¸¦ ³Ñ°ÜÁÖ¸é¼ È£ÃâµÇ¾î °´Ã¼ÀÇ »óÅÂ(º¯¼ö, Ç÷¡±× µî)¸¦ ¼³Á¤ÇÕ´Ï´Ù. ÀÌ°ÍÀº ´Ù¸¥ ¾ð¾îÀÇ »ý¼ºÀÚ¿Í ¸Å¿ì ºñ½Á(»ç½Ç»ó µ¿ÀÏ)ÇÕ´Ï´Ù. ¿¹¸¦ µé¾î Boogeyman ÀÌ ¼¼»ó¿¡ ÀÖ´Â ¸ðµç ¾ÆÀ̵鿡°Ô ±«»óÇÑ ÁþÀ» ÇÏ·Á°í Çß´ø °ÍÀ» Æ÷±âÇϱâ·Î ¸¶À½¸Ô°í (ÀÌÁ¦ ³ªÀÌ°¡ Á» µé¾úÀ¸´Ï±î¿ä) ´ë½Å¿¡ (·çºñ·Î Â¥¿©Áø ¼ÒÇÁÆ®¿þ¾î·Î µ¿ÀÛÇÏ´Â) ·Îº¿ ±º´ÜÀ» ¸¸µé¾î¼ »ç¾ÇÇÑ ¸í·ÉÀ» ³»¸°´Ù°í ÇսôÙ. Ãʱâ Ŭ·¡½º Á¤ÀÇ¿Í initialize ¸Þ¼Òµå´Â ´ÙÀ½°ú °°À» °ÍÀÔ´Ï´Ù.
class Boogeyman def initialize puts "Yes, master?" end end monster1 = Boogeyman.new ¡æ Yes, master? ´ç¿¬È÷ ÀÌ ¸Þ¼Òµå´Â »õ °´Ã¼¸¦ »ý¼ºÇÒ ¶§ ¾î¶»°Ô ÇÏ´ÂÁö¸¦ º¸¿©ÁÖ´Â °Í »ÓÀ̸ç,
initialize ¸Þ¼Òµå°¡ È£ÃâµÇ¾ú½À´Ï´Ù. ÀÌÁ¦ ¹«¾ð°¡ µ¿ÀÛÇϵµ·Ï ÇØ º¾½Ã´Ù.
class Boogeyman def initialize(name, location) @name = name @location = location puts "Yes, master?" end end monster1 = Boogeyman.new("Mister Creepy", "New York, NY") ¡æ Yes, master? ÀÌ°ÍÀº ÀνºÅϽº º¯¼ö¸¦ ¼³Á¤ÇÏ´Â »õ·Î¿î
initialize ¸Þ¼ÒµåÀÔ´Ï´Ù. ÀνºÅϽº º¯¼ö¶ó´Â °ÍÀº °´Ã¼ ³»¿¡¼ »óŸ¦ °¡Áö°í ÀÖ´Â º¯¼öÀÔ´Ï´Ù. ÀνºÅϽº º¯¼ö¸¦ ¼³Á¤Çϱâ À§Çؼ´Â Áº¯ ¾Õ¿¡ @ ±âÈ£¸¦ ºÙ¿©¾ß ÇÕ´Ï´Ù. ´Ù¸¥ ¾ð¾îµéó·³ ÀÌ º¯¼öµéÀ» Ŭ·¡½º ¼±¾ðºÎ¿¡ ³ÖÀ» ÇÊ¿ä´Â ¾ø½À´Ï´Ù.
ÀÌ·¸°Ô ¼³Á¤µÈ º¯¼ö´Â ƯÁ¤ ÀνºÅϽº¿¡¼ À¯ÀÏÇÏ°Ô µË´Ï´Ù. ÀÌ º¯¼öµéÀº ÀνºÅϽº ½ºÄÚÇÁ ³»¿¡ ÀÖ´Ù°í ÇÕ´Ï´Ù. ¿¹¸¦ µé¾î¼ Ưº°È÷ ³Ñ°ÜÁÖÁö ¾Ê´Â´Ù¸é ÀνºÅϽº ¹Ù±ù¿¡¼ ÀÌ º¯¼öµéÀ» »ç¿ëÇÒ ¼ö ¾ø½À´Ï´Ù. ÀÌÀü¿¡ ¹è¿ü´ø ½ºÄÚÇÁ¸¦ ±â¾ïÇØ º¸¼¼¿ä. @name°ú nameÀÌ ´Ù¸¥ ½ºÄÚÇÁ ³»¿¡ ÀÖÀ¸¹Ç·Î, ¿ì¸®´Â ¸ðÈ£ÇÏÁö ¾Ê°Ô À̸§À» Áߺ¹Çؼ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù. (»ç½Ç º°·Î ÁÁÀº »ý°¢Àº ¾Æ´Õ´Ï´Ù.) ÀÌÁ¦ °´Ã¼ÀÇ »óŸ¦ ´Ù·ç´Â ¸î °¡Áö ¸Þ¼Òµå¸¦ ¸¸µé¾î º¾½Ã´Ù.
class Boogeyman def change_location(newlocation) @location = newlocation puts "I moved to #{newlocation}!" self.get_info end def change_name(newname) @name = newname puts "I shall be called #{newname} from now on!" self.get_info end def get_info puts "I am #{@name} in #{@location}." end end monster1 = Boogeyman.new("Loopy Lou", "Albuquerque, NM") ¡æ Yes, master? monster1.change_location("Wyoming") ¡æ I moved to Wyoming! ¡æ I am Loopy Lou in Wyoming. monster1.change_name("Beezlebub") ¡æ I shall be called Beezlebub from now on! ¡æ I am Beezlebub in Wyoming. ÀÌ ¿¹Á¦¿¡¼ Áß¿äÇÑ µÎ °¡Áö °³³äÀ» º¸¿©µå·È½À´Ï´Ù. ù°, Á¦°¡ Àüü Ŭ·¡½º¸¦ ´Ù½Ã ´Ù ÀÔ·ÂÇÏÁö ¾Ê¾Ò´Ù´Â °ÍÀÔ´Ï´Ù. Á¦°¡ °ÔÀ»·¯¼ ±×·± °ÍÀÌ ¾Æ´Ï¶ó ·çºñ¿¡¼ Ŭ·¡½º´Â Àý´ë·Î ´ÝÈ÷Áö ¾Ê½À´Ï´Ù. ÀÌ ¸»Àº °£´ÜÈ÷ Ŭ·¡½º Á¤ÀǸ¦ ´Ù½Ã ¿¾î¼ Ç×»ó ¾î¶² ¸Þ¼ÒµåµçÁö Ãß°¡Çϰųª ´Ù½Ã Á¤ÀÇ(Á¤È®ÇÑ ¿ë¾î·Î ¿À¹ö¶óÀ̵å)ÇÒ ¼ö ÀÖ´Ù´Â °ÍÀÔ´Ï´Ù. ¶§·Î´Â À§ÇèÇÒÁöµµ ¸ð¸¨´Ï´Ù¸¸ ÀÌ°ÍÀÌ ·çºñ °´Ã¼ ±¸Çö¿¡¼ °¡Àå À¯¿ëÇÑ Ãø¸é Áß¿¡ ÇϳªÀ̱⵵ ÇÕ´Ï´Ù. ´ÙÀ½ ¿¹Á¦¸¦ º¸½Ã°Ú½À´Ï´Ù.
class String def writesize puts self.size end end size_writer = "Tell me my size!" size_writer.writesize ¡æ 16 ¹æ±Ý Àü¿¡µµ ¸»¾¸µå·ÈµíÀÌ Å¬·¡½ºÀÇ ¸Þ¼Òµå¸¦ ¿À¹ö¶óÀ̵å ÇÏ´Â °ÍÀÌ °¡´ÉÇÕ´Ï´Ù. ½ÉÁö¾î´Â ³»Àå Ŭ·¡½ºµéµµ °¡´ÉÇÕ´Ï´Ù. ÀÌ°ÍÀº ƯÁ¤ ¸Þ¼Òµå³ª ¿¬»êÀÚ¸¦ ¼öÁ¤Çؼ ¸ðµç °ÍÀ» ¾û¸ÁÀ¸·Î ¸¸µé ¼ö ÀÖ´Â À§ÇèÇÑ Á¡µµ ÀÖÁö¸¸ µ¿½Ã¿¡ À¯¿ëÇÒ ¼öµµ ÀÖ½À´Ï´Ù. ·çºñ À¥ ÇÁ·¹ÀÓ¿öÅ©ÀÎ ·¹ÀϽº´Â ÀÌ °³³äÀ» ƯÈ÷
ActiveSupport ÆÐÅ°Áö¿¡¼ ¸¹ÀÌ È°¿ëÇÕ´Ï´Ù. Á» ´õ º¹ÀâÇÏ°í Àç¹ÌÀÖ´Â °ÍÀ» ãÀ¸½Å´Ù¸é ·¹ÀϽº È®Àå ±â´ÉÀ» »ìÆ캸½Ã¸é ´Ù¾çÇÑ Å¬·¡½ºµéÀÌ ÀÖ½À´Ï´Ù.
ÀÌ ¿¹Á¦¿¡¼ º¸¿©µå¸° µÎ ¹ø° °³³äÀº
self °´Ã¼ÀÇ »ç¿ë¹ýÀÔ´Ï´Ù. self °´Ã¼´Â Ç×»ó ÇöÀçÀÇ ÀνºÅϽº¸¦ °¡¸®Åµ´Ï´Ù. (½ºÆ®¸µ Ŭ·¡½ºÀÇ size³ª ¿ì¸® Ŭ·¡½ºÀÇ get_info ¸Þ¼Òµå °°Àº) ÇöÀç ÀνºÅϽºÀÇ ¸Þ¼Òµå¸¦ È£ÃâÇÒ ¶§ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù. ´ëºÎºÐÀÇ °æ¿ì¿¡´Â ÀÌ°ÍÀÌ ÇÊ¿äÇÏÁö ¾ÊÀ» °ÍÀÌÁö¸¸ ÇÊ¿äÇÑ °æ¿ì°¡ ÀÖ½À´Ï´Ù. ±âº»ÀûÀ¸·Î self¸¦ »ý·«ÇÏ°í »ç¿ëÇصµ ·çºñ´Â ÇöÀç Ŭ·¡½º¿¡ ÀÖ´Â °ÍÀ¸·Î °¡Á¤ÇÏÁö¸¸, puts¿Í °°Àº ¸Þ¼Òµå¸¦ Ŭ·¡½º ³»¿¡¼ ±¸ÇöÇß´Ù¸é ³»Àå ¸Þ¼Òµå¸¦ È£ÃâÇÏÁö ¾Ê°í Á÷Á¢ ÀÛ¼ºÇÑ Å¬·¡½º ³»ÀÇ puts ¸Þ¼Òµå¸¦ È£ÃâÇÏ·Á¸é ÀÌ°ÍÀ» ÀÌ¿ëÇÏ¿©¾ß ÇÕ´Ï´Ù.
1.3.3. ¼Ó¼º ¶ÀνºÅϽº º¯¼ö°¡ À¯¿ëÇÏ´Ù°í Çصµ ¹Ù±ù ¼¼»ó¿¡´Â º¸ÀÌÁö ¾Ê½À´Ï´Ù. óÀ½ º¸¾ÒÀ» ¶§¿¡´Â ÀÌ°ÍÀÌ ¸Å¿ì ÈǸ¢ÇÑ »óȲÀ̶ó´Â »ý°¢ÀÌ µé °Ì´Ï´Ù. °´Ã¼ÀÇ ¸ðµç »óÅ°¡ ¹Ù±ù ¼¼»ó¿¡¼´Â ¿ÏÀüÈ÷ º¸ÀÌÁö ¾Ê°í ¹Ù²îÁö ¾ÊÀ» Å״ϱî¿ä. ±×·¯³ª Á¶±Ý Áö³ª°í º¸¸é °´Ã¼ ³»ÀÇ °ªÀ» °¡Á®¿À°Å³ª ¹Ù²Ù°í ½Í´Ù´Â »ý°¢ÀÌ µå½Ç °Ì´Ï´Ù. ¾î¶»°Ô ÀÌ°ÍÀ» ÇÒ ¼ö ÀÖÀ»±î¿ä?! ÀÌ°ÍÀº Á¤¸» °£´ÜÇÏ°Ô µË´Ï´Ù.
class Boogeyman def scare_factor @scare_factor end def hiding_place @hiding_place end def scare_factor=(factor) @scare_factor = factor end def hiding_place=(place) @hiding_place = place end end monster1 = Boogeyman.new("Crazy Cal", "Nashville, TN") monster1.scare_factor = 6000 puts monster1.scare_factor ¡æ 6000 º¸¿©µå¸° ¿¹Á¦¿¡¼ ÀÐÀ» ¼ö ÀÖ´Â ¼Ó¼ºÀ» ¸¸µé±â À§Çؼ ±×Àú ÀνºÅϽº °ªÀ» ¹ÝȯÇÏ´Â ¸Þ¼Òµå¸¦ ¸¸µé¾ú½À´Ï´Ù. ¸Þ¼Òµå¿¡¼ ¸¶Áö¸·À¸·Î »ç¿ëÇÑ °ªÀÌ ¹ÝȯµÈ´Ù´Â °ÍÀº ±â¾ïÇϽðÚÁÒ? ¼Ó¼ºÀº °ªÀ» Àаųª ¾²´Â °£´ÜÇÑ ¸Þ¼ÒµåÀÔ´Ï´Ù. °ªÀ» ¼³Á¤ÇÒ ¼ö ÀÖ´Â ¸Þ¼Òµå¸¦ ¸¸µå·Á¸é ±×³É °£´ÜÇÏ°Ô ¸Þ¼Òµå À̸§ µÚ¿¡ µîÈ£ (=)¸¦ ºÙ¿©ÁÖ½Ã¸é µË´Ï´Ù. Á¦°¡ Çß´ø °Íó·³ ¹Ù·Î ÀνºÅϽº º¯¼ö¸¦ ¹ÝȯÇϵµ·Ï ÇÒ ¼öµµ ÀÖ°í Á¦´ë·Î µÈ ÇüÅÂ¿Í Çü½ÄÀ» °®Ãß¾ú´ÂÁö °Ë»çÇÏ¿© Á¦´ë·Î µÈ Çü½ÄÀ¸·Î º¯È¯ÇÏ¿© º¯¼ö¸¦ ¼³Á¤ÇÒ ¼öµµ ÀÖ½À´Ï´Ù. Ŭ·¡½º ³»¿¡ °ªÀ» ½á¾ß ÇÏ´Â °ÍµéÀÌ ¸¹Àº °æ¿ì¿¡´Â ÁÁÁö ¾ÊÀ» ¼öµµ ÀÕ¾¹´Ï´Ù. Á¦ ¸»Àº C#¿¡¼ º¯¼ö¸¦ Ŭ·¡½º ¿ÜºÎ¿¡¼ º¸ÀÌ°Ô ÇÏ·Á°í ¸ðµç º¯¼ö¿¡ "public"À» ºÙÀÌ´Â °Íó·³ ¸»ÀÔ´Ï´Ù! ¼Ó¼ºÀÌ ÀϹÝÀûÀ¸·Î ¸¹ÀÌ »ç¿ëµÇ´Â ±¸¼ºÃ¼À̱⠶§¹®¿¡ ·çºñ¿¡´Â ¾ÆÁÖ °£´ÜÇÏ°Ô ÇÒ ¼ö ÀÖ´Â ±â´ÉÀ» °®Ãß°í ÀÖ½À´Ï´Ù.
class Boogeyman attr_reader :scare_factor, :hiding_place attr_writer :scare_factor, :hiding_place end ÀÌÁ¦ ¿¹Àüó·³ ¼Ó¼ºÀ» ÀÐ°í ¾²°í ÇÏ½Ç ¼ö ÀÖ½À´Ï´Ù. ÀÌ·± ¹æ½ÄÀ¸·Î ¸Þ¼Òµå¸¦ ¸¸µé¾îµµ ÀÌÀü¿¡ ¸¸µé¾ú´ø °Í°ú µ¿ÀÏÇÑ ´É·ÂÀ» º¸À¯ÇÏ°í ÀÖ½À´Ï´Ù. ÀÌ Å×Å©´ÐÀ» ÀÌ¿ëÇÏ¸é ´õ ½±°Ô ¸Þ¼Òµå¸¦ ¾µ ¼ö ÀÖÁö¸¸ Àаųª ¾²´Â ¸Þ¼Òµå¸¦ ¸¶À½´ë·Î Á¤ÀÇÇÒ ¼ö ÀÖ´Â À¯¿¬¼ºÀÌ ¶³¾îÁý´Ï´Ù. ¿¹¸¦ µé¾î¼ µÎ·Á¿òÀÇ Á¤µµ¸¦ µÎ·Á¿ò±×·¥(Fg) ´ÜÀ§·Î Ãâ·ÂÇÑ´Ù°í Çϸé Àд ¸Þ¼Òµå¸¦ ´ÙÀ½°ú °°ÀÌ ÀÛ¼ºÇÏ¿© ȸ鿡 Ãâ·ÂÇÒ ¼ö ÀÖ½À´Ï´Ù.
class Boogeyman attr_writer :scare_factor def scare_factor return str(@scare_factor / 1000) + "Fg" end end monster1 = Boogeyman.new("Psycho Sally", "Los Angeles, CA") monster1.scare_factor = 6000 puts monster1.scare_factor ¡æ 6Fg ¾î¶² »ç¶÷µéÀº ÀÌ°ÍÀ» °¡»ó ¼Ó¼ºÀ̶ó°í ºÎ¸£Áö¸¸ Á¦ »ý°¢¿¡´Â ´Ù¸¥ Ưº°ÇÑ À̸§ÀÌ ÇÊ¿äÇÑ °Í °°½À´Ï´Ù. ÀÌ°ÍÀ» ¾î¶»°Ô ºÎ¸£µç °£¿¡ ¿©·¯ºÐÀÇ Å¬·¡½ºÀÇ ±¸ÇöÀ» ¼û±æ ¼ö ÀÖ´Â ¸ÚÁø ¹æ¹ýÀÔ´Ï´Ù. ¿ÜºÎ ¼¼°è¿¡¼´Â ±×³É º¸Åë ¼Ó¼ºÃ³·³ º¸ÀÔ´Ï´Ù¸¸ ¿©·¯ºÐÀº Áø½ÇÀ» ¾Ë°í ÀÖ½À´Ï´Ù! ÀÌ°ÍÀÌ »ç¶÷ÀÌ ½±°Ô ¾µ ¼ö ÀÖ´Â ÀÛÀº ¹æ¹ýÀÔ´Ï´Ù.
1.3.4. Á¢±Ù Á¦¾î ¶¿ì¸® ¸Þ¼Òµå¿Í ¼Ó¼ºµéÀº ¹«¹æºñ·Î ¿·Á Àִµ¥, ÀÌÁ¦ ¿ì¸® Ŭ·¡½ºÀÇ ºÎºÐ¿¡ Á¢±ÙÇÏ´Â °ÍÀ» Á¦¾îÇÒ ¼ö ÀÖ´Â ¹æ¹ýÀ» »ý°¢ÇØ º¾½Ã´Ù. Áö±Ý±îÁö initialize(ÀÌ ¸Þ¼Òµå´Â Ç×»ó
private ÀÔ´Ï´Ù)¸¦ Á¦¿ÜÇÑ ¸ðµç ¸Þ¼ÒµåµéÀº public (Ŭ·¡½º ³»¿ÜºÎ ¸ðµÎ¿¡¼ Á¢±ÙÇÒ ¼ö ÀÖÀ½)À̾ú½À´Ï´Ù. ÀÌ°ÍÀÌ ·çºñÀÇ ±âº» µ¿ÀÛ¹æ½ÄÀ̱⠶§¹®¿¡ ´ÙÀ½ ¿¹Á¦¿Í °°ÀÌ ¸Þ¼Òµå¸¦ Ãß°¡ÇØ º¾½Ã´Ù.
class Boogeyman def scare(who) puts "I just scared the bejezus out of #{who}!" end end ¾Æ¹«·± Á¢±Ù Á¦¾î¸¦ ¸í±âÇÏÁö ¾Ê¾Ò±â ¶§¹®¿¡ ÀÌ ¸Þ¼Òµå´Â
public ÀÔ´Ï´Ù. ÀÌ°ÍÀ» º¸È£ÇÏ·Á´Â ¸Þ¼Òµå ¾Õ¿¡ protected ¶ó°í ½á ÁÜÀ¸·Î½á protected (±× ÀڽŰú »ó¼Ó¹ÞÀº Ŭ·¡½º¿¡¼¸¸ Á¢±ÙÇÒ ¼ö ÀÖÀ½)·Î ¸¸µé ¼öµµ ÀÖ½À´Ï´Ù. ¿¹Á¦¸¦ º¸½Ã°Ú½À´Ï´Ù.
class Boogeyman protected def are_you_a_monster?(whosasking) puts "Yes, #{whosasking}, I am a monster!" return true end end ÀÌÁ¦ ÀÌ ¸Þ¼Òµå¿¡ Á¢±ÙÇÒ ¼ö ÀÖ´Â °´Ã¼´Â
Boogeyman Ŭ·¡½ºÀÇ ÀνºÅϽºÀ̰ųª ±× Ŭ·¡½º¸¦ »ó¼Ó¹ÞÀº Ŭ·¡½ºÀÇ ÀνºÅϽº »ÓÀÔ´Ï´Ù. ÀÌ°ÍÀº °°°Å³ª ºñ½ÁÇÑ Á¾·ùÀÇ Å¬·¡½º¿¡°Ô¸¸ Á¤º¸¸¦ Á¦°øÇÏ·Á°í ÇÒ ¶§ À¯¿ëÇÕ´Ï´Ù. ÇÑÆí ÇöÀç °´Ã¼ÀÇ ÀνºÅϽº¿¡¼¸¸ ÀÌ°ÍÀ» Á¢±ÙÇÒ ¼ö ÀÖ°Ô ÇÏ·Á¸é private À¸·Î Á¤ÀÇÇØ¾ß ÇÕ´Ï´Ù. protected ¿Í private ÀÇ Â÷ÀÌ´Â ±Ù¼ÒÇÕ´Ï´Ù. protected ´Â °°Àº Ŭ·¡½º³ª »ó¼Ó¹ÞÀº Ŭ·¡½ºÀÇ ´Ù¸¥ ÀνºÅϽº¿¡¼ Á¢±ÙÇÒ ¼ö ÀÖÁö¸¸ private Àº ÇöÀç ÀνºÅϽº¿¡¼¸¸ Á¢±ÙÇÒ ¼ö ÀÖ½À´Ï´Ù. ÀÌÁ¦ phone_home À̶ó´Â ¸Þ¼Òµå¸¦ Boogeyman¿¡ Ãß°¡ÇÏ°í scare ¸Þ¼Òµå¿¡¼ ±×°ÍÀ» »ç¿ëÇϵµ·Ï ÀçÁ¤ÀÇÇØ º¾½Ã´Ù.
class Boogeyman private def phone_home(message) # TODO: Actually make this phone home # For now, we'll just write to the console puts message end public def scare(who) phone_home("I just scared the living poop out of #{who}!" end end ÀÌÁ¦ ÇöÀç ¸Þ¼Òµå¿¡¼¸¸
phone_home ¸Þ¼Òµå¿¡ Á¢±ÙÇÒ ¼ö ÀÖ½À´Ï´Ù. ¾Æ¹«³ª Áý¿¡ ÀüÈÇؼ ÀÌ ±«¹°Ã³·³ º¸ÀÌ°Ô ÇÏ°í ½ÍÁö´Â ¾ÊÀ¸½ÃÁÒ? public Å°¿öµå ¿ª½Ã ¸í½ÃÀûÀ¸·Î ¼±¾ðÇÏ¿© °°Àº ¹æ¹ýÀ¸·Î private ¸Þ¼Òµå¸¦ Á¤ÀÇÇÑ ´ÙÀ½¿¡ ´Ù½Ã ¸ðµå¸¦ ¹Ù²Ù°í ½ÍÀ» ¶§ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù.
1.3.5. Ŭ·¡½º¿Í ½ºÄÚÇÁ ³»ÀÇ °´Ã¼ ¶Áö±Ý±îÁö ÀνºÅϽº, ÀνºÅϽº º¯¼ö, ÀνºÅϽº ¸Þ¼Òµå µîÀ» ´Ù·ç¾úÁö¸¸ Ŭ·¡½ºÀÇ ÀνºÅϽºº¸´Ù Ŭ·¡½ºÀÇ »óŸ¦ À¯ÁöÇÒ ÇÊ¿äµµ ÀÖ°í, ¾î¶² ÇÑ ÀνºÅϽº¿¡ ±¹ÇѵÇÁö ¾ÊÀº ¸Þ¼Òµå¸¦ Á¦°øÇØ¾ß ÇÒ ÇÊ¿ä°¡ ÀÖÀ» ¶§µµ ÀÖ½À´Ï´Ù. ÀÌ·² ¶§ »ç¿ëÇÏ´Â °ÍÀÌ Å¬·¡½º »ó¼ö, º¯¼ö, ¸Þ¼ÒµåÀÔ´Ï´Ù.
Ŭ·¡½º »ó¼ö´Â °ªÀÌ ¹Ù²î´Â º¯¼ö¿Í´Â ´Þ¸® º¯ÇÏÁö ¾Ê´Â °ªÀ» Ŭ·¡½º ½ºÄÚÇÁ ³»¿¡ µÑ ¼ö ÀÖ´Â ¼Õ½¬¿î ¸ÞÄ¿´ÏÁòÀÔ´Ï´Ù. Ŭ·¡½º »ó¼ö¸¦ ¸¸µå·Á¸é °£´ÜÈ÷ »ó¼ö À̸§°ú °ªÀ» Ŭ·¡½º Á¤ÀǺο¡ µÎ¸é µË´Ï´Ù.
class Boogeyman MY_BOSS = 'Mr. Boogeyman' end ÀÌÁ¦
Boogeyman Ŭ·¡½º ³»¿¡ ÀÖ´Â ¸ðµç ¸Þ¼Òµå(ÀνºÅϽº¿Í Ŭ·¡½º ½ºÄÚÇÁ ³»¿¡ ÀÖ´Â °Í ¸ðµÎ)´Â MY_BOSS °ª¿¡ Á¢±ÙÇÒ ¼ö ÀÖ½À´Ï´Ù.
Ŭ·¡½º º¯¼ö¸¦ ¸¸µå·Á¸é °ñ¹ðÀÌ µÎ °³(@@)¸¦ º¯¼ö ¾Õ¿¡ ºÙÀÌ¸é µË´Ï´Ù. ÀνºÅϽº º¯¼ö¿Í °ÅÀÇ °°°Ô µ¿ÀÛÇÏÁö¸¸ ƯÁ¤ °´Ã¼ÀÇ »óÅ°¡ ¾Æ´Ï¶ó Ŭ·¡½ºÀÇ »óÅ°¡ µË´Ï´Ù. ¿¹¸¦ µé¾î,
Boogeyman ÀÌ ÃÖ±Ù¿¡ Ç®·Á³ °Å·ùÀÚÀÇ À̸§°ú À§Ä¡¸¦ ¾Ë ¼ö ÀÖ´ÂÁö ¿äûÇÑ´Ù¸é ÀÌ°ÍÀ» Ŭ·¡½º º¯¼ö·Î ¾Ë·ÁÁÙ ¼ö ÀÖ½À´Ï´Ù.
class Boogeyman # We'll redefine initialize def initialize(name, location) @name = name @location = location @@latest = @name @@location = @location puts "Yes, master?" end end monster1 = Boogeyman.new("Macabre Mac", "Seattle, WA") ¡æ Yes, master? monster2 = Boogeyman.new("Gory Gary", "Reston, WV") ¡æ Yes, master? puts Boogeyman.latest ¡æ Gory Gary ¿¹Á¦¿¡¼ º¸¾ÒµíÀÌ, Ŭ·¡½º À̸§¿¡ Á¡À» Âï°í º¯¼ö À̸§À» »ç¿ëÇÕ´Ï´Ù. Ŭ·¡½º »ó¼öó·³ ÀÌ °ªÀ» Ŭ·¡½º ½ºÄÚÇÁ ³»¿¡¼³ª ÀνºÅϽº ½ºÄÚÇÁ ³»ÀÇ ¸Þ¼Òµå¿¡¼ Á¢±ÙÇÒ ¼ö ÀÖ½º´Ï´Ù.
@@location , @location , location Àº ¸ðµÎ ´Ù¸¥ ½ºÄÚÇÁ ³»¿¡ ÀÖ´Ù´Â °ÍÀ» ÁÖÀÇÇϽʽÿÀ. ¾Æ¹« ¹®Á¦¾øÀÌ °°Àº À̸§À» ¾µ ¼ö ÀÖ½À´Ï´Ù. ¼¼ º¯¼öÀÇ À̸§À» °°°Ô ÇÏ´Â °ÍÀ» ±ÇÀåÇÏ´Â °ÍÀº ¾Æ´ÏÁö¸¸ °¡´ÉÇϱâ´Â ÇÏ°í °¡²û¾¿ À¯¿ëÇϱ⵵ ÇÕ´Ï´Ù.
Ŭ·¡½º ¸Þ¼Òµå´Â ÀνºÅϽº¿¡¼ Ưº°È÷ ÇÊ¿äÇÏÁö ¾ÊÀ» °ÍµéÀ» ÀνºÅϽº°¡ ¾Æ´Ï¶ó Ŭ·¡½º¿¡¼ Á¦°øÇÏ´Â °ÍÀÔ´Ï´Ù. ÀÌ·± Ư¡Àº ¿¹¸¦ µé¾î ¹Ì¸® ¸¸µé¾î ³õÀº Ŭ·¡½ºÀÇ ÀνºÅϽº¸¦ Á¦°øÇÏ°í ½ÍÀ» ¶§ À¯¿ëÇÕ´Ï´Ù. ¿¹¸¦ µé¾î
Person À̶ó´Â Ŭ·¡½ºÀÇ man À̶ó´Â À̸§ÀÇ ¸Þ¼Òµå´Â ¼ºº° Çʵ带 ¼³Á¤ÇÏ°Ô ÇÒ ¼öµµ ÀÖ½À´Ï´Ù. ¸¸ÀÏ ÄÚµå ¼ÓÀ¸·Î ÆÄ°íµé°Å³ª ½º½º·Î ·çºñ Äֿܼ¡¼ ã¾Æ³»±â°¡ ³Ê¹« ±ÍÂú¾Æ¼(ÀÌÁ¦ ÅðÁ÷Ç߰ŵç¿ä) ¸¶Áö¸· ·Îº¿ÀÇ À̸§À» Ãâ·ÂÇØÁִ Ŭ·¡½º ¸Þ¼Òµå¸¦ ÀÛ¼ºÇØ´Þ¶ó°í Boogeyman ÀÌ ¿äûÇÑ´Ù¸é ´ÙÀ½°ú °°ÀÌ ÀÛ¼ºÇÒ ¼ö ÀÖ½À´Ï´Ù.
class Boogeyman def Boogeyman.latest_monster puts "The latest monster is #{@@latest}." puts "He is in #{@@location}." end end Boogeyman.latest_monster ¡æ The latest monster is Gory Gary. ¡æ He is in Reston, WV. latest_monster ÀÌ Å¬·¡½º ¸Þ¼ÒµåÀ̱⠶§¹®¿¡, ±× ½ºÄÚÇÁ ³»¿¡ ÀÖ´Â º¯¼öµé(Ŭ·¡½º º¯¼öµé)¸¸ Á¢±ÙÇÒ ¼ö ÀÖ½À´Ï´Ù. ¸Å°³º¯¼öÀÇ ÇüÅ·Π¸Þ¼Òµå·Î ³Ñ°Ü¹Þ°Å³ª Ŭ·¡½º º¯¼ö·Î ÂüÁ¶¹Þ°Å³ª ÇÏÁö ¾Ê´Â ÀÌ»ó ÀνºÅϽº º¯¼ö¿¡´Â Á¢±ÙÇÒ ¼ö ¾ø´Ù´Â °ÍÀÔ´Ï´Ù. ´Ù¸¥ Ŭ·¡½º ½ºÄÚÇÁ ³»ÀÇ º¯¼öµé, Ŭ·¡½º ¸Þ¼ÒµåµéÀº ÀνºÅϽº ½ºÄÚÇÁ ³»¿¡ ÀÖ´Â °´Ã¼¿Í ¸Þ¼Òµå¿¡¼´Â º¸ÀÌÁö ¤·³º½À´Ï´Ù. ÀÌ°ÍÀº Ŭ·¡½º ¸Þ¼Òµå¸¦ È£ÃâÇÒ ¶§ Àüü À̸§À» ´Ù ÀÔ·ÂÇØ¾ß ÇÑ´Ù´Â ¶æÀÔ´Ï´Ù. Áï, latest_monster ³ª MY_BOSS ȤÀº @@latest ¸¦ ¹Ù·Î È£ÃâÇÒ ¼ö ¾ø°í Boogeyman.latest_monster ¿Í °°ÀÌ È£ÃâÇØ¾ß ÇÑ´Ù´Â °ÍÀÔ´Ï´Ù.
1.4. ¸ðµâ ¶¾Æ¸¶µµ ¶§·Î´Â ¸¹Àº Äڵ带 ü°èÀûÀ¸·Î Á¤¸®ÇؾßÇÒ ¶§°¡ ÀÖÀ» °Ì´Ï´Ù. ¸¹Àº ÄÚµå ¸»ÀÔ´Ï´Ù. Áß±¹ÀÇ Àα¸Ã³·³ ¸¹Àº ÄÚµå ¸»ÀÌÁö¿ä. Äڵ尡 ÇÑ Å¬·¡½º ¾È¿¡ µé¾î°¡°Å³ª ¿Ïº®ÇÏ°Ô ¿¬°èµÇ¾î ÀÖÁö´Â ¾ÊÀ» °ÍÀÔ´Ï´Ù. ¾Æ¸¶µµ ¸î°¡Áö À̽´°¡ ÀÖ½À´Ï´Ù. ¾Æ¸¶µµ Áö³ ÁÖ¿¡ grumpy_butt.rb¿¡ ÀÖ´ø ÀÎÀÚ ¶§¹®¿¡ È°¡ ³ª ÀÖÀ» °Ì´Ï´Ù. ¾î·µç ¿©·¯ºÐÀº ±×°ÍÀ» ¼·Î ¸ð¾Æ¼ ´Ù½Ã »ç¿ëÇÒ ¼ö ÀÖ°Ô Ã¼°èÀûÀ¸·Î Á¤¸®ÇÏ´Â ÀÏÀ» ¸Ã¾Ò½À´Ï´Ù. º¸Åë C³ª PHP¿¡¼´Â °£´ÜÈ÷ ÆÄÀÏ ³»¿¡ Äڵ带 Áý¾î ³Ö°í ÇÊ¿äÇÑ °÷¿¡¼ Æ÷ÇÔ(include)ÇÒ °ÍÀÔ´Ï´Ù. ±×·¯³ª À̸§ÀÌ °°Àº ¸Þ¼Òµå³ª »ó¼ö°¡ ÀÖ´Ù¸é ¾î¶»°Ô µÇ°Ú½À´Ï±î? ÆÒ´õ °ÝÅõ °ÔÀÓÀ» ¸¸µé°í ÀÖ´Ù°í ÇսôÙ. °ÔÀÓ ³»¿¡¼ Á×À» ¼ö Àִ ȸ¼öÀÎ, Àüü ¸ñ¼ûÀÇ ¼ö¸¦ ³ªÅ¸³»´Â
DEATH ¶ó´Â »ó¼ö¸¦ const_values.rb ¿¡ µÎ¾ú´Âµ¥ fighter_values.rb ÆÄÀÏ¿¡ Death¶ó´Â À̸§ÀÇ Ç÷¹À̾îÀÇ °ªµéÀ» ¹è¿·Î °®°í ÀÖ´Â DEATH ¶ó´Â »ó¼ö°¡ ¶Ç ÀÖ½À´Ï´Ù. µÎ ÆÄÀÏÀÌ ¸ðµÎ Æ÷ÇԵǾî¾ß Çϴµ¥, À̸§ Ãæµ¹ÀÌ »ý±â°Ô µË´Ï´Ù. DEATH_VALUES_BECAUSE_I_CANT_INCLUDE_IT_WITHOUT_A_HUGE_NAME ¶ó´Â ½ÄÀ¸·Î »ó¼ö À̸§À» Áþ±âº¸´Ù´Â °£´ÜÇÑ À̸§À» Áþ´Â °ÍÀÌ ´õ ³ªÀ» °ÍÀÔ´Ï´Ù. ÀÌ·² ¶§ ¸ðµâÀ» ¾²¸é ¸Å¿ì °£ÆíÇÕ´Ï´Ù. »ó¼ö¿Í ¸Þ¼Òµå¸¦ ³×ÀÓ½ºÆäÀ̽º¶ó´Â ±×·ìÀ¸·Î ³í¸®ÀûÀ¸·Î ¸ðÀ» ¼ö ÀÖ°í, ¸ðÈ£ÇÔÀ» ÇÇÇÏ°í ÄÚµåÀÇ ³í¸®ÀûÀΠü°è¸¦ ÀâÀ» ¼ö ÀÖ½À´Ï´Ù. ³×ÀÓ½ºÆäÀ̽º´Â ³×ÀÓ½ºÆäÀ̽º ¹Ù±ù¿¡ ÀÖ´Â Äڵ带 °Çµå¸®´Â À§Çè¾øÀÌ Àç »ç¿ë °¡´ÉÇÑ Å« ±×·ìÀÇ Äڵ带 ÀÛ¼ºÇÒ ¼ö ÀÖ°Ô ÇØ ÁÝ´Ï´Ù. ÀÌ ¸»Àº ¾Æ±î Àü°ú °°Àº °æ¿ì¿¡ FighterValues ¿Í ConstantValues ¶ó´Â ³×ÀÓ ½ºÆäÀ̽º¿¡ °¢°¢ ±× °ªÀ» À¯ÁöÇÒ ¼ö ÀÖ´Ù´Â °ÍÀÔ´Ï´Ù.
1.4.1. ¸ðµâ ¸¸µé±â ¶¸ðµâÀ» ¸¸µå´Â ¹®¹ýÀº Ŭ·¡½º¸¦ ¸¸µå´Â ¹®¹ý°ú ¸Å¿ì À¯»çÇÕ´Ï´Ù.
module Å°¿öµå¸¦ ¸ðµâ À̸§ ¾Õ¿¡ ³õ°í, ±× ´ÙÀ½ ÁÙºÎÅÍ end Å°¿öµå°¡ ³ª¿Ã ¶§±îÁö ¸ðµâ¿¡ Æ÷ÇÔ½Ãų ¸Þ¼Òµå¿Í Ŭ·¡½º¸¦ ÀÛ¼ºÇÏ¸é µË´Ï´Ù. ÀÌÀü¿¡ ¿¹·Î µé¾ú´ø °Í¿¡ ´ëÇÑ ¿¹Á¦¸¦ º¾½Ã´Ù.
module FighterValues BAMBOO_HEAD = { 'life' => 120, 'hit' => 9 } DEATH = { 'life' => 90, 'hit' => 13 } KOALA = { 'life' => 100, 'hit' => 10 } CHUCK_NORRIS = { 'life' => 60000, 'hit' => 99999999 } def chuck_fact puts "Chuck Norris' tears can cure cancer..." puts "Too bad he never cries." end end module ConstantValues DEATH = -5 # Pandas can live PAST DEATH. EASY_HANDICAP = 10 MEDIUM_HANDICAP = 25 HARD_HANDICAP = 50 end puts FighterValues::DEATH ¡æ {'life'=>90,'hit'=>13} puts ConstantValues::DEATH ¡æ -5 ÀÌÁ¦ µÎ °ªÀÌ Ä£±ÙÇÑ È¯°æ¿¡¼ Ãæµ¹¾øÀÌ °øÁ¸ÇÒ ¼ö ÀÖ°Ô µÇ¾ú½À´Ï´Ù. ¾Æ¸¶ "±×³É Ŭ·¡½º¸¦ »ç¿ëÇÏ¸é µÇÁö ¾Ê³ª¿ä?"¶ó°í »ý°¢ÇÏ½Ç °ÍÀÔ´Ï´Ù. óÀ½¿¡ ÀÌ ±¸Á¶¸¦ º¸¾ÒÀ» ¶§ Àúµµ °°Àº »ý°¢À» Çß½À´Ï´Ù. Àú´Â ±× ¶§ ´ÜÁö ¼³°è¿Í ¿Ã¹Ù¸¥ ¼ÒÇÁÆ®¿þ¾î °øÇÐÀ» À§ÇÏ¿©, ¼·Î °°Àº Ŭ·¡½º¿¡ ³ÖÀ» ¸¸Å ¿¬°ü¼ºÀÌ Å©Áö ¾ÊÀº °ÍµéÀ» Çϳª·Î ¹°í ½ÍÀ» ¶§, ¸ðµâÀ̶ó´Â °ÍÀÌ ÀÌ·± ±ÔÄ¢À» ¾î±âÁö ¾ÊÀ¸¸é¼ ±×·¸°Ô ÇÒ ¼ö ÀÖ´Â ÁÁÀº º¯¸íÀ̶ó°í »ý°¢Çß½À´Ï´Ù.
±×·¯³ª Àú´Â ´õ ÈǸ¢ÇÑ ¸éÀÌ ÀÖ´Ù´Â °ÍÀ» ¾Ë¾Ò½À´Ï´Ù.
¸ðµâÀº È¥ÇÕ(mixin)À̶ó´Â ¸ÞÄ¿´ÏÁòÀÌ ÀÖ¾î¼ ¸¶Ä¡ ¿ø·¡ ÀÖ´ø ÄÚµåÀÎ °Íó·³ Ŭ·¡½º ³»·Î È¥ÇÕµÇ¾î µé¾î°¥ ¼ö ÀÖ½À´Ï´Ù. ´õµµ ¸»°í »ó¼ÓÀ̶ó°í »ý°¢ÇØ º¸¼¼¿ä. ÀÌÀü¿¡ »ìÆì º¸¾ÒµíÀÌ, ·çºñÀÇ Å¬·¡½º´Â ÇÑ ¹ø¿¡ ÇÑ Å¬·¡½º·ÎºÎÅÍ »ó¼Ó¹ÞÀ» ¼ö ÀÖ½À´Ï´Ù. ´Ù¸¥ Ŭ·¡½º·ÎºÎÅÍ »ó¼ÓÀ» ¹Þ¾Æ¼ »ó¼Ó »ç½½ °°Àº °ÍÀ» ÀÌ¿ëÇÏ¿©¾ß "´ÙÁß »ó¼Ó"°ú ºñ½ÁÇÑ °ÍÀ» ÇÒ ¼ö ÀÖ½À´Ï´Ù. ½ÇÁ¦·Î´Â ¾Æ´ÏÁö¸¸ ·çºñ¿¡¼ ÇÒ ¼ö ÀÖ´Â °¡Àå ±ÙÁ¢ÇÑ ¹æ¹ýÀÔ´Ï´Ù. È¥ÇÕÀº ±×·± °ÍÀ» ÇÒ ÇÊ¿ä¾øÀÌ ÇÒ ¼ö ÀÖ½À´Ï´Ù. ´Ù¸¥ Ŭ·¡½º·ÎºÎÅÍ »ó¼Ó¹Þ´Â Ŭ·¡½º¸¦ ¸¸µé°í ÇÊ¿äÇÑ ¿©·¯ ¸ðµâÀ» È¥ÇÕÇØ ³ÖÀ» ¼ö ÀÖ½À´Ï´Ù. ƯÈ÷ È¥ÇÕÇÏ·Á°í ÇÏ´Â °ÍÀÌ È¥ÇÕÇÏ´Â °Í ÀÌ¿Ü¿¡ ´Ù¸¥ ¿ëµµ·Î ¾²ÀÌÁö ¾Ê´Â °æ¿ì¿¡ ƯÈ÷ À¯¿ëÇÑ Æ¯Â¡ÀÔ´Ï´Ù. ¿¹Á¦¸¦ º¾½Ã´Ù.
module Movement def run puts "I'm running!" end def walk puts "I'm walking a bit briskly!" end def crawl puts "I'm so slowwww!" end end class Man include Movement def jump puts "I'm bipedal and I can jump like a fool!" end end class Sloth include Movement def flop puts "It's all a lie...all I can do is flop around." end end mister_man = Man.new mister_man.run ¡æ I'm running! mister_slothy = Sloth.new mister_slothy.flop ¡æ It's all a lie...all I can do is flop around. º¸½Ã´Ù½ÃÇÇ ÀÌ°ÍÀº È¥ÇÕÇÒ ÄÚµåÀÇ ÀüºÎ¸¦ »ç¿ëÇÒ ¼ö Àֱ⠶§¹®¿¡ »ó¼Ó°ú À¯»çÇÑ ¸ÞÄ¿´ÏÁòÀÔ´Ï´Ù. È¥ÇÕÇÏ·Á¸é °£´ÜÈ÷ ¸ðµâÀ» Á¤ÀÇÇÏ°í
include Å°¿öµå¸¦ ¾²°í ¸ðµâ À̸§À» ¾²¸é µË´Ï´Ù. Àú´Â ºÐ¸íÈ÷ ¸ðµâÀ̶ó°í Çß½À´Ï´Ù. include Å°¿öµå´Â PHP³ª C++ó·³ ´Ù¸¥ ÆÄÀÏÀ̳ª ¶óÀ̺귯¸®¸¦ Æ÷ÇÔÇÏ´Â Å°¿öµå°¡ ¾Æ´Õ´Ï´Ù. ÀÌÁ¦ºÎÅÍ ÀÌ Å¬·¡½º´Â ¸ðµâ ³»¿¡ ÀÖ´Â ¸ðµç »ó¼ö¿Í ¸Þ¼Òµå¿¡ Á¢±ÙÇÒ ¼ö ÀÖ°Ô µË´Ï´Ù. ÀÌ ¿¹Á¦°¡ ÀÌ ¸ÞÄ¿´ÏÁòÀÇ Á¤´ç¼º(¿¹¸¦ µé¾î¼ ¸ðµâ »ó¼ö°¡ È¥ÇÕµÇ¾î µé¾î°¡´Â °ÍÀÇ À¯¿ë¼ºÀ» º¸¿©ÁÖÁö´Â ¸øÇÏ°í ÀÖ°í È¥ÇÕµÇ¾î µé¾î°£ Ŭ·¡½º¿¡ º°´Ù¸¥ ¿µÇâÀ» ³¢Ä¡Áö ¸øÇÏ°í ÀÖ½À´Ï´Ù)À» º¸¿©ÁÖÁö ¸øÇÑ´Ù´Â °ÍÀº ºÐ¸íÇÏÁö¸¸ ÀÌ°ÍÀº ¿©·¯ºÐ²²¼ ÀÐ°í ´õ ±íÀÌ ½ÇÇèÇØ º¸½Ã¶ó´Â ¶æ¿¡¼ ¸¸µç ÀÔ¹®¿ë ÄÚµåÀÔ´Ï´Ù. ³ªÁß¿¡ ¹è¿ì°ÚÁö¸¸ Ŭ·¡½º¿Í È¥ÇÕÀÌ ½ÇÁ¦·Î »óÈ£ÀÛ¿ëÇÏ¸é¼ ½ÇÁ¦·Î ¸¶¹ýÀÌ ÀϾ´Ï´Ù. Singleton À̳ª Comparable °ú °°Àº ·çºñ¿¡ ³»ÀåµÈ È¥ÇÕüµéÀº ¿©·¯ºÐ²²¼ ÀÛ¼ºÇϽŠŬ·¡½º¿Í ¸î¸î ·¹ÀϽº È¥ÇÕü¸¦ ´ë´ÜÇÏ°Ô È®ÀåÇÒ °ÍÀÔ´Ï´Ù. ±×·¯³ª ±×°ÍÀº ÀÌ ÁÖÁ¦¿¡ ´ëÇÑ °í±Þ ÁÖÁ¦ÀÔ´Ï´Ù.
ÀÌÁ¦ ÀÌ°ÍÀÌ ¾ÆÁÖ ÈǸ¢ÇÏ´Ù°í »ý°¢ÇϽðÚÁö¸¸ Á¶½ÉÇÏ¼Å¾ß ÇÒ °ÍÀÌ ÀÖ½À´Ï´Ù. È¥ÇÕü¸¦ Àß ÀÛ¼ºÇÑ °æ¿ì¿¡´Â ÀÌ°ÍÀÌ ¸ÚÁöÁö¸¸ °³¹ßÀÚ°¡ ÁÖÀǸ¦ ±â¿ïÀÌÁö ¾Ê°í À̸§À» ºÙÀ̴µ¥ ÁÖÀǸ¦ ±â¿ïÀÌÁö ¾Ê´Â´Ù¸é ÇÁ·Î±×·¥¿¡ Å« È¥¶õÀÌ »ý±â°Ô µË´Ï´Ù. ¿¹¸¦ µé¾î¼ ÆÄÀÌ°ªÀ» ¼Ò¼öÁ¡ 72¹ø° ÀÚ¸®±îÁö °®°í ÀÖ´Â PI¶ó´Â »ó¼ö°¡ ÀÖ´Ù°í ÇսôÙ. ÀÌ°ÍÀº ÀÌ Á¤µµÀÌ Á¤¹Ðµµ°¡ ÇÊ¿äÇÏ¿© Á÷Á¢ ÀÔ·ÂÇÑ °ÍÀÔ´Ï´Ù. ±×·±µ¥ ÀÌ°ÍÀ» ºô¸® ¸ÆµÎÆÛ½º¾¾°¡ ÀÛ¼ºÇÑ »ï°¢ÇÔ¼ö ¶óÀ̺귯¸®¿¡ È¥ÇÕÇÏ¿´´Âµ¥ ÀÌ ¶óÀ̺귯¸®¿¡¼´Â ¼Ò¼öÁ¡ 5° ÀÚ¸®±îÁö ±¸ÇÑ ÆÄÀÌ°ªÀ»
PI ¶ó´Â »ó¼ö¿¡ ´ã¾Æ µÎ¾ú´Ù°í ÇսôÙ. ¿©·¯ºÐÀº 72¹ø° ÀÚ¸®±îÁö Á¤¹ÐÇÏ°Ô ±¸ÇØ¾ß ÇÏÁö¸¸ ¹Ùº¸°°Àº ºô¸® ¸ÆµÎÆÛ½º ¾¾ ´öºÐ¿¡ ÀÌ »ó¼ö°¡ ¿ì¼±ÇÏ°Ô µÉ ¼öµµ ÀÖ½À´Ï´Ù. ¸ðµâ À̸§À̳ª º»ÀÎ À̸§À» ¾Õ¿¡ Áý¾î ³Ö¾î¼ À̸§ ÁöÀº °ÍÀ» À¯ÀÏÇÏ°Ô Çϼż ´Ù¸¥ Äڵ带 °Çµå¸®Áö ¾Ê°Ô ÇØ¾ß ÇÕ´Ï´Ù.
ÀÌÁ¦ ÀÌ·¸°Ô »ý°¢ÇÏ½Ç °ÍÀÔ´Ï´Ù. "Àú ¸ÛûÀÌ°¡ ¸ðµâ ¾È¿¡ ¸Þ¼Òµå¸¦ ³Ö¾î µ×´Âµ¥ ¸Þ¼ÒµåÀÇ °æ¿ì¿¡´Â ¾î¶²°¡¿ä!? Àü ±×ÀÇ °í¾çÀ̸¦ Á×ÀÌ°í Á¦ µ·À» µ¹·Á¹Þ°í ½ÍÀºµ¥¿ä! Á¦ ¸Þ¼Òµå°¡ ¸¶Âù°¡Áö·Î Àú·± Áöµ¶ÇÑ ¿î¸íÀ» °Þ°Ô µÉ±î¿ä?" ÀÌ·± °Ý·ÄÇÑ °¨Á¤ °®°ÚÁö¸¸ ¸¶À½À» ´©±×·¯¶ß¸®½Ã°í, ÁÁÀº Ä£±¸¿©, ¸Þ¼Òµå´Â °°Àº ¿î¸íÀ» °ÞÁö ¾ÊÀ» °Ì´Ï´Ù. ¸Þ¼Òµå¸¦ È£ÃâÇÏ¸é ·çºñ´Â óÀ½¿¡ ¿ø·¡ Ŭ·¡½º¿¡ ÀÖ´ø ¸Þ¼Òµå¸¦ ¸ÕÀú º¾´Ï´Ù. ÀÌ°ÍÀÌ ¾øÀ¸¸é È¥ÇÕü¸¦ º¸°í, ¾øÀ¸¸é »óÀ§ Ŭ·¡½º¿Í ±× È¥ÇÕü¸¦ º¾´Ï´Ù. »ó¼öÀÇ µ¿ÀÛ ¹æ½Ä°ú´Â ¿ÏÀüÈ÷ ¹Ý´ëÀÔ´Ï´Ù. ±×¸®°í Àú´Â ¿Ö ÀÌ·±Áö ¸ð¸£°Ú½À´Ï´Ù. ÀÌ°ÍÀº ÃູÀÏ ¼öµµ ÀÖ°í, ÀúÁÖÀÏ ¼öµµ ÀÖ½À´Ï´Ù. ¿©·¯ºÐ²²¼ ÀÛ¼ºÇϽŠ¸Þ¼Òµå¸¦ ´ëüÇÏ°í ½ÍÀ» ¼öµµ ÀÖÀ» °ÍÀÔ´Ï´Ù. ÇÏÁö¸¸ ÀϹÝÀûÀ¸·Î ÀÌ°ÍÀÌ °¡Àå ¾ÈÀüÇÑ »ó°ü °ü°èÀ̺ó´Ù.
1.5. ÆÄÀÏ ¶ÇÁ·Î±×·¥ÀÌ Á¡Á¡ Ä¿Áö¸é 5MBÂ¥¸® Å« ÆÄÀÏ Çϳª ¾È¿¡ ¸ðµç Äڵ带 ´Ù Áý¾î³Ö°í ½ÍÁö´Â ¾ÊÀ¸½Ç °ÍÀÔ´Ï´Ù. Äڵ带 ÆÄÀÏ·Î ³ª´©¾î¼ ´ã´Â °ÍÀº Äڵ带 ³ª´©´Â °¡Àå ¿À·¡µÇ°í ½¬¿î ¹æ¹ý Áß¿¡ ÇϳªÀÔ´Ï´Ù. ÀÌ°ÍÀ» °¡Àå ¸¶Áö¸·¿¡ ´Ù·ç´Â ÀÌÀ¯´Â Äڵ带 ³ª´©´Â ¹æ¹ý¿¡ ´ëÇÑ ¿©·¯ºÐÀÇ ´ë´äÀÌ "ÆÄÀÏ·Î ³ª´²¼ Áý¾î ³Ö¾î!"¶ó´Â °ÍÀÌ ¾Æ´Ï±æ ¹Ù·¨±â ¶§¹®ÀÔ´Ï´Ù. ·çºñ¿¡´Â ´õ ¸¹°í ´õ ÁÁ°í ÀûÇÕÇÑ ¹æ¹ýÀÌ ÀÖ½À´Ï´Ù. Á¦ »ý°¢¿£ PHP ÇÁ·Î±×·¡¸ÓµéÀÌ Æ¯È÷ ÀÌ·±½ÄÀ¸·Î ¿©±â Àú±â¼ »ó½ÀÀûÀ¸·Î Äڵ带 Æ÷ÇÔ½Ãų °Í °°½À´Ï´Ù. »èÁ¦ ¸í·É°ú °°Àº ¹úä¿ë Ä®ÀÌ ÀÖ¾î¾ß µ¹¾Æ´Ù´Ò ¼ö ÀÖ´Â ÆÄÀÏÀÇ Á¤±ÛÀ» ¸¸µé°ÚÁö¿ä. ÁÖÁ¦¿¡¼ ¹þ¾î³µ³×¿ä. ·çºñ¿¡¼ ÆÄÀÏÀ» Æ÷ÇÔ½ÃÅ°·Á¸é µÎ °¡Áö ¹æ¹ýÀÌ ÀÖ½À´Ï´Ù.
load ¿Í ÀÌ°ÍÀÇ ¿ì¾ÆÇÑ »çÃÌÀÎ require ÀÔ´Ï´Ù. µÑÀÇ Â÷ÀÌÁ¡À̶ó°í Çϸé load Å°¿öµå´Â ¼Ò½º ÄÚµå ÆÄÀÏÀ» ¹«Á¶°Ç Æ÷ÇÔ½ÃÅ°°í require ´Â ¿ÀÁ÷ ÇÑ ¹ø¸¸ Æ÷ÇÔ½Ãŵ´Ï´Ù. Áï, require ¸¦ ÇÏ¸é º¯¼ö¿Í ¸Þ¼Òµå°¡ °ãÄ¡Áö ¾Ê½À´Ï´Ù.
load "libraries/myfile.rb" require "/home/myaccount/code/libraries/myotherfile.rb" °¢°¢ÀÇ Å°¿öµå´Â »ó´ë °æ·Î¿Í Àý´ë °æ·Î ¸ðµÎ¸¦ ¹Þ½À´Ï´Ù. ·çºñ°¡ »ó´ë °æ·Î·Î ÀνÄÇÑ´Ù¸é ÇöÀç µð·ºÅ丮(±Ã±ÝÇϽŠºÐµéÀ» À§ÇÏ¿©: ÀÌ°ÍÀº $:¿¡ ÀúÀåµÇ¾î ÀÖ½À´Ï´Ù.)¿¡¼ ãÀ» °ÍÀÔ´Ï´Ù.
require ¸í·ÉÀº Á¶°Ç¹®À̳ª ¼øȯ, ±× ¿Ü ´Ù¸¥ ±¸¼ºÃ¼¿¡¼µµ »ç¿ëÇÒ ¼ö ÀÖ°í º¯¼ö¸¦ ÀÌ¿ëÇÏ¿© °æ·Î¸¦ ÁöÁ¤(ÀÌ°ÍÀº load ·Î´Â ºÒ°¡´ÉÇÕ´Ï´Ù)ÇÒ ¼öµµ ÀÖ½À´Ï´Ù. Æ÷ÇÔ½ÃŲ ÆÄÀÏÀÇ Áö¿ª º¯¼ö´Â Æ÷ÇÔÇÑ ÆÄÀÏÀÇ ¹®¸ÆÀ¸·Î »õ¾î³ª¿ÀÁö ¾Ê½À´Ï´Ù. ÀÌ°ÍÀº PHP, C/C++ÀÇ µ¿ÀÛ°ú´Â ´Ù¸¨´Ï´Ù. ÀÌ º¯¼öµéÀº ÀÛ¼º½ÃÀÇ ¹®¸Æ¿¡ ¹¿©¹ö¸®°Ô µË´Ï´Ù.
1.6. ÀÌ Àå¿¡¼´Â ¶Äڵ带 ´õ ³í¸®ÀûÀÌ°í »ç¿ëÇϱ⠽¬¿î Á¶°¢À¸·Î ³ª´©´Â ¹ýÀ» ¹è¿ü½À´Ï´Ù. ÀÌ·± °ÍÀ» ¹è¿ü½À´Ï´Ù.
|
Lend money to a bad debtor and he will hate you. |