· KLDP.org · KLDP.net · KLDP Wiki · KLDP BBS ·
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À¸·Î º¸³ÂÀ» ¶§, ¸Þ¼Òµå·Î ¸Å°³º¯¼ö¸¦ º¸³½ ÀûÀÌ ÀÖ½À´Ï´Ù! ±×·± °ÍÀ» ÇÑ´Ù°í ÇÑ Àûµµ ¾ø´Âµ¥ ÀÌ¹Ì ±×·¸°Ô ÇÏ°í ÀÖ¾ú´ø °ÍÀÔ´Ï´Ù! Àú´Â Àº±Ù½½Àû ±×·± ½ÄÀ¸·Î ³Ñ¾î°¬½À´Ï´Ù. Àú´Â ¸» ¼Ø¾¾°¡ ÁÁÀº ¹üÁËÀÚ¶ø´Ï´Ù.

methods.jpg
[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)"À̶ó°í ºÎ¸¨´Ï´Ù(ÀÌ°ÍÀÌ Á» ´õ ¼³¸íÇϱ⠽±½À´Ï´Ù).

duck.jpg
[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. ÀÌ Àå¿¡¼­´Â

Äڵ带 ´õ ³í¸®ÀûÀÌ°í »ç¿ëÇϱ⠽¬¿î Á¶°¢À¸·Î ³ª´©´Â ¹ýÀ» ¹è¿ü½À´Ï´Ù. ÀÌ·± °ÍÀ» ¹è¿ü½À´Ï´Ù.
  • Äڵ带 ºí·Ï, ¸Þ¼Òµå, Ŭ·¡½º, ¸ðµâ, ÆÄÀÏÀ» ÅëÇÏ¿© ³ª´©´Â ¹æ¹ý
  • º¯¼ö ½ºÄÚÇÁÀÇ µ¿ÀÛ°ú ÀÌÁ¡
  • Ŭ·¡½º¿Í °´Ã¼¸¦ Á÷Á¢ ÀÛ¼ºÇÏ°í, ´Ù¸¥ Ŭ·¡½º¿Í °´Ã¼¸¦ º¯°æÇÏ´Â ¹æ¹ý
  • Ŭ·¡½º¿Í Äڵ带 ¼¯°í Ŭ·¡½º¸¦ È®Àå½Ãų ¼ö ÀÖ´Â ¸ðµâ

ID
Password
Join
You love your home and want it to be beautiful.


sponsored by andamiro
sponsored by cdnetworks
sponsored by HP

Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2008-11-04 15:38:13
Processing time 0.0119 sec