1. RubyLanguage 소개 ¶
RubyLanguage 소개와, 기초 문법을 설명하는 파트
- 루비란 무엇인가
- 루비의 개발 배경
- 루비의 특징
- 루비의 역사
- 루비의 개발 배경
- 루비와의 첫 만남
- http://www.ruby-lang.org
- 루비 설치
- irb 사용법
- http://www.ruby-lang.org
- 루비 써보기
- 계산기로서의 루비
- Hello World!
- 간단한 코드 따라하기
- 계산기로서의 루비
2. Ruby 문법 실습 ¶
- 환경세팅하기
- tryRuby
- irb
- visual studio의 ironRuby
- netbeans의 ruby플러그인
- eclipse ruby플러그인
- aptana (경량형 이클립스)
- tryRuby
- Hello Ruby!
- 화이트스페이스는 무시
- 1- 2
- 1
-2
- 1- 2
- 화이트스페이스는 무시
- 루비는 진정한 객체지향 언어다?!
- 루비의 모든것은 객체로써 존재한다
- 1.0/0.0 -> infinity
- 123.method
- "문자열".method
- 1.0/0.0 -> infinity
- 함수조차 nilClass의 멤버함수
- nilClass의 인스턴스는 nil하나, prototype은 없음. 다른 함수들은 가지고있음
- 멤버변수도 객체, 객체안의 객체!
- 내부속성 class
- nilClass의 인스턴스는 nil하나, prototype은 없음. 다른 함수들은 가지고있음
- 루비의 모든것은 객체로써 존재한다
- 루비의 신기한 배열. 음의 인덱스를 가질 수 있다
- 루비 퀵가이드
- Ruby.new
- 이제 객체를 만들어보자
- 루비에서는 클래스명이 대문자로 시작해야한다!(아니면 에러)
- 루비의 변수명 선언 규칙
- 루비의 변수명 선언 규칙
- initialize 함수로 객체 선언하기
- 루비의 생성자 initialize. ( 디폴트 생성자가 있나봄)
class Some
def initialize
# init variablesend
end
- 루비의 생성자 initialize. ( 디폴트 생성자가 있나봄)
- 멤버변수 선언하기(@)
def initialize - 루비에서는 클래스명이 대문자로 시작해야한다!(아니면 에러)
- 루비는 객체의 동적인 변경이 가능하다!
- 이미 생성된 인스턴스에 멤버함수 추가하기
class Some
def initialize
# init variablesend
end
def Some.function
# dynamic function declare
end - 이미 생성된 인스턴스에 멤버함수 추가하기
- 상속
@var # this is the way how declaring variable
enddef initialize
end# this is overriding
end- 함수의 오버라이딩
- 부모 클래스를 동적 변경하면, 자식 클래스의 인스턴스는 어떻게 될까?
Some2.function2 # undefined method - 부모 클래스를 동적 변경하면, 자식 클래스의 인스턴스는 어떻게 될까?
- 루비의 클래스/메소드 체이닝을 가르칠까요?
- superclass
- superclass
def Some.function2
# new function
endSome.function2 # works!
- attr_reader/attr_writer
- 맨 마지막 연산식의 결과가 리턴됨
- 메서드는 {} 대신 def/end로
- 루비의 함수는 () 생략가능!
- 문자열 반복출력 메소드 만들어보기
- while
- do/while
- for
- while
- 블럭을 이용한 반복자 함수
- 루비의 블럭 넘기기
{| 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::
- 자축
3. Ruby로 만들어보기 ¶
- RRobots를 이용한 RubyLanguage Robocode
- 를 하려고 했지만 tcl 문제로 CodeRace로 변경
- Pair Programming : Pair를 밸런스에 맞게 짜드림.
- Pair Programming : Pair를 밸런스에 맞게 짜드림.
- 레이튼 교수와 함께하는 CodeRace
- A마을에서 B마을로 가려면 강을 건너야한다.
- 배를 타고 두 마을 사이를 오갈 수 있다.
- Step 1
- 레이튼 교수가 배를 타고 건너 B마을로 건너가게 하자.
- 평가
- 레이튼 교수가 A마을에서 B마을로 건너갈 수 있는지 본다.
- 레이튼 교수가 A마을에서 B마을로 건너갈 수 있는지 본다.
- 예제
- 레이튼 교수가 배를 타고 건너 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. 회고 ¶
5. 후기 ¶
- "우아한" 언어인 루비를 다운받아 irb를 사용해 실습을 해보았다. 처음에 irb를 눌렀을 때, 무슨 dll파일이 없어서 실행이 안된다는 팝업창이 떴는데 확인 누르니까 알아서 잘 켜졌다. Ctrl+C를 눌렀더니 끌지 말지 여부가 떴는데 N을 눌러도 꺼졌다. irb보다는 넷빈즈를 이용하는게 좋다는 말이 와닿았다. 1+2를 치면 알아서 3이 나오는 것과 리턴 값이 항상 표시되는 것이 신기했다(없을 경우도 =>nil 로!). 루비의 블록 넘기기는 #define이랑 비슷한 느낌이 들었다. 새로운 언어임에도 쉽게 익힐 수 있어 좋았다. 하지만, 페어로 하는 만큼 실습 시간도 반감되지 않았을까 죄송스러웠다. 세미나 공지가 뜨면 노트북을 가져가도록 해야겠다. - 강소현
- 우선 늦게가서 if-else 밖에 못 들어먹었습니다 ㅠ 상당히 아쉬웠어요. 근데 if구문을 사용해도 의도가 명확하다면 괄호가 필요없다게 참 신기하더라구요. 제가 약간이라도 다뤄본 C, C++, Java, JavaScript, Python에서는 괄호를 반드시 사용해야만 하는 걸로 알고있었는데 말이죠. 근데 여기서 "의도가 명확하다는 것"이 무슨말인지.. 솔직히 이해가 안 가요. ㅠ 저가형 두뇌... 그리고 루비 개발도구가 참 많더군요. aptana... 루비를 위해 만들어졌지만 루비를 쓰지 못한다는게 참 인상적이었습니다. 그리고 irb의 개발환경을 보니 수정을 할 수가 없어 참 불편하더군요. Python Shell의 개발환경이 보다 더 우수한 것 같습니다. 그리고 회고할 때 주워들은 "우아하며 불완전한 언어"라는 말... 왜 그런지 궁금하네요. - 윤종하
- 의도가 명확하다는 것이 무엇인지 설명하는 것보다 의도가 명확하지 않은 상황을 제시하는 게 이해하기 좋을 것 같으니 하나 예를 들어볼게. RubyLanguage에서 괄호를 쓰지 않아도 되는 것은 if 구문에 대해서만 그런 것은 아니야. 함수의 경우도 마찬가지지. 만약 내가 매개변수 a와 b를 받아 그 둘을 더해 반환해주는 함수 add(a, b)를 만들었다 치자. 이 메서드를 다음과 같이 이용할 수 있겠지.
- 의도가 명확하다는 것이 무엇인지 설명하는 것보다 의도가 명확하지 않은 상황을 제시하는 게 이해하기 좋을 것 같으니 하나 예를 들어볼게. 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 에드온을 어찌해봐야겠습니다. - 임상현