· KLDP.org · KLDP.net · KLDP Wiki · KLDP BBS ·
Humble Little Ruby Book/Chap6


1. 6 ¶óÀ̺귯¸®ÀÔ´Ï´Ù


º¸¼Ì´Ù½ÃÇÇ ·çºñ¿¡´Â Á¢±ÙÇÒ ¼ö ÀÖ´Â ³»Àå Ŭ·¡½ºµéÀÌ ¸¹½À´Ï´Ù. °£´ÜÇÑ ÅؽºÆ® ÀÔÃâ·Â¿¡¼­ºÎÅÍ ³×Æ®¿öÅ·°ú ¸ÖƼ¹Ìµð¾î¿¡ À̸£±â±îÁö Á¤¸» ¸¹Àº ¶óÀ̺귯¸®µéÀÌ ÀÖ½À´Ï´Ù. Win32¿Í ³×Æ®¿öÅ© µî ¸î °¡Áö ¶óÀ̺귯¸®¸¦ ¼±ÅÃÇÏ¿© »ìÆ캸¾ÒÁö¸¸, Àâ´ÙÇÑ ¸î °¡Áö Ŭ·¡½ºµéÀ» »¡¸® »ìÆ캸´Âµ¥ ½Ã°£À» ÅõÀÚÇÏ°í ½Í½À´Ï´Ù.

1.1. ¹®ÀÚ¿­ ´Ù·ç±â


·çºñÀÇ ¹®ÀÚ¿­ Áö¿øÀº ÆÞÀ̳ª ´Ù¸¥ ¾ð¾îµé°ú °ßÁÙ ¼ö ÀÖ´Â ¼öÁØÀÔ´Ï´Ù. »ç½Ç»ó ·¡¸® ¿ùÀÌ Áý¿¡ °¡¸é ·çºñ ÇÁ·Î±×·¡¸Ó·Î Å»¹Ù²ÞÇÑ´Ù´Â ¸»µµ µéÀº ÀûÀÌ ÀÖ½À´Ï´Ù. Á¦°¡ ÀÌ·± °ÍÀ» ¾Ë·Áµå·È´Ù´Â °ÍÀ» ´Ù¸¥ »ç¶÷¿¡°Ô ¾Ë¸®Áö ¸¶¼¼¿ä. ¹®ÀÚ¿­À» ´Ù·ç´Âµ¥´Â µÎ °¡Áö ¹æ¹ýÀÌ ÀÖ½À´Ï´Ù. ½ºÆ®¸µ °´Ã¼ÀÇ ÀνºÅϽº ¸Þ¼Òµå¿Í Á¤±Ô½ÄÀÔ´Ï´Ù.

1.1.1. ÀνºÅϽº ¸Þ¼Òµå

·çºñ ½ºÆ®¸µÀº ¹°·Ð °´Ã¼ÀÌ°í, ´Ù¾çÇÑ ¹æ¹ýÀ¸·Î ±×°ÍÀ» ´Ù·ê ¼ö ÀÖ´Â ¸Þ¼Òµå¸¦ Á¦°øÇÕ´Ï´Ù. ¸ÕÀú, Splice(Á¢ÇÕ)¶ó°í ÇÏ´Â °¡Àå ´Ü¼øÇÏ°Ô ´Ù·ê ¼ö ÀÖ´Â °ÍÀ» ¾Ë¾Æº¼ °ÍÀÔ´Ï´Ù. ù ¹ø°·Î Á¢ÇÕÇÏ´Â ¹æ¹ýÀº Á¢ÇÕ ¿¬»êÀÚ¸¦ »ç¿ëÇÏ´Â ¹æ¹ýÀÔ´Ï´Ù. ¹è¿­ ¿¬»êÀÚ ¾²´Â °Íó·³ ¾²½Ã¸é µË´Ï´Ù. °´Ã¼Ã·ÀÚÀÇ ÇüÅ·ΠƯÁ¤ ¿ø¼Ò¿¡ Á¢±ÙÇÒ ¼ö ÀÖ½À´Ï´Ù. ¿¹¸¦ µé¾î ´ÙÀ½°ú °°½À´Ï´Ù.

the_alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
puts the_alphabet[0..2]
¡æ   ABC
puts the_alphabet["HIJ"]
¡æ   HIJ
puts the_alphabet[1,2]
¡æ   BC
the_alphabet[1] = "!"
puts the_alphabet
¡æ   A!CDEFGHIJKLMNOPQRSTUVWXYZ

´Ù¸¥ ¹æ¹ýÀ¸·Î´Â splice ¸Þ¼Òµå¸¦ »ç¿ëÇؼ­ ºñ½ÁÇÑ ¹æ¹ýÀ¸·Î Á¢ÇÕÇÒ ¼ö ÀÖ½À´Ï´Ù.

puts the_alphabet.slice(0, 3)
¡æ   ABC
puts the_alphabet.slice(0..5)
¡æ   ABCDEF

¹®ÀÚ¿­À» ¿øÇϴ´ë·Î ´Ù¾çÇÑ ¹æ¹ýÀ¸·Î ºÙÀÌ°í ÀÚ¸£°í ÇÒ ¼ö ÀÖ½À´Ï´Ù. ´ë¼Ò¹®ÀÚ¸¦ ¹Ù²Ü ¼ö ÀÖ´Â ¸Þ¼Òµåµµ ÀÖÀ¸¸ç, ƯÁ¤ ³»¿ëÀ» ÆíÁýÇϰųª, ¹®ÀÚ¿­À» º¯°æÇÒ ¼ö ÀÖ½À´Ï´Ù. ¿©±â ¿¹Á¦°¡ ÀÖ½À´Ï´Ù.

a_str = "I likE To MesS with STRINGS!"
a_str.downcase
¡æ   i like to mess with strings!
a_str.upcase
¡æ   I LIKE TO MESS WITH STRINGS!
a_str.swapcase
¡æ   i LIKe tO mESs WITH strings!
a_str.capitalize
¡æ   I like to mess with strings!
a_str.capitalize!
puts a_str
¡æ   I like to mess with strings!
a_str.squeeze
¡æ   I like to mes with strings!

Squeeze ¸Þ¼Òµå´Â °°Àº ¹®ÀÚ°¡ ¿¬´Þ¾Æ ÀÖ´Â °æ¿ì¿¡ ÀÌ°ÍÀ» ÇϳªÀÇ ¹®ÀÚ¸¸ ³ª¿Àµµ·Ï ¹Ù²Ù¾îÁִµ¥, ÀÌ°ÍÀ» Á¦¿ÜÇÏ°í ´Ù¸¥ ¸Þ¼ÒµåµéÀº À̸§¸¸ º¸¾Æµµ »ç¿ë¹ýÀ» ºÐ¸íÈ÷ ¾Ë ¼ö ÀÖ½À´Ï´Ù. °¢ ¸Þ¼Òµå´Â capitalize!¿¡¼­ º¼ ¼ö ÀÖµíÀÌ, ±× ÀÚ¸®¿¡¼­ ¹®ÀÚ¿­À» º¯°æ½ÃÄÑÁÖ´Â ¸Þ¼Òµåµµ Á¦°øÇÏ°í ÀÖ½À´Ï´Ù.

insert ¸Þ¼Òµå¸¦ ÀÌ¿ëÇϸé ƯÁ¤ À§Ä¡¿¡ ¹®ÀÚ¿­À» »ðÀÔÇÒ ¼ö ÀÖ½À´Ï´Ù. ÀÌ ¸Þ¼Òµå´Â ¹®ÀÚ¿­À» ±× ÀÚ¸®¿¡¼­ º¯°æ½ÃÅ°´Ï ÁÖÀÇÇϼ¼¿ä! (¿Ö ÀÌ ¸Þ¼Òµå µÚ¿¡´Â ´À³¦Ç¥°¡ ºÙÁö ¾Ê´ÂÁö ¾Ë ¼ö ¾øÁö¸¸ ½ÇÁ¦·Î ¾È ºÙ¾î ÀÖ½À´Ï´Ù.)

into = "12345"
into.insert(2, "LETTERS!")
puts into
¡æ   12LETTERS!345

ÇÑÆíÀ¸·Î ƯÁ¤ ¹üÀ§ÀÇ ¹®ÀÚµéÀ» ¹®ÀÚ¿­¿¡¼­ Áö¿ì·Á¸é delete ¸Þ¼Òµå¸¦ ÀÌ¿ëÇÕ´Ï´Ù.

gone = "got gone fool!"
gone.delete("o", "r-v")
puts gone
¡æ   g gne fl!

ÇÏÀÌÇÂÀ» µÎ ±ÛÀÚ »çÀÌ¿¡ ³ÖÀ¸¸é ·çºñ´Â ÀÌ ¹®ÀÚµéÀ» Æ÷ÇÔÇÏ¿© ¹®ÀÚµé »çÀÌ¿¡ ÀÖ´Â ¹üÀ§¸¦ »ý¼ºÇÕ´Ï´Ù. ¿©·¯ ¸Þ¼Òµå¿¡¼­ ÀÌ ±â¼úÀ» ¾µ ¼ö ÀÖÁö¸¸ »èÁ¦ÇÒ ¶§ ƯÈ÷ À¯¿ëÇÕ´Ï´Ù.

¸¶Áö¸· ¹®ÀÚ¸¦ Áö¿ì´Â °ÍÀº ¸Å¿ì Â¥Áõ½º·´°í ¾î¶² ¾ð¾î¿¡¼­´Â ±æ°Ô ½á¾ß ÇÕ´Ï´Ù. (¹Ù·Î ¿©·¯ºÐÀÇ PHP¸¦ º¸°í ÀÖ½À´Ï´Ù.) ´ÙÇàÈ÷µµ, ¹®ÀÚ¿­ 󸮰¡ °­·ÂÇÑ ¾ð¾î´ä°Ô chomp¿Í chopÀ» Á¦°øÇÕ´Ï´Ù.

eat_me = "A lot of letters\n"
eat_me.chomp
¡æ   A lot of letters
eat_me.chop
¡æ   A lot of letter
eat_me.chomp("ter")
¡æ   A lot of let

