U E D R , A S I H C RSS

Ruby/2011년스터디/세미나


1. RubyLanguage 소개

RubyLanguage 소개와, 기초 문법� 설명하는 파트
  1. 루비란 무엇�가
    • 루비ì�˜ 개발 ë°°ê²½
    • 루비ì�˜ 특징
    • 루비ì�˜ 역사
  2. 루비와� 첫 만남
  3. 루비 �보기
    • 계산기로서ì�˜ 루비
    • Hello World!
    • 간단한 코드 ë”°ë�¼í•˜ê¸°

2. Ruby 문법 실습

  • 환경세팅하기
    • 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
    • 루비ì�˜ 신기한 ë°°ì—´. ì�Œì�˜ ì�¸ë�±ìŠ¤ë¥¼ 가질 수 있다
    • 루비 퀵가ì�´ë“œ


  • 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) 여백ì�´ ì�´ìƒ�하네요.. 세미나 ë��나고 고칠게요ㅜ

3. Ruby로 만들어보기

  • 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

4. 회고

�름 Keyword �유 비고
권순� 우아하다 성현�가 Ruby를 우아한 언어�고 소개함. 지혜가 책�서 $_가 우아하다는 표현� 봤다고 �함.
송지� 불완전하다
김준� ? 루비는 개발�� 실수를 스스로 메워준다? 탈�
윤종하 ifelse �거밖� 못 들어서 탈�
임�현
황현 �러 불완전하다 -> �러가 너무 많� 났�
정�정 변수
강소현 페챠쿠챠 성현(2)� 페챠쿠챠는 불완전하다함ㅋ 주제 벗어남ㅠ 탈�
권순� 탈�
송지� irb 불완전하다고 �껴진 �유가 irb 때문�기� 하다고 �껴�.( NetBeans�서 코딩하면 잘�는게 irb� 안�는 것� 있어서)
임�현
황현 트위터 변수 -> 전역 변수가 앳(@)으로 시작해서 트위터 멘셔� 같았�
정�정 ��
추후수정합니다. 다른 보시는 분들� 기억나시는대로 수정 or 추가해주세요. - 김수경

