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. ÀÌ Àå¿¡¼´Â ¶Äڵ带 ´õ ³í¸®ÀûÀÌ°í »ç¿ëÇϱ⠽¬¿î Á¶°¢À¸·Î ³ª´©´Â ¹ýÀ» ¹è¿ü½À´Ï´Ù. ÀÌ·± °ÍÀ» ¹è¿ü½À´Ï´Ù.
|
You can do very well in speculation where land or anything to do with earth is concerned. |