chomp ¸Þ¼Òµå´Â ±â·Ï ºÐ¸®ÀÚ¸¦ ¹®ÀÚ¿­ÀÇ ¸¶Áö¸·¿¡¼­ºÎÅÍ Áö¿öÁÝ´Ï´Ù. ÀÌ°ÍÀº Àü¿ª °´Ã¼ÀÎ $/¿¡ ÀúÀåµÇ¾î ÀÖ½À´Ï´Ù. $/¸¦ ±âº»°ªÀ¸·Î µÎ¾ú´Ù¸é \n, \r\n, \r°ú °°Àº ÁÙ¹Ù²Þ ¹®ÀÚµéÀ» Áö¿ï °ÍÀÔ´Ï´Ù. ¸¶Áö¸· ¿¹Á¦¿¡¼­Ã³·³ chomp¿¡ ¾î¶² ¹®ÀÚ¸¦ Áö¿ï °ÍÀÎÁö¸¦ ¸Å°³º¯¼ö¸¦ ³Ñ°Ü¼­ Á¤ÇÒ ¼ö ÀÖ½À´Ï´Ù. chop ¸Þ¼Òµå´Â °£´ÜÈ÷ ¸¶Áö¸· ±ÛÀÚ¸¦ ¹«¾ùÀÌµç »ó°ü¾øÀÌ Áö¿ö¹ö¸³´Ï´Ù. (ÁÖ: \r\nÀº ÇÑ ¹®ÀÚ·Î ÀνÄÇÕ´Ï´Ù.)

°£´ÜÈ÷ ½ÃÀÛ°ú ³¡¿¡ ÀÖ´Â °ø¹é ¹®ÀÚµéÀ» Áö¿ö¾ß ÇÑ´Ù¸é, strip ¸Þ¼Òµå¸¦ ÀÌ¿ëÇϽʽÿÀ. lstrip, rstripÀ̳ª ±×³É stripÀ» ¾²½Ã¸é µË´Ï´Ù. ¿¹¸¦ µé¾î º¸°Ú½À´Ï´Ù.

stripper = "    La di da!    \t"
puts "[" + stripper.lstrip + "]"
¡æ  [La di da!         ]
puts "[" + stripper.rstrip + "]"
¡æ  [     La di da!]
puts "[" + stripper.strip + "]"
¡æ  [La di da!]

¿¹Á¦°¡ ¸íÈ®ÇÏÁö ¾Ê´Ù¸é lstrip°ú rstrip ¸Þ¼Òµå´Â ¾î¶² Á¾·ùÀÇ ºóÄ­(½ºÆäÀ̽º, ÅÇ, ÁÙ¹Ù²Þ µî)À» °¢°¢ ¿ÞÂÊÀ̳ª ¿À¸¥ÂÊ Æí¿¡¼­ Áö¿ó´Ï´Ù. strip ¸Þ¼Òµå´Â ¾çÂÊ¿¡¼­ ¸ðµÎ Áö¿ó´Ï´Ù.

split ¸Þ¼Òµå´Â ¹®ÀÚ¿­ ¸Þ¼Òµå Áß¿¡¼­ °¡Àå ¸¹ÀÌ »ç¿ëÇÏ´Â ¸Þ¼Òµå Áß¿¡ ÇϳªÀÏ °ÍÀÔ´Ï´Ù. Á¤ÇØÁø ±¸ºÐÀÚ·Î ¹®ÀÚ¿­À» ºÎºÐ ¹®ÀÚ¿­·Î ³ª´©¾î ÁÝ´Ï´Ù. ÇÑ ÀÔ¿¡ ½ï µé¾î°¥ Á¤µµÀÌ´Ï±î ¿¹Á¦ º¸¼¼¿ä.

breakable = "break,it,down,fool!"
breakable.split(",")
¡æ  ["break", "it", "down", "fool!"]

split ¸Þ¼Òµå´Â ¿©·¯ Á¶°¢À¸·Î ¹®ÀÚ¿­À» ³ª´¯´Ï´Ù. ÀÌ Á¶°¢µéÀº ½ºÆ®¸µ¿¡ ÀÖ´Â ±¸ºÐÀÚ À§Ä¡¸¦ ±âÁØÀ¸·Î ±¸ºÐÀÚ¸¦ Á¦°ÅÇϸ鼭 Àß¶ó¼­ ¹è¿­¿¡ ³ÖÀº °ÍÀÔ´Ï´Ù. ¹è¿­¿¡ µé¾î°¡°Ô µÇ¸é, ÁýÇÕü¸¦ µû¶ó¼­ ¹Ýº¹ÇÏ¿© ÀÚ·á¿¡ ´Ù¾çÇÑ ¿¬»êÀ» ÇÏ´Â °ÍÀÌ °¡´ÉÇØÁý´Ï´Ù.

±×·¸Áö¸¸ ¹®ÀÚ¿­¿¡ Çã¿ëµÇÁö ¾Ê´Â ¿¬»êÀ» ÇÏ´Â °æ¿ì¿¡´Â ¾î¶»°Ô ÇØ¾ß ÇÒ±î¿ä? ¿¹¸¦ µé¾î ¹®ÀÚ¿­À» ÅؽºÆ® ÆÄÀÏ¿¡¼­ Àоîµé¿© ¼ýÀÚ¿Í ÇÔ²² »ê¼ú ¿¬»êÀ» ÇØ¾ß Çϴµ¥, ÆÄÀÏ¿¡¼­ ÀÐÀ¸¸é Ç×»ó ¹®ÀÚ¿­ÀÌ µË´Ï´Ù. ·çºñ¿¡ ÀÖ´Â to_f¿Í to_i ¸Þ¼Òµå¸¦ ÀÌ¿ëÇϸé ÀÌ°ÍÀ» ÇÒ ¼ö ÀÖ°Ô µË´Ï´Ù.

numerical_string = "1234"
numerical_string + 6
¡æ  ! TypeError
numerical_string.to_f + 6.7
¡æ  1240.7

¼ÒÄÏÀ̳ª ÆÄÀÏ, ȤÀº »ç¿ëÀڷκÎÅÍ ÀԷ¹ÞÀº ÀÚ·áµéÀº ¸ðµÎ ¹®ÀÚ¿­À̶ó´Â °ÍÀ» ±â¾ïÇÏ´Â °ÍÀº ¸Å¿ì Áß¿äÇÕ´Ï´Ù. ÀÌ·± ÀÚ·á¿¡ ¾î¶² Á¾·ùÀÇ ¼öÇÐ ¿¬»êÀ» ÇÏ·Á°í Çϸé ÀÌ·± ¸Þ¼Òµå¸¦ ¸ÕÀú ½ÇÇàÇØ¾ß ÇÕ´Ï´Ù.

1.1.2. Á¤±Ô½Ä


ÀÌÀü¿¡ Á¤±Ô½ÄÀ» ³Ñ°ÜÁÖ´Â ¹æ¹ý¿¡ ´ëÇؼ­ ¾ð±ÞÇÑ ÀûÀÌ ÀÖÀ¸¹Ç·Î ´Ù¸¥ °÷¿¡¼­ ·çºñ ¿¹Á¦¸¦ º»´Ù°í ÇÏ´õ¶óµµ ±¸¹®ÀÇ »ý±è»õ°¡ Çò°¥¸®Áö ¾ÊÀ» °ÍÀÔ´Ï´Ù. ÀÌÁ¦ Á¤±Ô½ÄÀÌ ¾î¶² °ÍÀÌ°í ÀÌ°ÍÀÌ ¾ó¸¶³ª ³î¶ó¿ï Á¤µµ·Î À¯¿ëÇÏ°Ô ¾²ÀÏ ¼ö ÀÖ´ÂÁö¿¡ ´ëÇؼ­ À̾߱âÇÏ°íÀÚ ÇÕ´Ï´Ù.

¸ÕÀú, Àú´Â ¿©·¯ºÐ¿¡°Ô Á¤±Ô½Ä¿¡ ´ëÇÑ ¿Ïº®ÇÑ ³»¿ëÀ» °¡¸£Ä¥ »ý°¢µµ ¾ø°í, ±× ¼Â° »çÃÌ»¹ÀÎ Samuel del Fuega 4¼¼ÀÇ Àü±â·Î ¿©·¯ºÐÀ» Áö·çÇÏ°Ô ÇÏ°í ½ÍÀº »ý°¢µµ ¾ø½À´Ï´Ù. ´ÜÁö Àú´Â ¾ÆÁÖ ±âº»ÀûÀÎ ¿¹Á¦·Î ¸Þ¼ÒµåÀÇ »ç¿ë¹ý°ú ¾Æ¹« ´ë°¡µµ ¾øÀÌ Æ¯º°°¡·Î ºÎ·Ï¿¡ Á¤±Ô½ÄÀÇ ¾îµÎ¿î ¼¼°è·Î ºüÁ®µé¾î°¡°í ½ÍÀº ºÐÀÌ Âü°íÇÒ ¸¸ÇÑ URLÀ» ÷ºÎÇØ µÎ¾ú½À´Ï´Ù. ºÎ·Ï A¿¡ ÀÖ½À´Ï´Ù. ÈïºÐµÇ½ÃÁö ¾Ê³ª¿ä? ÀÌÁ¦ ÁøÇàÇØ º¾½Ã´Ù.

Á¤±Ô½ÄÀº ¶§¶§·Î regexp ȤÀº regex¶ó°íµµ ºÎ¸£´Â ¹®ÀÚ¿­Àε¥, ±¸¹® ¹ýÄ¢µé¿¡ µû¶ó¼­ ÀÌ°Í¿¡ ¾î¿ï¸®´Â ¹®ÀÚ¿­µéÀÇ ÁýÇÕÀ» ±â¼úÇÑ °ÍÀÔ´Ï´Ù. °£´ÜÇÑ °Ë»ö¿¡¼­ºÎÅÍ ½ÃÀÛÇÏ¿©, °Ë»öÀ» Æ÷ÇÔÇÑ ¹®ÀÚ¿­ ġȯ, ´ëü, ÀÚ·á À̵¿À» ÇÒ ¼ö ÀÖ½À´Ï´Ù. ¹®ÀÚ¿­À» ´Ù·ç±â À§ÇÑ À¯¿ëÇÑ µµ±¸·Î½á ¿©·¯ ÇÁ·Î±×·¡¹Ö ¾ð¾î¿¡ Ãß°¡µÇ¾î ÀÖ°í, ÈĽĿ¡ ¾ñ¾î³õÀº ¸ÀÀÖ´Â ÅäÇÎÀÔ´Ï´Ù.

