[[TableOfContents]] == RubyLanguage 소개 == RubyLanguage 소개와, 기초 ë¬¸ë²•ì„ ì„¤ëª…í•˜ëŠ” 파트 1. 루비란 무엇ì¸ê°€ * ë£¨ë¹„ì˜ ê°œë°œ ë°°ê²½ * ë£¨ë¹„ì˜ íŠ¹ì§• * ë£¨ë¹„ì˜ ì—사 1. ë£¨ë¹„ì™€ì˜ ì²« 만남 * http://www.ruby-lang.org * 루비 설치 * irb 사용법 1. 루비 ì¨ë³´ê¸° * ê³„ì‚°ê¸°ë¡œì„œì˜ ë£¨ë¹„ * Hello World! * 간단한 코드 ë”°ë¼í•˜ê¸° == Ruby 문법 실습 == * 환경세팅하기 * [http://tryruby.org/ tryRuby] * irb * visual studioì˜ ironRuby * netbeansì˜ rubyí”ŒëŸ¬ê·¸ì¸ * eclipse rubyí”ŒëŸ¬ê·¸ì¸ * aptana (경량형 ì´í´ë¦½ìФ) * Hello Ruby! * í™”ì´íŠ¸ìŠ¤íŽ˜ì´ìŠ¤ëŠ” 무시 * 1- 2 * 1 -2 * 루비는 ì§„ì •í•œ ê°ì²´ì§€í–¥ 언어다?! *ë£¨ë¹„ì˜ ëª¨ë“ ê²ƒì€ ê°ì²´ë¡œì¨ 존재한다 * 1.0/0.0 -> infinity * 123.method * "문ìžì—´".method *함수조차 nilClassì˜ ë©¤ë²„í•¨ìˆ˜ * nilClassì˜ ì¸ìŠ¤í„´ìŠ¤ëŠ” nil하나, prototypeì€ ì—†ìŒ. 다른 í•¨ìˆ˜ë“¤ì€ ê°€ì§€ê³ ìžˆìŒ * ë©¤ë²„ë³€ìˆ˜ë„ ê°ì²´, ê°ì²´ì•ˆì˜ ê°ì²´! * ë‚´ë¶€ì†ì„± class * ë£¨ë¹„ì˜ ì‹ ê¸°í•œ ë°°ì—´. ìŒì˜ ì¸ë±ìŠ¤ë¥¼ 가질 수 있다 * [http://www.ruby-lang.org/ko/documentation/quickstart/ 루비 퀵가ì´ë“œ] * Ruby.new * ì´ì œ ê°ì²´ë¥¼ ë§Œë“¤ì–´ë³´ìž * 루비ì—서는 í´ëž˜ìŠ¤ëª…ì´ ëŒ€ë¬¸ìžë¡œ 시작해야한다!(아니면 ì—러) * ë£¨ë¹„ì˜ ë³€ìˆ˜ëª… ì„ ì–¸ 규칙 * initialize 함수로 ê°ì²´ ì„ ì–¸í•˜ê¸° * ë£¨ë¹„ì˜ ìƒì„±ìž initialize. ( ë””í´íЏ ìƒì„±ìžê°€ 있나봄) class Some def initialize # init variables end end * 멤버변수 ì„ ì–¸í•˜ê¸°(@) def initialize @var # this is the way how declaring variable end * 루비는 ê°ì²´ì˜ ë™ì ì¸ ë³€ê²½ì´ ê°€ëŠ¥í•˜ë‹¤! * ì´ë¯¸ ìƒì„±ëœ ì¸ìŠ¤í„´ìŠ¤ì— ë©¤ë²„í•¨ìˆ˜ 추가하기 class Some def initialize # init variables end end def Some.function # dynamic function declare end * ìƒì† class Some2 < Some def initialize # this is overriding end end * í•¨ìˆ˜ì˜ ì˜¤ë²„ë¼ì´ë”© * 부모 í´ëž˜ìŠ¤ë¥¼ ë™ì 변경하면, ìžì‹ í´ëž˜ìŠ¤ì˜ ì¸ìŠ¤í„´ìŠ¤ëŠ” 어떻게 ë 까? Some2.function2 # undefined method def Some.function2 # new function end Some.function2 # works! * ë£¨ë¹„ì˜ í´ëž˜ìФ/메소드 ì²´ì´ë‹ì„ ê°€ë¥´ì¹ ê¹Œìš”? * superclass * attr_reader/attr_writer * 메서드를 만들어보ìž! (루비는 returnë¬¸ì´ ì—†ì–´ë„ ë¼) * 맨 마지막 ì—°ì‚°ì‹ì˜ 결과가 ë¦¬í„´ë¨ * 메서드는 {} ëŒ€ì‹ def/end로 * ë£¨ë¹„ì˜ í•¨ìˆ˜ëŠ” () ìƒëžµê°€ëŠ¥! * 문ìžì—´ ë°˜ë³µì¶œë ¥ 메소드 만들어보기 * while * do/while * for * 블ëŸì„ ì´ìš©í•œ ë°˜ë³µìž í•¨ìˆ˜ * ë£¨ë¹„ì˜ ë¸”ëŸ ë„˜ê¸°ê¸° {| parameters| do something with parameters..} yield : get the block and run it a = [1, 2, 3, 4, 5] a.each {|x| puts x+1} # bloackì€ ë³µì‚¬ ì „ë‹¬ì¸ê°€?(maybe) * 기본 ìž…ì¶œë ¥ * ìž…ë ¥ë°›ì€ ë¬¸ìžì—´ 반복 ì¶œë ¥í•´ë³´ê¸° * ìž…ë ¥ <- gets * ì¶œë ¥ <- puts, print * ì •ê·œí‘œí˜„ì‹(ìƒëžµí•˜ëŠ”ê²Œ ë‚˜ì„ ë“¯) * 예외처리하기 (세번째 세미나ì—서 í•„ìš”í• ê¹Œ?) * if/else로 예외 ì²˜ë¦¬í•´ë³´ìž * rescue로 만들기 * ìœ ë‹›í…ŒìŠ¤íŠ¸(ìƒëžµê°€ëŠ¥) * ìƒì†ì„ 통한 테스트 ì¼€ì´ìФ 만들기 UnitTest:: * ì—¬ëŸ¬ë¶„ì€ ì´ì œ 루비 ìœ ì €ìž…ë‹ˆë‹¤! * ìžì¶• DeleteMe) ì—¬ë°±ì´ ì´ìƒí•˜ë„¤ìš”.. 세미나 ëë‚˜ê³ ê³ ì¹ ê²Œìš”ã…œ == Ruby로 만들어보기 == * [http://rubyforge.org/frs/?group_id=1109 RRobots]를 ì´ìš©í•œ RubyLanguage Robocode * 를 í•˜ë ¤ê³ í–ˆì§€ë§Œ tcl ë¬¸ì œë¡œ CodeRace로 변경 * Pair Programming : Pair를 ë°¸ëŸ°ìŠ¤ì— ë§žê²Œ 짜드림. * '''ë ˆì´íм êµìˆ˜ì™€ 함께하는 CodeRace''' * A마ì„ì—서 B마ì„로 ê°€ë ¤ë©´ ê°•ì„ ê±´ë„ˆì•¼í•œë‹¤. * 배를 íƒ€ê³ ë‘ ë§ˆì„ ì‚¬ì´ë¥¼ 오갈 수 있다. * Step 1 * ë ˆì´íм êµìˆ˜ê°€ 배를 íƒ€ê³ ê±´ë„ˆ B마ì„로 건너가게 하ìž. * í‰ê°€ * ë ˆì´íм êµìˆ˜ê°€ A마ì„ì—서 B마ì„로 건너갈 수 있는지 본다. * ì˜ˆì œ {{{ class Layton def initialize @location = 'A' end def crossRiver printLocation @location = 'B' print " -> " printLocation print "\n" end def printLocation print @location end end }}} == íšŒê³ == * Snowball Keyword(ê°€ì œ) * Winner : [송지ì›], [황현] || ì´ë¦„ || Keyword || ì´ìœ || ë¹„ê³ || || [권순ì˜] || 우아하다 ||성현ì´ê°€ Ruby를 우아한 언어ë¼ê³ 소개함. 지혜가 ì±…ì—서 $_ê°€ 우아하다는 í‘œí˜„ì„ ë´¤ë‹¤ê³ ë§í•¨. || || || [송지ì›] || ë¶ˆì™„ì „í•˜ë‹¤ || || || || [김준ì„] || ? || 루비는 개발ìžì˜ 실수를 스스로 메워준다? || íƒˆë½ || || [윤종하] || ifelse || ì´ê±°ë°–ì— ëª» 들어서 || íƒˆë½ || || [ìž„ìƒí˜„] || || || || || [황현] || || || || || [ì •ì˜ì •] || || || || || [강소현] || íŽ˜ì± ì¿ ì± || 성현(2)ì˜ íŽ˜ì± ì¿ ì± ëŠ” ë¶ˆì™„ì „í•˜ë‹¤í•¨ã…‹ ì£¼ì œ ë²—ì–´ë‚¨ã… || íƒˆë½ || || [권순ì˜] || || || íƒˆë½ || || [송지ì›] || || || || || [ìž„ìƒí˜„] || || || || || [황현] || || || || || [ì •ì˜ì •] || || || || ---- ì¶”í›„ìˆ˜ì •í•©ë‹ˆë‹¤. 다른 보시는 ë¶„ë“¤ë„ ê¸°ì–µë‚˜ì‹œëŠ”ëŒ€ë¡œ ìˆ˜ì • or 추가해주세요. - [김수경] == 후기 == * "우아한" ì–¸ì–´ì¸ ë£¨ë¹„ë¥¼ 다운받아 irb를 사용해 ì‹¤ìŠµì„ í•´ë³´ì•˜ë‹¤. 처ìŒì— irb를 ëˆŒë €ì„ ë•Œ, 무슨 dll파ì¼ì´ 없어서 ì‹¤í–‰ì´ ì•ˆëœë‹¤ëŠ” íŒì—…ì°½ì´ ë–´ëŠ”ë° í™•ì¸ ëˆ„ë¥´ë‹ˆê¹Œ 알아서 잘 켜졌다. Ctrl+C를 ëˆŒë €ë”니 ëŒì§€ ë§ì§€ 여부가 ë–´ëŠ”ë° Nì„ ëˆŒëŸ¬ë„ êº¼ì¡Œë‹¤. irb보다는 넷빈즈를 ì´ìš©í•˜ëŠ”ê²Œ 좋다는 ë§ì´ 와닿았다. 1+2를 치면 알아서 3ì´ ë‚˜ì˜¤ëŠ” 것과 리턴 ê°’ì´ í•ìƒ í‘œì‹œë˜ëŠ” ê²ƒì´ ì‹ ê¸°í–ˆë‹¤(ì—†ì„ ê²½ìš°ë„ =>nil 로!). ë£¨ë¹„ì˜ ë¸”ë¡ ë„˜ê¸°ê¸°ëŠ” #defineì´ëž‘ 비슷한 ëŠë‚Œì´ 들었다. 새로운 언어임ì—ë„ ì‰½ê²Œ ìµíž 수 있어 좋았다. 하지만, 페어로 하는 ë§Œí¼ ì‹¤ìŠµ ì‹œê°„ë„ ë°˜ê°ë˜ì§€ 않았ì„까 ì£„ì†¡ìŠ¤ëŸ¬ì› ë‹¤. 세미나 공지가 뜨면 노트ë¶ì„ ê°€ì ¸ê°€ë„ë¡ í•´ì•¼ê² ë‹¤. - [강소현] * ì•„.. 세미나가 ë나니까 í• ë§ì´ ìƒê°ë‚˜ë„¤ìš”..ã… ã… ë£¨ë¹„ì˜ ë¸”ë¡ ë„˜ê¸°ê¸°ëŠ” 사실 블ë¡ì´ yield구문ì—게 ì „ë‹¬ë˜ëŠ” ê²ƒì´ ì•„ë‹ˆë¼ yield를 만나면 í•¨ìˆ˜ì˜ í˜¸ì¶œë¶€ë¡œ ì»¨íŠ¸ë¡¤ì´ ì´ë™í•´ 블ë¡ì´ 있는지 확ì¸í•˜ê³ 실행합니다. ì±…ì—서는 co-routine ì´ë¼ê³ ì´í•´í•˜ë©´ ëœë‹¤ëŠ” ì„¤ëª…ì´ ìžˆì–´ìš”~ 블ë¡ì´ ì „ë‹¬ë˜ëŠ”ê²Œ ì•„ë‹ˆë¼ ì»¨íŠ¸ë¡¤ 플로우가 왔다갔다!! 스위치 태스킹처럼요. 세미나때 ì„¤ëª…ì„ ìž˜ í•´ë“œë ¸ì–´ì•¼ í–ˆëŠ”ë° ì£„ì†¡ì²œë§Œë²ˆìž…ë‹ˆë‹¤ - [서지혜] * 우리 ì´ê±° ê³µë¶€í–ˆì—ˆëŠ”ë° ë‚˜ë„ ê¹Œë¨¹ì—ˆë„¤â€¦ ì—시 공부는 한번 하면 까먹나ë´ã… ã… - [김수경] * ìš°ì„ ëŠ¦ê²Œê°€ì„œ if-else ë°–ì— ëª» 들어먹었습니다 ã… ìƒë‹¹ížˆ ì•„ì‰¬ì› ì–´ìš”. ê·¼ë° ifêµ¬ë¬¸ì„ ì‚¬ìš©í•´ë„ ì˜ë„ê°€ 명확하다면 괄호가 필요없다게 ì°¸ ì‹ ê¸°í•˜ë”ë¼êµ¬ìš”. ì œê°€ 약간ì´ë¼ë„ 다뤄본 C, C++, Java, JavaScript, Pythonì—서는 괄호를 반드시 사용해야만 하는 걸로 ì•Œê³ ìžˆì—ˆëŠ”ë° ë§ì´ì£ . ê·¼ë° ì—¬ê¸°ì„œ "ì˜ë„ê°€ 명확하다는 것"ì´ ë¬´ìŠ¨ë§ì¸ì§€.. 솔ì§ížˆ ì´í•´ê°€ 안 가요. ã… ì €ê°€í˜• ë‘뇌... ê·¸ë¦¬ê³ ë£¨ë¹„ 개발ë„구가 ì°¸ ë§Žë”êµ°ìš”. aptana... 루비를 위해 만들어졌지만 루비를 ì“°ì§€ 못한다는게 ì°¸ ì¸ìƒì ì´ì—ˆìŠµë‹ˆë‹¤. ê·¸ë¦¬ê³ irbì˜ ê°œë°œí™˜ê²½ì„ ë³´ë‹ˆ ìˆ˜ì •ì„ í• ìˆ˜ê°€ 없어 ì°¸ 불편하ë”êµ°ìš”. Python Shellì˜ ê°œë°œí™˜ê²½ì´ ë³´ë‹¤ ë” ìš°ìˆ˜í•œ 것 같습니다. ê·¸ë¦¬ê³ íšŒê³ í• ë•Œ ì£¼ì›Œë“¤ì€ "우아하며 ë¶ˆì™„ì „í•œ 언어"ë¼ëŠ” ë§... 왜 그런지 ê¶ê¸ˆí•˜ë„¤ìš”. - [윤종하] * ''ì˜ë„ê°€ 명확하다는 것''ì´ ë¬´ì—‡ì¸ì§€ 설명하는 것보다 ì˜ë„ê°€ 명확하지 ì•Šì€ ìƒí™©ì„ ì œì‹œí•˜ëŠ” 게 ì´í•´í•˜ê¸° ì¢‹ì„ ê²ƒ 같으니 하나 예를 들어볼게. RubyLanguageì—서 괄호를 ì“°ì§€ ì•Šì•„ë„ ë˜ëŠ” ê²ƒì€ if êµ¬ë¬¸ì— ëŒ€í•´ì„œë§Œ 그런 ê²ƒì€ ì•„ë‹ˆì•¼. í•¨ìˆ˜ì˜ ê²½ìš°ë„ ë§ˆì°¬ê°€ì§€ì§€. 만약 ë‚´ê°€ 매개변수 a와 b를 받아 ê·¸ ë‘˜ì„ ë”í•´ 반환해주는 함수 add(a, b)를 만들었다 치ìž. ì´ ë©”ì„œë“œë¥¼ 다ìŒê³¼ ê°™ì´ ì´ìš©í• 수 ìžˆê² ì§€. {{{ add(3,4) # => 7 반환 (#ì€ RubyLanguageì—서 주ì„ì„ ë‚˜íƒ€ë‚¼ë•Œ 사용) add 3,4 # => 7 반환 }}} 윗줄 아랫줄 ëª¨ë‘ ë¬¸ì œ ì—†ì´ ì‹¤í–‰ë˜ì§€. ì´ ê²½ìš°ëŠ” ì˜ë„ê°€ 명확한 경우야. ê·¸ëŸ°ë° ì´ add 메서드를 호출해서 3, 4, 7ì„ ë”한 ê°’ì„ ì•Œê³ ì‹¶ë‹¤ë©´ {{{ add(3, add(4, 7)) }}} ì´ë ‡ê²Œ 메서드를 중첩해서 í˜¸ì¶œí•´ì•¼ê² ì§€? ì´ ë•Œ 괄호를 사용하지 않으면 다ìŒê³¼ ê°™ì´ ì“¸ 수 있어. {{{ add 3, add 4, 7 }}} ê·¸ëŸ°ë° ìœ„ 코드는 대체 ì–´ë–¤ ê²ƒì´ ì²˜ìŒ ë‚˜ì˜¨ add 메서드ì—게 넘겨주는 매개변수ì¸ì§€ 명확하지 않지? ì´ëŸ° 경우는 ì˜ë„ê°€ 불명확한 ê²½ìš°ë¼ ë°˜ë“œì‹œ 괄호를 사용해서 코드를 작성해야해. - [김수경] * Ruby ë¼ëŠ” 언어를 처ìŒìœ¼ë¡œ ì ‘í•˜ê²Œ ë˜ì—ˆìŠµë‹ˆë‹¤. irb를 ì´ìš©í•˜ì—¬ Ruby ì½”ë”©ì„ ì—°ìŠµí•´ 보았습니다. 코드 ìˆ˜ì •ì´ ì¼ë‹¨ 한번 해놨으면 다시 ì •ì˜ë¥¼ 해야ë˜ì„œ 매우 불편하였으나 cê°™ì´ ë¬¸ë²•ì´ ë”±ë”±í•˜ì§€ ì•Šê³ ìƒëžµí•´ë„ 구문 ìžì²´ì˜ ì˜ë¯¸ê°€ 명확하다면 알아서 해주는 ëª¨ìŠµì´ ë§¤ìš° ì‹ ê¸°í–ˆìŠµë‹ˆë‹¤. ë‚˜ì¤‘ì— luaë„ ê³µë¶€í•´ì„œ wow ì—ë“œì˜¨ì„ ì–´ì°Œí•´ë´ì•¼ê² 습니다. - [ìž„ìƒí˜„] ---- [Ruby/2011년스터디], [ì •ëª¨/2011.3.7]