5. 후기

  • "우아한" 언어ì�¸ 루비를 다운받아 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 ì—�드온ì�„ 어찌해ë´�야겠습니다. - ìž„ìƒ�현
    • 그건 irbì�˜ 문제ì�¸ê±°ê°™ìŠµë‹ˆë‹¤..ã…‹ã…‹ 파ì�¼ëª….rb로 파ì�¼ì�„ 작성한 다ì�Œ ruby 파ì�¼ëª…으로 컴파ì�¼/실행할 수ë�„ 있어요~ - 서지혜
  • ì§„ì§œ 한번쯤 건드려보고 ì‹ì�€ 언어였는ë�° ì°¨ì�¼í”¼ì�¼ 미루다가 드디어 해봤습니다. 루비ì�˜ 문제ì �ë�„ ë§Žì�´ 보였지만 그래ë�„ (ì œ 입장ì—�서는) ì§�ê´€ì �ì�¸ê±° 같아서 좋았습니다. 시간ì�´ ë�œë‹¤ë©´ irb로가 아닌 editor를 ì�´ìš©í•´ì„œ 편집한 소스코드를 컴파ì�¼í•˜ê³  ë�Œë ¤ë³´ëŠ” 방법ë�„ í•´ë³´ë©´ 좋겠어요. - ì§€ì›�
    • ì €ë�„ ì•„ì§� RubyLanguageì—� ì�µìˆ™í•˜ì§€ 않아서 어려운 ì �ì�´ 많지만 조금ì�´ë‚˜ë§ˆ 공부하며 ì�¨ë³´ë‹ˆ ì§�ê´€ì �ì�´ë�¼ëŠ” ìƒ�ê°�ì�´ ë§Žì�´ 들었어요. 오늘 정보보호 수업ì�„ 들으며 EuclideanAlgorithmì�„ 바로 구현해보니 ë�”ë�”ìš± 그런 ì �ì�´ 와닿네요. 좀 ë�” 긴 소스코드를 작성하실ë•� Netbeans를 ì�´ìš©í•˜ì‹œëŠ” 걸 추천해요~ 매우 간단하게 설치하고 간단하게 사용할 수 있답니다. - 김수경
  • 그간 공부하신 것으로 세미나 준비하시ëŠ�ë�¼ ê³ ìƒ�하셨습니다. 하지만 ì „ 역시 "중구난방"ì�´ë�¼ëŠ” ìƒ�ê°�ì�´ 강하게 듭니다. 마츠모토씨가 좋아하는 부분만 섞어서 만들었다고 하니 그럴 수 ë°–ì—�....... 솔ì§�하게 ë§�하면 좀 ê±°ë¶€ê°�ì�´ 있어요. - 황현
    • "중구난방"ì—� í—‰-했네요ㅋㅋ ì €ë�„ ê·¸ ìƒ�ê°�했습니다. 좋게ë§�하면 장ì �들ì�„ 모아 만든것. 나ì�˜ê²Œ ë§�하면 잡종... 현재 루비는 순혈주ì�˜(펄ì�˜ 잔재지우기)ìš´ë�™ì¤‘ì�´ëž�니다. Martzê°€ í•„ë‘�ë�¼ì§€ìš”:-) 루비ì�˜ 시작ì�´ 좀 근본없어뵈는(..)ê±´ 사실ì�´ì§€ë§Œ 언어들ì�˜ 장ì �ì�„ 모ì�€ê²ƒì—�는 분명 좋ì�€ì �ë�„ 있어요:) - 서지혜
    • 난 현재 루비빠임ㅋㅋ - 서지혜
  • 세미나 후기
    1. �번 RubyLanguage 세미나는 방학때 스터디를 하며 몇 주 전부터 준비해왔습니다. 그런� 한�안 루비를 소홀히 했�니 성현�와 지혜 프리젠테�션� 들으며 저� 새롭게 알게 � 것들� 있었습니다. 부�럽네요. 분명 같� 공부했� 것들��…T_T
    2. CodeRace를 준비하며 간단한 코드를 짜보았는� ��보다 어려워서 역시 책만 �어서는 안 �겠다는 ��� 들었습니다. 그냥 �아가게 짜�면 짤 수 있겠는� 언어� 특성� 살려 우아하게 짜려니 어렵네요.
    3. 시간� 치여 준비했� CodeRace를 못 한 것� 아쉽지만 시간� 좀 걸렸��� 지혜가 RubyLanguage 문법� 설명할 때 다같� 실습하며 진행했� 것� 좋았습니다. 그냥 듣기만 했으면 지루하고 기억� 안 남았�지� 모르는� �접 따�하며 문법� �히는 방��� 참여하신 다른 분들� � 재미있고 뭔가 하나�� 기억� 확실히 남는 시간� 보내셨�거�는 ��� 드네요.
    4. 아쉽게� 못했� CodeRace는 특별한 � 좋� 다른 �정� 없는 한 다�주나 다다�주 정모�서 진행하고� 합니다. - 김수경
  • 스노우볼ì�´ëž€ 게임으로 회고를 하는 방법ì�´ 매우 신선했습니다. 시간배분ì�„ 못해 ë ˆì�´ìŠ¤ë¥¼ 못한게 마ì�Œì—� 걸렸는ë�° 좋ì�€ 마무리 ë¶€íƒ�드립니다 - 서지혜
  • 드디어 Ruby를 접해보았습니다. 여러가지 장ì �ì�´ 보였지만, ê¶�금한 것ë�„ ë§Žì�´ ìƒ�긴 세미나였습니다. 특히 메모리 관리 부분ì—�서 가비지 콜렉터 존재 유무가 ë§Žì�´ ê¶�금해지ë�”êµ°ìš”. 그래서 검색해보니 ì°¸ 재밌네요 ã…‹ã…‹ã…‹ (1. 스íƒ� ê°œë…� ì—†ì�Œ, 힙만 사용 2. 로컬변수ë�„ íž™ì—� 올림 3. 명시ì �으로 메모리 í•´ì œ 못함). 그리고 { |x| ~~ } ì�´ 문법 보면서 사용하기 꺼려지는 문법ì�´ë�¼ëŠ” ìƒ�ê°�ì�´ ë“  ê±´ ì €ë¿�ë§Œì�¸ê°€ìš”? ê¶�금하네요. - 박성현
    • 스스로 찾아보시다니 좋ì�€ ìž�세ì�´ì‹­ë‹ˆë‹¤. { |x| ~~ } 블ë¡�구문ì�€ 처ì�Œì—” 잘 ì�´í•´ê°€ 가지 않지만(지금ë�„) 함수ì�˜ 구현마저 ë�™ì �ì�¸ 루비ì�˜ 장ì �ì�´ 잘 나타나 있는 부분ì�´ë�¼ ìƒ�ê°�ë�©ë‹ˆë‹¤. - 서지혜
    • 현재 난 람다빠다! 코드ì—� 람다로 ë–¡ì¹ ì�„ 한다!! - 서지혜

Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:27:56
Processing time 0.0124 sec