Á¤±Ô½ÄÀº ¿©·¯°¡Áö¸¦ ÇÒ ¼ö ÀÖµµ·Ï dzºÎÇÑ ±¸¹®À» µÎ°í ÀÖ½À´Ï´Ù. ±×·¯³ª °£°áÇÔ°ú ½ºÄÚÇÁÀÇ ¿ÂÀüÇÔÀ¸·Î ÀÎÇÏ¿© ¾ÆÁÖ °£´ÜÇÏ°Ô Á¤±Ô½ÄÀ» ÀÌ¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù. Á¤±Ô½ÄÀ» ¿ÏÀüÈ÷ ÀÌÇØÇÏ·Á¸é Á¤±Ô½Ä ÀÔ¹®¼­ ²¨³»µé¾î¾ß°ÚÁö¸¸, ÀÔ¹®¼­ ¾øÀ̵µ ÁøÇà »óȲÀ» ÀÌÇØÇÏ½Ç ¼ö ÀÖÀ» °ÍÀÔ´Ï´Ù.

Á¤±Ô½ÄÀ» °¡Àå °£´ÜÈ÷ »ç¿ëÇÏ´Â ¸ÂÃãºÎÅÍ ½ÃÀÛÇØ º¾½Ã´Ù. Á¤±Ô½ÄÀ¸·Î ½±°Ô ¹®ÀÚ¿­À» ãÀ» ¼ö ÀÖ½À´Ï´Ù. ¹®ÀÚ¿­ÀÌ ´Ù¸¥ ¹®ÀÚ¿­ÀÇ ºÎºÐ¹®ÀÚ¿­ÀÎÁö º¸°í ½Í´Ù°í ÇÑ´Ù¸é ´ÙÀ½°ú °°ÀÌ ÇÏ¸é µË´Ï´Ù.

matchmaker = "I'm a cowboy, baby!"
matchmaker =~ /cow/
¡æ  6
matchmaker.match("cow")
¡æ  #<MatchData:0x61d3120>

=~ ¿¬»êÀÚ¸¦ ÀÌ¿ëÇϸé ÆÐÅÏÀÌ Ã³À½ ¸Â¾Æµé¾î°¡´Â °÷ÀÇ À§Ä¡¸¦ µ¹·ÁÁÝ´Ï´Ù. ±×·¯³ª ¹®ÀÚ¿­ÀÇ match ¸Þ¼Òµå¸¦ ÀÌ¿ëÇϸé, MatchData °´Ã¼¸¦ ¾òÀ» ¼ö ÀÖ°í ÀÌ ¸ÂÃã¿¡ Á¢±ÙÇÒ ¼ö ÀÖ´Â ¿©·¯°¡Áö ¿É¼ÇÀ» ÁÝ´Ï´Ù. ¿¹¸¦ µé¸é ´ÙÀ½°ú °°½À´Ï´Ù.

my_message = "Hello there!"
my_message.match(/(..)(..)/).captures
¡æ  ["He", "ll"]

captures ¸Þ¼Òµå¸¦ ÀÌ¿ëÇÏ¸é °¢ Á¤±Ô½Ä¿¡ ¸Â´Â °á°ú¸¦ ¹ÝȯÇÕ´Ï´Ù. to_a ¸Þ¼Òµåµµ ºñ½ÁÇÏ°Ô °á°ú¸¦ ³»Áö¸¸, ¿ÏÀüÈ÷ ¸ÂÃçÁø ¹®ÀÚ¿­µµ ¹ÝȯÇÕ´Ï´Ù. Á» ¹Ùº¸°°Àº ¿¹Á¦¿´Áö¸¸ ´õ ±×·²µíÇÑ ¿¹Á¦¸¦ º¾½Ã´Ù. µÎ ±¸ºÐÀÚ »çÀÌ¿¡ ÀÖ´Â ÅؽºÆ®¸¦ ¾ò°í ½Í´Ù°í ÇսôÙ. ¿©±â ¿øÇÏ´Â °ÍÀÌ ÀÖ½À´Ï´Ù.

html_element = "<html>"
my_element_text = html_element.match("(<)(.*)(>)").captures
puts my_element_text[1]
¡æ  html

È£±â½ÉÀÌ ¸¹À¸½Å ÆíÀ̶ó¸é ·çºñ API ¹®¼­¿¡ º¸¼Å¼­ MatchData Ŭ·¡½º¿¡ ´ëÇÑ Á¤º¸¸¦ º¸½Ç ¼öµµ ÀÖ½À´Ï´Ù.

Áß°£¿¡ ÀÖ´Â °ÍµéÀº ¹ö¸®°í ¸ÂÃçÁø °á°úÀÇ ¹è¿­¸¸À» °£´ÜÈ÷ ¾ò°íÀÚ ÇÑ´Ù¸é scan ¸Þ¼Òµå¸¦ ¾²½Ç ¼ö ÀÖ½À´Ï´Ù.

my_message = "Hello there!"
my_message.scan(/(..)(..)/)
¡æ  [["He", "ll"], ["o ", "th"], ["er", "e!"]]

µ¹·ÁÁÖ´Â °ªÀÌ ´Ù¸¥ °Í ¿Ü¿¡µµ match¿Í scanÀº "¿å½É"ÀÇ Á¤µµ°¡ ´Ù¸¨´Ï´Ù. "¿å½É ¸¹Àº" Á¤±Ô½ÄÀ̳ª ¸Þ¼Òµå´Â Çϳª°¡ ¾Æ´Ï¶ó ¹ß»ýµÇ´Â ¸ðµç ¹«´Ì¸¦ ¸ÂÃß·Á°í ³ë·ÂÇÕ´Ï´Ù. scan ¸Þ¼Òµå´Â ¿å½ÉÀÌ ¸¹½À´Ï´Ù. ÀÌ°ÍÀº ¹®ÀÚ¿­¿¡ ³ªÅ¸³ª´Â ¸ðµç ¹«´Ì¸¦ ´Ù ¸ÂÃß·Á°í ÇÕ´Ï´Ù. (ÁÖ: match¸¦ ÀÌ¿ëÇÏ´õ¶óµµ ƯÁ¤ Á¤±Ô½ÄÀ» ÀÌ¿ëÇÏ¸é ¿å½É¸¹°Ô ÇÒ ¼ö ÀÖ½À´Ï´Ù.)

Á¤±Ô½ÄÀº ¹®ÀÚ¿­À» ´ëüÇÏ´Â ¿ëµµ·Îµµ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù. Á¦´ë·Î À¯·ÂÇÑ Á¤±Ô½ÄÀ» ÀÌ¿ëÇϸé Á¤±Ô½ÄÀ» ÀÌ¿ëÇÏ¿© ¹®ÀÚ¿­À» ´ëüÇÏ´Â °ÍÀº ¾ÆÁÖ À¯¿¬ÇÕ´Ï´Ù. ´Ù½Ã ¸»¾¸µå·Á¼­ °í±Þ Á¤±Ô½Ä¿¡ ´ëÇÏ¿© ³íÀÇÇÏÁö ¾Ê±â ¶§¹®¿¡ ÀÌ ±â¹ýÀÇ ÁøÁ¤ÇÑ À¯¿ëÇÔÀº ³ªÅ¸³ªÁö ¾ÊÀ» °ÍÀÔ´Ï´Ù. ±×·¯³ª Á¤±Ô½ÄÀ» ÁøÁöÇÏ°Ô »ìÆ캸½Ã°í ÀÌÁ¡À» ¾òÀ» ¼ö ÀÖÀ¸¼ÌÀ¸¸é ÁÁ°Ú½À´Ï´Ù. Á¤±Ô½ÄÀ» ÀÌ¿ëÇÏ¿© ¹®ÀÚ¿­À» ´ëüÇÏ·Á¸é ¹®ÀÚ¿­ ÀνºÅϽºÀÇ subÀ̳ª gsub ¸Þ¼Òµå¸¦ ÀÌ¿ëÇØ¾ß ÇÕ´Ï´Ù.

go_away = "My name is Freak Nasty!"
go_away.sub("y", "o")
¡æ  Mo name is Freak Nasty!
go_away.gsub("y", "o")
¡æ  Mo name is Freak Nasto!
go_away.sub("Freak Nasty", "Fred Jones")
¡æ  My name is Fred Jones!

sub ¸Þ¼Òµå´Â ù¹ø°·Î ¹«´Ì¿Í ¸Â´Â °Í¸¸ ¹Ù²ÙÁö¸¸ gsub´Â ¿å½ÉÀÌ ¸¹¾Æ¼­ ¸ðµç ¸ÂÃãÀ» ¹Ù²Ù·Á°í ÇÒ °ÍÀÔ´Ï´Ù.. (g¸¦ Æ÷±âÇÏÁö ¾Ê¾ÒÀ¸´Ï±î¿ä) °¢ ¸Þ¼ÒµåÀÇ ¿å½ÉÀÇ Á¤µµ´Â ƯÁ¤ Á¤±Ô½ÄÀ» »ç¿ëÇÏ´ÂÁö¿¡ ´Þ·Á ÀÖ½À´Ï´Ù. ´õ °­·ÂÇÑ Á¤±Ô½ÄÀ» ¹è¿ì¸é ´õ ¸¹ÀÌ ¾µ ¼ö ÀÖ½À´Ï´Ù. ºÎ·Ï A¸¦ º¸¼Å¼­ ´õ ¸¹Àº Á¤º¸¸¦ ¾òÀ¸¼¼¿ä.

1.2. ³¯Â¥/½Ã°£

µ¨¸®¿¡¼­ ÇÜ°ú ¸ÀÀÖ´Â °í±â¸¦ ãÀ¸¸é¼­ ´Þ·ÂÀ» ¹ö¹Â´Ù¿¡ µÎ°í ¿Â °ÍÀº ±ú´ÞÀ¸½Å ÀûÀÌ ÀÖ½À´Ï±î? Áö³­ õ³â¿¡ Á¦°Ô ±×·± ÀÏÀÌ ÀϾ°í ¾ê±â¸¦ ÇØ µå¸®ÀÚ¸é, Àü À¯È¤¿¡ ³Ñ¾î°¡±â Á÷ÀüÀ̾ú½À´Ï´Ù. ´Þ·ÂÀÌ ¾ø´Ù´Â °ÍÀº ³·ÀÌ ¾ø´Ù´Â °ÍÀÌ°í, ³·ÀÌ ¾ø´Ù´Â °ÍÀº ¹ãÀÌ ¾ø´Ù´Â ¶æÀ¸·Î Á¦°¡ Á×À» ¼öµµ ÀÖ´Ù´Â °ÍÀÔ´Ï´Ù. ´ÙÇàÈ÷µµ ·çºñ°¡ ²Ï³ª ¾µ¸¸ÇÑ ³¯Â¥¿Í ½Ã°£ ¶óÀ̺귯¸®¸¦ Á¦°øÇؼ­ Á¦ ¹ÝÂÊ Ã³³²ÀÇ ¾Ö¿Ïµ¿¹° ¿ø¼þÀÌÀÇ Á¶·Ã»çÀÇ °³¸¦ ½ÃÄѼ­ ¾îÁ¦ ¿ìÆíÀ¸·Î Á¦ ´Þ·ÂÀ» º¸³»µµ·Ï ÇÏ¿´½À´Ï´Ù.

·çºñ ¶óÀ̺귯¸®¿¡´Â ¼¼ °³ÀÇ ³¯Â¥ ½Ã°£ Ŭ·¡½º°¡ ÀÖ½À´Ï´Ù. Date, Time °¡ 1.4¿¡¼­ ¸¸µé¾îÁ³°í, 9 °³¿ù µÚ¿¡ DateTime ÀÌ »ý°å´Ù´Â ¼Ò¹®À» µé¾ú´Âµ¥, ÀÌ ¼Ò¹®À» ¾ê±âÇØÁØ »ç¶÷Àº ÀÌ·± ¾ê±âµµ ÇØÁÖ¾ú½À´Ï´Ù. ·¹ÀϽº°¡ ·çºñ ÇÁ·Î±×·¡¸ÓÀÇ ½Å»ç Ŭ·´À̶ó°í ¸»ÀÌÁÒ.

1.2.1. Date Ŭ·¡½º

Á¦ÀÏ ¸ÕÀú ¾Ë¾Æº¼ °ÍÀº DateÀÔ´Ï´Ù. ÀÌ Å¬·¡½º´Â ·çºñ ÀÀ¿ëÇÁ·Î±×·¥¿¡¼­ ÀúÀåÇÏ°í, ´Ù·ç°í, ºñ±³ÇÒ ³¯Â¥¸¦ °£´ÜÈ÷ ³ëÃâÇÕ´Ï´Ù.

                                         
mydate = Date.new(1999, 6, 4)             ¡æ 1999-06-04
mydatejd = Date.jd(2451334)               ¡æ 1999-06-04
mydateord = Date.ordinal(1999, 155)       ¡æ 1999-06-04
mydatecom = Date.commercial(1999, 22, 5)  ¡æ 1999-06-04
Date.jd_to_civil(2451334)                 ¡æ [1999,6,4]
Date.jd_to_civil(2451334)                 ¡æ [1999,6,4]
mydatep = Date.parse("1999-06-04")        ¡æ 1999-06-04

º¸½Ã´Ù½ÃÇÇ, ³¯Â¥ ÀνºÅϽº´Â ¹®ÀڷΠǥÇöµÈ ¹æ½ÄÀÌ ¿ÀÈ÷·Á ´õ °£´ÜÇÕ´Ï´Ù. °£´ÜÈ÷ ³¯Â¥¸¦ ¸Å°³º¯¼ö·Î ³Ñ°Ü¼­ new ȤÀº civil ¸Þ¼Òµå¸¦ È£ÃâÇÏ¸é µË´Ï´Ù.ÀÌ ¸Þ¼Òµå´Â Àͼ÷ÇÑ ³¯Â¥ ÇüŸ¦ ¾²Áö¸¸ ´Ù¸¥ ³¯Â¥ Çüŵµ Áö¿øÇÕ´Ï´Ù. jd ¸Þ¼Òµå´Â À²¸®¿ì½º·ÂÀÇ ³¯¼ö¸¦ ±â¹ÝÀ¸·Î ÇÏ°í ÀÖ½À´Ï´Ù. ordinal ¸Þ¼Òµå´Â OrdinalÀ» ³Ñ°ÜÁÙ ¼öµµ ÀÖ°í, ¿¬µµ¿Í ³¯ ¼ö¸¦ ³Ñ°ÜÁÖ¾î Date °´Ã¼¸¦ ¸¸µé ¼ö ÀÖ½À´Ï´Ù. commercial ¸Þ¼Òµå´Â Commercial °´Ã¼ ȤÀº ¿¬µµ, ÁÖ ¼ö, ³¯ ¼ö¸¦ ³Ñ°ÜÁÖ¾î Date °´Ã¼¸¦ »ý¼ºÇÒ ¼ö ÀÖ½À´Ï´Ù. commercial_to_jd, jd_to_civilµî, ³¯Â¥ ÇüŸ¦ ¹Ù²Ù´Â ¸Þ¼Òµå°¡ Á¦°øµË´Ï´Ù.

À̰͵鸸 ÀÖ´õ¶óµµ Àß µ¿ÀÛÇÏ°ÚÁö¸¸, parse ¸Þ¼Òµå¸¦ ÀÌ¿ëÇÏ´Â ¸¶Áö¸· ¿¹Á¦¿¡ ÁÖ¸ñÇϼ¼¿ä. ¹®ÀÚ¿­À» Date °´Ã¼·Î ºÐ¼®ÇÒ ¼ö ÀÖ½À´Ï´Ù. ÀÌ°ÍÀÌ new ¸Þ¼Òµå ´ÙÀ½À¸·Î Á÷°üÀûÀ¸·Î Date °´Ã¼¸¦ ¸¸µå´Â ¹æ¹ýÀÔ´Ï´Ù.

´Ù¾çÇÑ Å¬·¡½º ¸Þ¼Òµå·Î ÀÔ·ÂÀ» Å×½ºÆ®ÇØ º¼ ¼ö ÀÖ°í, Date °´Ã¼¸¦ ¾ò°í³ª¸é ¸ðµç Á¾·ùÀÇ Á¤º¸¸¦ ¸î¸î ÀνºÅϽº ¸Þ¼Òµå¿¡¼­ ¾òÀ» ¼ö ÀÖ½À´Ï´Ù.

Date.valid_jd?(3829)             ¡æ 3829
Date.valid_civil?(1999, 13, 43)  ¡æ nil
mydate.mon                       ¡æ 6
mydate.yday                      ¡æ 155
mydate.day                       ¡æ 4

º¸½Ã´Ù½ÃÇÇ Æ¯Á¤ ÇüÅÂÀÇ Å¸´ç¼ºÀ» °Ë»çÇÒ ¼ö ÀÖ°í, ÀνºÅϽº ¸Þ¼Òµå¸¦ ÀÌ¿ëÇÏ¿© ´Ù¸¥ ÇüÅ·Πº¯È¯ÇÒ ¼ö ÀÖ½À´Ï´Ù. ÇØÀÇ ³¯ ¼ö(yday), ¿ù(mon)µî ¿©·¯ ±¸¼º ¿ä¼ÒµéÀ» ¾òÀ» ¼ö ÀÖ½À´Ï´Ù. ±âº» ¿¬»êÀÚ¸¦ ÀÌ¿ëÇÏ¿© ³¯Â¥¸¦ ºñ±³ÇÏ°í ´Ù·ê ¼öµµ ÀÖ½À´Ï´Ù.

date1 = Date.new(1985, 3, 18)
date2 = Date.new(1985, 5, 5)
date1 < date2                  ¡æ true
date1 == date2                 ¡æ false
date3 = date1
date1 == date3                 ¡æ true
date1 << 3                     ¡æ 1984-12-18
date2 >> 5                     ¡æ 1985-10-05

º¸½Ã´Ù½ÃÇÇ ³¯Â¥¸¦ ºñ±³ÇÏ´Â °ÍÀº Ç¥ÁØ ¼ýÀÚ °ªÀ» ºñ±³Çϰųª ºñ½ÁÇÑ °ÍµéÀ» ºñ±³ÇÏ´Â °Í°ú °°½À´Ï´Ù. ³¯Â¥³¢¸® ºÎµîÈ£·Î ´ë¼Ò ºñ±³¸¦ ÇÒ ¼ö Àִµ¥, ¾î¶² ³¯º¸´Ù ´õ ¾Õ¿¡ ¿À´Â ³¯Àº "º¸´Ù ÀÛÀº" ³¯ÀÌ°í ¾î¶² ³¯ º¸´Ù ´õ µÚ¿¡ ÀÖ´Â ³¯Àº "º¸´Ù Å«" ³¯ÀÔ´Ï´Ù. >> ¿Í << ¿¬»êÀÚ¸¦ ½á¼­ ´ÞÀ» ´õÇϰųª »¬ ¼ö ÀÖ½À´Ï´Ù. ¸¶Áö¸· µÎ ¿¹Á¦¸¦ º¸¼¼¿ä. ÀÌÁ¦ Date Ŭ·¡½º¿¡ ´ëÇØ Àͼ÷ÇØÁ³À¸´Ï Time Ŭ·¡½º·Î ³Ñ¾î°©½Ã´Ù.

1.2.2. Time Ŭ·¡½º


ŸÀÓ Å¬·¡½º´Â Date Ŭ·¡½º¿Í ±â´ÉÀÌ ¸Å¿ì À¯»çÇѵ¥, ±×³É ³¯Â¥°¡ ¾Æ´Ï¶ó ½Ã°£À» Âï´Âµ¥ ´õ ÁßÁ¡À» µÎ°í ÀÖ½À´Ï´Ù. Date Ŭ·¡½º¿Í ºñ½ÁÇÏ°Ô ´Ù¾çÇÑ »ý¼ºÀÚ¸¦ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù.

rightnow = Time.new
       ¡æ   Sun Sep 10 21:36:15 Eastern Daylight Time 2006
Time.at(934934932)
       ¡æ   Tue Aug 17 20:08:52 Eastern Daylight Time 1999
Time.local(2000,"jan",1,20,15,1)
       ¡æ   Sat Jan 01 20:15:01 Eastern Standard Time 2000
Time.utc(2006, 05, 21, 5, 13)
       ¡æ   Sun May 21 05:13:00 UTC 2006
Time.parse("Tue Jun 13 14:15:01 Eastern Standard Time 2005")
       ¡æ   Tue Jun 13 14:15:01 Eastern Daylight Time 2006

º¸½Ã´Ù½ÃÇÇ, °£´ÜÈ÷ new ¸Þ¼Òµå¸¦ È£ÃâÇϰųª now¸¦ È£ÃâÇÏ¸é »õ Time °´Ã¼¸¦ ÇöÀç ½Ã°£°ú ½Ã°£ ¿µ¿ªÀ¸·Î »ý¼ºÇÒ ¼ö ÀÖ½À´Ï´Ù. ƯÁ¤ ½Ã°£ÀÌ ÇÊ¿äÇϸé atÀ» ¾µ ¼ö Àִµ¥ ÀÌ°ÍÀº 1970³â 1¿ù 1ÀϷκÎÅÍ Áö³ª¿Â ÃÊ·Î ¿î¿µµË´Ï´Ù. utc¿Í gm ¸Þ¼Òµå¸¦ ½á¼­ ÀÌµé ½Ã°£ ¿µ¿ª°ú Á¦°øµÇ´Â ¸Å°³º¯¼ö¿¡ ±â¹ÝÇÑ ½Ã°£À» »ý¼ºÇÒ ¼ö ÀÖ½À´Ï´Ù. Date¿¡¼­ Çß´ø °Íó·³ parse ¸Þ¼Òµå¸£¸£ ½á¼­ Time °´Ã¼¸¦ ¸¸µé ¼ö ÀÖ½À´Ï´Ù.

Time Ŭ·¡½º´Â °´Ã¼ÀÇ °ªÀ» ¾òÀ» ¼ö ÀÖ°í, °ªÀ» º¯È¯ÇÒ ¼ö ÀÖ°í, °ªÀ» ´Ù¸¥ ÇüÅ·ΠÃâ·ÂÇÒ ¼ö ÀÖ´Â ¸î¸î ÀνºÅϽº ¸Þ¼Òµåµµ Á¦°øÇÕ´Ï´Ù.

rightnow = Time.new
       ¡æ   Sun Sep 10 21:42:30 Eastern Daylight Time 2006
rightnow.hour
       ¡æ   21
rightnow.mon
       ¡æ   9
rightnow.day
       ¡æ   10
rightnow.to_i
       ¡æ   1158543750
rightnow.to_s
       ¡æ   Sun Sep 17 21:42:30 Eastern Daylight Time 2006

º¸½Ã´Ù½ÃÇÇ, TimeÀÇ ¸Þ¼ÒµåµéÀº DateÀÇ ¸Þ¼Òµå¿Í ¸Å¿ì ºñ½ÁÇÕ´Ï´Ù. ½Ã°£ °´Ã¼¸¦ Fixnum°ú °°Àº ´Ù¸¥ Ŭ·¡½º·Î ¹Ù²Ù´Â °Íµµ °¡´ÉÇÕ´Ï´Ù.

ÇÑ ÀνºÅϽº ¸Þ¼Òµå¸¦ Àá±ñµ¿¾È ÁýÁßÇؼ­ º¾½Ã´Ù. strftime ¸Þ¼Òµå´Â ¾ÆÁÖ À¯¿ëÇÑ ¸Þ¼Òµå·Î ¼±ÅÃÇÑ ÇüÅ·Π½Ã°£À» Ãâ·ÂÇÒ ¼ö ÀÖ°Ô ÇØ ÁÝ´Ï´Ù. ÀÌ ÀÎÅÍÆäÀ̽º´Â C++ÀÇ printf¿Í ¾ÆÁÖ À¯»çÇÕ´Ï´Ù. %f¿Í °°Àº ±¸ºÐÀÚ¸¦ ½á¼­ Ãâ·ÂµÇ´Â ¹®ÀÚ¿­ÀÇ °ªÀÇ À§Ä¡¸¦ ³ªÅ¸³¾ ¼ö ÀÖ½À´Ï´Ù. ¸î °¡Áö ¿¹Á¦¸¦ º¸½Ã°Ú½À´Ï´Ù.

rightnow = Time.now
rightnow.strftime("%m/%d/%Y")
       ¡æ 09/10/2006
rightnow.strftime("%I:%M%p")
       ¡æ 09:13PM
rightnow.strftime("The %dth of %B in '%y")
       ¡æ The 17th of September in '06
rightnow.strftime("%x")
       ¡æ 09/17/06

strftime ¸Þ¼Òµå´Â Time ¸ðµâ¿¡¼­ °¡Àå º¹ÀâÇÑ ¸Þ¼Òµå Áß¿¡ ÇϳªÀÔ´Ï´Ù. ÀÌ°ÍÀ¸·Î ´õ ÇÒ¼ö ÀÖ´Â °Í¿¡ ´ëÇÑ Á¤º¸¸¦ ´õ ¾ò°í ½ÍÀ¸½Ã´Ù¸é Time Ŭ·¡½ºÀÇ ¹®¼­¸¦ http://www.ruby-doc.org/core/classes/Time.html ¿¡¼­ ã¾Æº¸½Ê½Ã¿À.

1.2.3. Date¿Í Time

DateTime Ŭ·¡½º´Â ÀÌÀüÀÇ µÎ Ŭ·¡½º¸¦ ÇϳªÀÇ Æí¸®ÇÏÁö¸¸ ¾à°£ ´ú È¿À²ÀûÀΠŬ·¡½º·Î ¸¸µç °ÍÀÔ´Ï´Ù. DateTime Ŭ·¡½º´Â Date¿¡ ´ÜÁö ¸î °¡Áö ½Ã°£ ±â´ÉÀÌ Àß µé¾î°£ ¼­ºê Ŭ·¡½ºÀÔ´Ï´Ù. ¹¹ È®½ÇÈ÷ ÇØ µÎ´Â °ÍÀº ÁÁÀº ½ÃµµÀÔ´Ï´Ù¸¸ ³»°Ô ¹°¾îº¸½Å´Ù¸é ¾µµ¥ ¾ø´Âµ¥ ½Ã°£³¶ºñ ÇÏÁö ¸»¶ó°í ´ë´äÇÒ°Ì´Ï´Ù. ±×·¸´Ù°í Çصµ ¸î °¡Áö Àç¹ÌÀÖ´Â ±â´ÉµéÀÌ ÀÖ½À´Ï´Ù.

rightnow = DateTime.now
       ¡æ 2006-09-10T21:56:45-0400
maytime = DateTime.civil(2006, 5, 6)
       ¡æ 2003-05-06T00:00:00Z
parsed = DateTime.parse("2006-07-03T11:53:02-0400")
       ¡æ 2006-07-03T11:53:02-0400
parsed.hour                                  ¡æ 11
parsed.day                                   ¡æ3
parsed.year                                  ¡æ 2006

Date Ŭ·¡½º¿Í ¸Å¿ì ºñ½ÁÇÏ°Ô µ¿ÀÛÇÑ´Ù´Â °ÍÀ» ¾Ë ¼ö ÀÖ½À´Ï´Ù. ´Ù¾çÇÑ ³¯Â¥ ÇüŸ¦ ÀÌ¿ëÇÏ¿© »ý¼ºÇϰųª ³¯Â¥/½Ã°£ ¹®ÀÚ¿­À» ºÐ¼®ÇÒ ¼ö ÀÖ½À´Ï´Ù. Date¿Í Time Ŭ·¡½ºÃ³·³ °´Ã¼ ³»ºÎÀÇ ´Ù¾çÇÑ °ªµéÀ» ¾Ë¾Æ³¾ ¼ö ÀÖ½À´Ï´Ù.

ÀÌÁ¦ ¾Æ¸¶ ¸Ó¸®¸¦ ±ÜÀû°Å¸®½Ã¸é¼­ ¿Ö ÀÌ°ÍÀ» ¾ðÁ¦ ½á¾ß ÇÏ´ÂÁö ±Ã±ÝÈ÷ ¿©±â½Ç °ÍÀÔ´Ï´Ù. °³ÀÎÀûÀ¸·Î DateTimeÀº ¾²Áö ¾Ê°í TimeÀ̳ª Date¸¦ ÀÌ¿ëÇÕ´Ï´Ù. ¶§·Î´Â DateTimeÀ» ¾²Áö ¾ÊÀ» ¼ö ¾ø´Â °æ¿ì°¡ ÀÖ½À´Ï´Ù. ±×·¯³ª ±×³É Date¿Í TimeÀ» ¾²¸é DateTimeÀ» ¾²´Â °Íº¸´Ù 800%ÀÇ ¼º´É Çâ»óÀÌ ÀÖÀ» °ÍÀ̶ó´Â Á¡À» ¸í½ÉÇϼ¼¿ä. ¾î¶² °æ¿ì¿¡´Â Æú¶õµå Å©±â ¸¸Å­ÀÇ ¼º´É Â÷ÀÌ´Â ¹®Á¦°¡ µÈ´ä´Ï´Ù.

1.3. ÇØ½Ã¿Í ¾Ïȣȭ

°¡²û ¿©·¯ºÐÀº »ç¶÷µéÀÌ µ¥ÀÌÅ͸¦ ¸ø º¸°Ô ÇÏ°í ½ÍÀ» °ÍÀÔ´Ï´Ù. ¾Æ¸¶ ºÒÄèÇÑ ÀÏÀÌ »ý°Ü¼­ ´Ù¸¥ »ç¶÷µéÀÌ ¸ô¶úÀ¸¸é ÇÒ ¶§µµ ÀÖÀ» °ÍÀÔ´Ï´Ù. ȤÀº ÀØ°í ½ÍÀº ÀÏÀº ÇؽÃÇÏ°í ´õ ÀÌ»ó ÀÌ°ÍÀ» °ÆÁ¤ÇÏÁö ¾Ê¾Æµµ µË´Ï´Ù. ´ÙÇàÈ÷µµ Àú´Â À½... ±×·¯´Ï±î Á¦°¡ ¸»ÇÏ·Á´Â °ÍÀº... ·çºñ¿¡´Â ¸î°¡Áö °£´ÜÇÑ Çؽà ¶óÀ̺귯¸®°¡ Æ÷ÇԵǾî ÀÖ°í, ¶Ç ¼³Ä¡Çؼ­ »ç¿ëÇÒ ¼ö ÀÖ´Â ¾Ïȣȭ ¶óÀ̺귯¸® Áªµµ ÀÖ´Ù´Â °Ì´Ï´Ù.

1.3.1. ÇؽÃ

´Ü¹æÇâ ¾Ïȣȭ¸¦ À§ÇÏ¿© Çؽø¦ ¾´´Ù°í »ý°¢ÇØ º¾½Ã´Ù. ¾ÏȣȭµÈ ¹®ÀÚ¿­Àº µ¥ÀÌÅÍ ½ºÆ®¸²À¸·ÎºÎÅÍ ¿À´Â °ÍÀÔ´Ï´Ù. ÀüÇüÀûÀÎ »ç¿ëó´Â Æнº¿öµå üũ(¿¹¸¦ µé¾î ¿©·¯ºÐÀÌ µ¥ÀÌÅͺ£À̽º¿¡ Çؽø¦ ÀúÀåÇØ µÎ°í »ç¿ëÀÚÀÇ ÀÔ·ÂÀ» ÇؽÃÇؼ­ ÀÌ µÎ Çؽð¡ ÀÏÄ¡ÇÏ´ÂÁö¸¦ º¸´Â °ÍÀÔ´Ï´Ù)¿Í ÆÄÀÏ Ã¼Å©(°°Àº µÎ ÆÄÀÏ¿¡¼­ °°Àº ÇؽðªÀÌ ³ª¿Í¾ß ÇÕ´Ï´Ù) ÀÔ´Ï´Ù. ·çºñ´Â µÎ°¡Áö °¡Àå ÀÚÁÖ ¾²ÀÌ´Â Çؽà ŸÀÔÀÎ MD5¿Í SHA-1À» ³»Àå ¸ðµâ·Î Á¦°øÇÕ´Ï´Ù.

MD5 MD5´Â ³Î¸® »ç¿ëµÇ´Â ¾Ïȣȭ Çؽà ÇÔ¼öÀÔ´Ï´Ù. 1994³â MIT±³¼öÀÎ ·Î³Îµå ¶óÀ̺£½ºÆ®°¡ MD4ÀÇ ÈļÓÀÛÀ¸·Î °³¹ßÇÏ¿´½À´Ï´Ù. Ãë¾àÁ¡ ¶§¹®¿¡ º¸¾È Çؽà ÇÔ¼öÀÇ Áַ¿¡¼­´Â ¶³¾îÁ® ³ª¿ÔÁö¸¸ ¿©ÀüÈ÷ °ªÀ» ´ëÀÀ½ÃÅ°´Âµ¥ ¾ÆÁÖ À¯¿ëÇÕ´Ï´Ù. ·çºñÀÇ MD5 ±â´ÉÀº PHPÀÇ °Í(¿¹¸¦ µé¾î md5('your data');) ¸¸Å­ ½±Áö´Â ¾Ê½À´Ï´Ù¸¸ ±×·¡µµ »ç¿ëÇϱâ Æí¸®ÇÏ°í ½±½À´Ï´Ù.

require 'digest/md5'
md5 = Digest::MD5.digest('I have a fine vest!')
         ¡æ sXm(1r\371\353\027\367\235u!\266\001\262
md5 = Digest::MD5.hexdigest('I have a fine vest!')
         ¡æ 73586d283172f9eb17f79d7521b601b2

MD5 Ŭ·¡½º´Â Çؽà ´ÙÀÌÁ¦½ºÆ®¸¦ ¾ò±â À§ÇÑ µÎ °¡Áö ¸Þ¼Òµå¸¦ Á¦°øÇÕ´Ï´Ù. ù ¹ø° °ÍÀº ±×³É digest ¸Þ¼ÒµåÀÔ´Ï´Ù. ÀÌ°ÍÀº Çؽà ´ÙÀÌÁ¦½ºÆ®ÀÇ Á¶±ÝÀº À§ÇèÇÑ ¹ÙÀÌÆ® ½ºÆ®¸²À» µ¹·ÁÁÝ´Ï´Ù. À§ÇèÇÏ´Ù°í ÇÑ ÀÌÀ¯´Â ÀÌ°ÍÀÌ Á¦´ë·Î µ¿ÀÛÇÑ´Ù°í »ý°¢ÇÏ°í XMLÀ̳ª HTML ȤÀº µ¥ÀÌÅÍ¿¡ºñ½º¿¡ ¾´´Ù¸é ¾È µÇ±â ¶§¹®ÀÔ´Ï´Ù. ÀÌ·± »óȲ¿¡¼­ ´õ ³ªÀº ¼±ÅÃÀº hexdigest ¸Þ¼ÒµåÀÏ °ÍÀÔ´Ï´Ù. ÀÌ°ÍÀº base64 hex ¾Ë°í¸®ÁòÀ» ÅëÇÏ¿© °á°ú¸¦ Ãâ·ÂÇϴµ¥ ÀÌ°ÍÀÌ ´õ Ä£±ÙÇÒ °ÍÀÔ´Ï´Ù.

SHA-1 SHA-1 Çؽà ¾Ë°í¸®ÁòÀº MD5º¸´Ù ÈξÀ ´õ º¸¾È¿¡ °­ÇÕ´Ï´Ù. ÀÌ°ÍÀÌ °¡Àå º¸¾È¿¡ °­ÇÑ °ÍÀº ¾Æ´Õ´Ï´Ù¸¸ ´ëºÎºÐÀÇ »óÇ׿¡¼­ ¾µ ¼ö ÀÖ½À´Ï´Ù. ¿©·¯ º¸¾ÈÀÌ ÇÊ¿äÇÑ »óȲ¿¡¼­ Çؽà ¾Ë°í¸®ÁòÀ¸·Î ³Î¸® ¾²ÀÌ°í TLS, SSL, PGP, SSH, IPsec µîÀÇ ÆÐÅ°Áö¿¡¼­ ¸¹ÀÌ ¾²ÀÔ´Ï´Ù. ·çºñ´Â SHA-1 ¾Ë°í¸®ÁòÀ» MD5 ¾Ë°í¸®Áò°ú °°Àº ÀÎÅÍÆäÀ̽º·Î »ç¿ëÇÒ ¼ö ÀÖ°Ô ÇÕ´Ï´Ù.

require 'digest/sha1'
sha1 = Digest::SHA1.digest('I have a fine vest!')
          ¡æ \225J{{\233\025\236\273\344\003X\233\33              [...]
sha1 = Digest::SHA1.hexdigest('I have a fine vest!')
          ¡æ 954a7b7b9b159ebbe403589bdaa8f981003a2fbc

º¸½Ã´Ù½ÃÇÇ ÀÌ°ÍÀÌ ´õ °­·ÂÇÑ Çؽöó´Â °Í¸¸ Á¦¿ÜÇϸé MD5ÀÇ ÇÔ¼ö¿Í µ¿ÀÏÇÕ´Ï´Ù. ÀÌÁ¦ Çؽø¦ ³¡³»°í ¾Ïȣȭ¿¡ ´ëÇؼ­ »ìÆ캸µµ·Ï ÇսôÙ.

1.3.2. ¾Ïȣȭ

·çºñ´Â ³»ÀåÀ¸·Î ¾Ïȣȭ ´É·ÂÀ» º¸À¯ÇÏ°í ÀÖÁö´Â ¾Ê½À´Ï´Ù. µû¶ó¼­ ÁªÀ» ¼³Ä¡ÇØ¾ß ÇÕ´Ï´Ù. ÀÌ°ÍÀÌ ·çºñÀÇ ³»Àå ¶óÀ̺귯¸®°¡ ¾Æ´ÏÁö¸¸ ÀÌ°ÍÀº ±â¼úÀûÀ¸·Î ¸Å¿ì Áß¿äÇؼ­ ª°Ô³ª¸¶ ¾ð±ÞÀ» ÇØ¾ß ÇÑ´Ù°í »ý°¢ÇϺó´Ù. ½áµåÆÄƼÀÇ ¾Ïȣȭ ¶óÀ̺귯¸®´Â http://crypt.rubyforge.org ¿¡ ÀÖ°í ÀÌ°ÍÀº ¼ø¼ö ·çºñ ¾Ïȣȭ ¶óÀ̺귯¸®ÀÔ´Ï´Ù. ÀÌ°ÍÀ» gem install crypt ¸í·ÉÀ¸·Î ¼³Ä¡ÇÒ ¼ö ÀÖ½À´Ï´Ù. ·çºñ ¼³Ä¡¸¦ ¾ÆÁ÷ ÇØ º¸½ÃÁö ¾ÊÀ¸¼Ì´Ù¸é ºÎ·Ï A¿¡ ¾î¶»°Ô RubyGemÀ» ¼³Ä¡ÇÏ´ÂÁö¿¡ ´ëÇØ ³ª¿Í ÀÖ´Â °÷ÀÇ ¸µÅ©°¡ ÀÖ½À´Ï´Ù.

¾Ïȣȭ ¶óÀ̺귯¸®´Â ³× °¡Áö ¾Ïȣȭ ¾Ë°í¸®ÁòÀÌ ÀÖ½À´Ï´Ù. Blogfish, GOST, IDEA, RijndaelÀÌ ±×°ÍÀÔ´Ï´Ù. ´ÙÇàÈ÷µµ °¢ ÀÎÅÍÆäÀ̽º´Â ¸ðµÎ µ¿ÀÏÇÕ´Ï´Ù. Blowfish ¾Ë°í¸®ÁòÀ» ¹®¼­¿¡ Àû¿ëÇÏ´Â ¿¹Á¦¸¦ º¾½Ã´Ù.

require 'crypt/blowfish'
blowfish = Crypt::Blowfish.new("A key up to 56 bytes long")
plainBlock = "ABCD1234"
encryptedBlock = blowfish.encrypt_block(plainBlock)
       ¡æ \267Z\347\331~\344\211\250
decryptedBlock = blowfish.decrypt_block(encryptedBlock)
       ¡æ ABCD1234

ÀÌ°ÍÀÌ °¡Àå ½¬¿î ¾Ïȣȭ ¶óÀ̺귯¸® Áß¿¡ ÇϳªÀÔ´Ï´Ù. °£´ÜÈ÷ Å°¸¦ »ý¼ºÀÚ·Î ³Ñ°Ü¼­ »ý¼ºÇÏ°í encrypt_block ¸Þ¼Òµå¸¦ È£ÃâÇÏ¿© µ¥ÀÌÅ͸¦ ¾ÏȣȭÇÏ°í decrypt_blockÀ» ÅëÇÏ¿© ÇØÁ¦ÇÕ´Ï´Ù. °³¹ßÀÚµéÀÌ API¸¦ °°Àº ÇüÅ·ΠÀ¯ÁöÇ߱⠶§¹®¿¡ ´Ù¸¥ ¾Ë°í¸®Áò À̸§À» Blowfish ´ë½Å¿¡ Áý¾î³Ö±â¸¸ ÇÏ¸é µ¿ÀÛÇÑ´Ù´Â °ÍÀÔ´Ï´Ù. ±×·¸Áö¸¸ ¼­·Î ´Ù¸¥ Å° ±æÀÌ¿¡ ´ëÇÑ Á¦ÇÑÀÌ ÀÖ½À´Ï´Ù.±×¸®°í ´Ù¸¥ ¸Þ¼Òµå¿Í ÇÔ¼ö¸¦ ´õ ÀÌ¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù. http://crypt.rubyforge.org/ ¿¡¼­ ´õ ¹è¿ï ¼ö ÀÖ½À´Ï´Ù.

1.4. À¯´Ö Å×½ºÆÃ

Å×½ºÆ® ÁÖµµ °³¹ßÀÌ ¿­Á¤ÀûÀ¸·Î ÀÌ·ç¾îÁö°í Àִµ¥, ƯÈ÷ ·çºñ ¼¼°è¿¡¼­´Â ´õ¿í ±×·¸½À´Ï´Ù. ·çºñ ÄÚ¾î ÆÀÀÌ À¯´Ö °Ë»ç ÇÁ·¹ÀÓ¿öÅ©ÀÎ Test::Unit¸¦ ¾ð¾îÀÇ Ç¥ÁØ ¶óÀ̺귯¸®·Î ³ÖÀº°Í¸¸ ºÁµµ ¾Ë ¼ö ÀÖ½À´Ï´Ù. ·çºñÀÇ À¯´Ö Å×½ºÆ® ÇÁ·¹ÀÓ¿öÅ©´Â ÈǸ¢Çϸ鼭µµ ¸Å¿ì °£ÆíÇÏ°Ô »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù.

Å×½ºÆ®ÀÇ ±âº»Àº ÇÁ·Î±×·¥À» ÅëÇؼ­ ´ç½ÅÀÇ Äڵ尡 Á¦´ë·Î µ¹¾Æ°¡Áö´ÂÁö È®ÀÎÇϴ°̴ϴÙ. ÀÌ°ÍÀ» ¹Ùº¸ °°´Ù°í »ý°¢ÇϽðÚÁö¸¸ Àú¸¦ ¹ÏÀ¸¼¼¿ä. À¯´Ö Å×½ºÆÃÀ» »ç¿ëÇÏ´Ù º¸¸é ¹ö±×°¡ µÎ¹è°¡±îÀÌ ´Ã¾î³ª°Ô µË´Ï´Ù. ±×·¸´Ù°í ÀÌ°ÍÀÌ, ÇÁ·Î±×·¥ÀÌ °³¹ßÀÚ¸¦ Â÷º°ÇÑ´Ù´Â ¶æÀº ¾Æ´Õ´Ï´Ù. ¹«½¼ ¶æÀÎÁö ¾Æ½Ã°ÚÁö¿ä. ¾Æ¹«µµ ÀÀ¿ë ÇÁ·Î±×·¥ÀÌ ¸ØÃß´Â °ÍÀ» ¿øÇÏÁö ¾Ê±â ¶§¹®¿¡ ¹«ÀǽÄÀûÀ¸·Î ¹ö±×°¡ »ý±æ ¼ö ÀÖ´Â °÷¿¡¼­´Â »ì±Ý»ì±Ý °È°Ô µÇ´Â °ÍÀÔ´Ï´Ù. Àú´Â Ç×»ó ÀÌ·¸°Ô ÇÕ´Ï´Ù. ÀÌ°ÍÀÌ Á¦°¡ °Ë»ç¸¦ ÇÏ´Â ÀÌÀ¯ÀÔ´Ï´Ù.

·çºñÀÇ À¯´Ö °Ë»ç ÇÁ·¹ÀÓ¿öÅ©´Â °Ë»ç¸¦ Çϱâ À§ÇÑ °£´ÜÇÑ ÀÎÅÍÆäÀ̽º¸¦ Á¦°øÇÕ´Ï´Ù. ·ÎÄà ³×Æ®¿öÅ©¿¡¼­ »ç¿ëÇϴ Ŭ¶óÀ̾ðÆ® ÀÀ¿ë ÇÁ·Î±×·¥ Áß¿¡¼­ ¸Æ ÁÖ¼Ò¸¦ ÀúÀåÇϴ Ŭ·¡½º¸¦ °Ë»çÇÑ´Ù°í ÇսôÙ.

class MacAddr
  def to_s
    return @mac_parts.join(":")
  end
  def initialize(mac)
    if mac.length < 17
      fail "MAC is too short; make sure colons are in place"
    end
    @mac_parts = mac.split(':')
  end
  def [](index)
    return @mac_parts[index]
  end
end

ÀÌ°ÍÀº ¸Þ¼Òµå ¼¼ °³Â¥¸® °£´ÜÇÑ Å¬·¡½ºÀÔ´Ï´Ù. to_s, initialize, À妽º ¸Þ¼Òµå·Î ÀÌ·ç¾î Á® ÀÖ½À´Ï´Ù. »ý¼ºÀÚÀÎ initialize´Â ¸Æ ÁÖ¼ÒÀÇ ¹®ÀÚ¿­À» ¹Þ½À´Ï´Ù. ¸¸ÀÏ ¹®ÀÚ¿­ÀÇ ±æÀÌ°¡ À߸øµÆ´Ù¸é ¿¹¿Ü°¡ ´øÁ®Áö°í ±×·¸Áö ¾ÊÀ¸¸é ÄÝ·ÐÀ¸·Î ÀÌ°ÍÀ» ³ª´©¾î¼­ ÀνºÅϽº º¯¼ö¿¡ ³Ö½À´Ï´Ù. to_s ¸Þ¼Òµå´Â ¹è¿­À» ¼­·Î ÇÕÃļ­ ÄÝ·ÐÀ» ºÙ¿©¼­ º¸³À´Ï´Ù. À妽º ¸Þ¼Òµå´Â ¿äûµÈ À妽º·Î ¸Æ ÁÖ¼Ò ¹è¿­¿¡ Á¢±ÙÇÕ´Ï´Ù. ÀÌÁ¦ ÇÒ ÀÏÀÌ »ý°åÀ¸´Ï °Ë»ç¸¦ ÇØ º¾½Ã´Ù.

Test::Unit·Î °Ë»çÇÏ´Â °ÍÀº Test::Unit::TestCase¸¦ °¢ Å×½ºÆ® ÄÉÀ̽º¿¡¼­ »ó¼ÓÇÏ´Â °ÍÀÔ´Ï´Ù. Å×½ºÆ® ÄÉÀ̽º¸¦ ¸¸µé°íÀÚ ÇÑ´Ù¸é ´ÙÀ½°ú °°ÀÌ ÇÏ¸é µË´Ï´Ù.

require 'test/unit'
class TestMac < Test::Unit::TestCase
end

¾ÆÁÖ °£´ÜÇÏÁÒ? ÀÌÁ¦ Å×½ºÆ® ÄÉÀ̽º Ŭ·¡½º¸¦ ¸¸µé¾ú½À´Ï´Ù. ÀÌÁ¦ ÀÌ°Í¿¡ °Ë»ç¸¦ ä¿ö¾ß ÇÕ´Ï´Ù. °Ë»ç´Â ÁöÀúºÐÇÑ if ¹®µéÀÇ ´Ù¹ß·Î ÀÌ·ç¾îÁ® ÀÖ½À´Ï´Ù¸¸ À¯´Ö °Ë»ç ÇÁ·¹ÀÓ¿öÅ©´Â ´ÜÁ¤¹®(ÀÌ·± Á¶°Ç¹®µéÀ» Á» ´õ ÀǹÌÀÖ°Ô µÑ·¯ ¼ö ÀÖ°Ô µË´Ï´Ù)À» ÅëÇÏ¿© ÀÌ·± °ÍµéÀ» ÃÖ´ëÇÑ ¾ø¾Ù ¼ö ÀÖ°Ô ÇØ ÁÝ´Ï´Ù. ù ¹ø° °¡Á¤ ÇüÅ´ µî°¡ °Ë»çÀÔ´Ï´Ù. µÎ °³ÀÇ µî°¡ °¡Á¤ÀÌ ÀÖ½À´Ï´Ù. assert_equal°ú assert_not_equalÀÔ´Ï´Ù. Ŭ·¡½º¸¦ ¸¸µé¾î³õÀº ÆÄÀϾȿ¡ ÀÌ Å×½ºÆ® ÄÚµµµéÀ» ¸¸µé¾î º¾½Ã´Ù.

require 'test/unit'
class TestMac < Test::Unit::TestCase
  def test_tos
    assert_equal("FF:FF:FF:FF:FF:FF",
        MacAddr.new("FF:FF:FF:FF:FF:FF").to_s)
    assert_not_equal("FF:00:FF:00:FF:FF",
        MacAddr.new("FF:FF:FF:FF:FF:FF").to_s)
  end
end

µÎ °³ÀÇ Å×½ºÆ®¸¦ ¸¸µé¾ú½À´Ï´Ù. ù ¹ø° °ÍÀº ¸Æ ÁÖ¼Ò¸¦ Á־ to_s°¡ Á¦´ë·Î µÈ °ªÀ» ¹ÝȯÇÏ´ÂÁö¸¦ ¾Ë¾Æº¾´Ï´Ù. µÎ ¹ø° °ÍÀº °°Àº °ÍÀÌÁö¸¸ ¹Ý´ëÀÇ Á¶°ÇÀ¸·Î ´Ù¸¥ °ªÀ» ÁÖ°í ÀÌ°ÍÀÌ ¼­·Î ´Ù¸¥ °ÍÀ» È®ÀÎÇÏ´Â °ÍÀÔ´Ï´Ù. Å×½ºÆ®¸¦ Çغ¸¸é Èñ¸Á´ë·Î ¼º°øÇÏ´Â °ÍÀ» º¼ ¼ö ÀÖ½À´Ï´Ù.

Loaded suite unit_test
Started
.
Finished in 0.0 seconds.
1 tests, 2 assertions, 0 failures, 0 errors

ÈǸ¢ÇÏ°Ô Àß µÇ¾ú½À´Ï´Ù. ÀÌÁ¦ ´Ù¸¥ ÇüÅÂÀÇ °¡Á¤À» º¾½Ã´Ù. nil °¡Á¤ÀÔ´Ï´Ù. ÀÌ °¡Á¤Àº assert_nil°ú assert_not_nil·Î ÀÌ·ç¾îÁ® ÀÖ°í assert_equalÀ» ÇÒ ¶§¿Í °°Àº ¹æ¹ýÀ¸·Î nil¿¡ ´ë °Ë»ç¸¦ ÇÏ°Ô µË´Ï´Ù. assert_not_nilÀ» ÀÌ¿ëÇÑ °Ë»ç¸¦ ÇØ º¾½Ã´Ù.

require 'test/unit'
class TestMac < Test::Unit::TestCase
  def test_tos
    assert_equal("FF:FF:FF:FF:FF:FF",
        MacAddr.new("FF:FF:FF:FF:FF:FF").to_s)
    assert_not_equal("FF:00:FF:00:FF:FF",
        MacAddr.new("FF:FF:FF:FF:FF:FF").to_s)
    assert_not_nil(MacAddr.new("FF:AE:F0:06:05:33"))
  end
end

´Ù½Ã »õ·Î¿î °Ë»ç¸¦ ½ÇÇàÇØ º¸°í ¿¡·¯ ¾øÀÌ ¼º°øÀûÀ¸·Î ¼öÇàµÇ¾î¾ß ÇÕ´Ï´Ù.

Loaded suite unit_test
Started
.
Finished in 0.0 seconds.
1 tests, 3 assertions, 0 failures, 0 errors

±×¸®°í ¿¡·¯°¡ ¾øÀÌ ¼öÇàÀÌ µÇ¾ú½À´Ï´Ù. ¸ÚÁö±º¿ä! ÀÌÁ¦ ´ÜÁ¤¹®ÀÇ ¸¶Áö¸· ÇüŸ¦ »ìÆ캸°í ¿¹¿Ü¸¦ ´Ù·ç¾î º¸°Ú½À´Ï´Ù. ·çºñÀÇ °Ë»ç ÇÁ·¹ÀÓ¿öÅ©´Â ÄÚµå ´ÜÀ§ÀÇ ¹Ýȯ°ªÀ» °Ë»ç ÇÏ´Â °Í »Ó¸¸ ¾Æ´Ï¶ó ¿¹¿Ü°¡ ¹ß»ýÇÏ¿´´ÂÁöÀÇ ¿©ºÎ¸¦ °Ë»çÇÒ ¼öµµ ÀÖ½À´Ï´Ù. ¸Æ ÁÖ¼Ò°¡ ¿Ã¹Ù¸£Áö ¾ÊÀ¸¸é ¿¹¿Ü°¡ ¹ß»ýÇÏ°í ÀÌ°Í¿¡ ´ëÇÑ °Ë»ç¸¦ ¼öÇàÇÏ °ÍÀ» ÀÛ¼ºÇØ º¾½Ã´Ù.

require 'test/unit'
class TestMac < Test::Unit::TestCase
  def test_tos
    assert_equal("FF:FF:FF:FF:FF:FF",
        MacAddr.new("FF:FF:FF:FF:FF:FF").to_s)
    assert_not_equal("FF:00:FF:00:FF:FF",
        MacAddr.new("FF:FF:FF:FF:FF:FF").to_s)
    assert_not_nil(MacAddr.new("FF:AE:F0:06:05:33"))
    assert_raise RuntimeError do
      MacAddr.new("AA:FF:AA:FF:AA:FF:AA:FF:AA")
    end
  end
end

ÀÌÁ¦ ´Ù½Ã °Ë»ç¸¦ ¼öÇàÇØ º¸½Ã°í, ¼º°øÀûÀÎ ¼öÇàÀÌ µÇ¾î¾ß ÇÒ °ÍÀÔ´Ï´Ù.

Loaded suite unit_test
Started
F
Finished in 0.015 seconds.
  1) Failure:
test_tos(TestMac) [test21.rb:27]:
<RuntimeError> exception expected but none was thrown.
1 tests, 4 assertions, 1 failures, 0 errors

ÀÌ·±! »ý¼ºÀÚ¸¦ º¸½Ã¸é ¸Æ ÁÖ¼Ò°¡ ³Ê¹« ªÀº °Í¸¸ °Ë»çÇÏ°Ô µÇ¾î ÀÖ½À´Ï´Ù. ÀÌÁ¦ < ¿¬»êÀÚ¸¦ != ¿¬»êÀÚ·Î ¹Ù²Ù¾î¼­ ³Ê¹« ª°Å³ª ³Ê¹« ±ä °æ¿ì¸¦ ¸ðµÎ °Ë»çÇÏ°Ô ÇÏ°í °Ë»ç¸¦ ´Ù½Ã ÇØ º¾½Ã´Ù.

Loaded suite unit_test
Started
.
Finished in 0.0 seconds.
1 tests, 4 assertions, 0 failures, 0 errors

ÁÁ¾Æ¿ä! ¿ì¸® Ŭ·¡½ºÀÇ Á¶±×¸¶ÇÑ °Ë»ç Á¶¸¦ ¸¸µé¾ú½À´Ï´Ù. ¹°·Ð ÀÌ°ÍÀº ÀÀ¿ë ÇÁ·Î±×·¥ Àüü¿¡ ÇϳªÀÇ Å¬·¡½º°¡ ÀÖ´Â °ÍÀÌÁö¸¸, °¢ Ŭ·¡½º¿¡ °Ë»ç Á¶¸¦ µÑ ¼ö ÀÖ½À´Ï´Ù. °Ë»ç Á¶°¡ Á¡Á¡ Ä¿Áö¸é ¿©·¯ °³ÀÇ ÆÄÀÏ¿¡ ³ª´©°í ½ÍÀ» °ÍÀÔ´Ï´Ù. ±×·¸Áö ¾ÊÀ¸¸é 1,200°³ÀÇ °Ë»ç »óȲÀ» ÇÑ ÆÄÀÏÀÇ ºê·¹ÀÌÅ© ´í½º Ãß´Â ÆÒ´õ ½ºÅ©¸° ¼¼À̹ö¿¡ ´Ù ³Ö¾î¾ß Çϱ⠶§¹®ÀÌÁÒ.´ÙÇàÈ÷µµ Test::UnitÀº ¶È¶ÈÇؼ­ ¿©·¯ Å×½ºÆ® ÆÄÀÏÀ» ÇϳªÀÇ °Ë»ç ¹ú¿¡ ³ÖÀ» ¼ö ÀÖ¾¹´Ï´Ù. ±× ¸»Àº ´ÙÀ½°ú °°ÀÌ ÇÒ ¼ö ÀÖ´Ù´Â ¶æÀÔ´Ï´Ù.

require 'test/unit'
require 'pandatest'
require 'breakdancetest'
require 'breakdancingpandatest'
require 'somewhatperipheralelementstest'
require 'somewhatperipheralelementsbestfriendsunclestest'

±âº»ÀûÀÎ °Ë»ç¹ýÀ» ¾Ë·Á µå·È½À´Ï´Ù. ¸µÅ© ¸ñ·ÏÀ» ºÎ·Ï A¿¡ µÎ¾î¼­ °Ë»ç ±¸µ¿ÇüÀÇ °³¹ß°ú ·çºñ¿¡¼­ÀÇ °Ë»ç¸¦ ´õ ±íÀÌ ¾Ë°í ½ÍÀº ºÐµéÀÌ Âü°íÇÏ½Ã°Ô Çß½À´Ï´Ù. Test::UnitÀÇ ¹®¼­¸¦ http://www.ruby-doc.org/stdlib/libdoc/test/unit/rdoc/classes/Test/Unit.html ¿¡¼­ ã¾Æº¸½Ã°í ¾µ ¼ö ÀÖ´Â ´Ù¸¥ °¡Á¤À» »ìÆ캸¼¼¿ä. ÀÚÁÖ ¾²Áö ¾Ê´Â °ÍÀº ¿©±â¼­ ´Ù·çÁö ¾Ê¾ÒÀ¸´Ï±î¿ä.




sponsored by andamiro
sponsored by cdnetworks
sponsored by HP

Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2011-12-29 10:56:26
Processing time 0.0105 sec