Follow Me: I Meet Ruby
Ruby 프로그래밍을 시작해 봅시다. 내 생각에는 아마 이 글을 읽으시는 분도 저 처럼 성격이 급할 것이라고 생각됩니다. Ruby를 잘 인스톨 했다면 윈도우키+r을 눌러서 [실행]창에 다음과 같이 적어 놓읍시다.

irb

Command 창이 하나 뜨면서 irb(main):001:0> 라고 찍혀있습니다.

이제 준비가 끝났습니다. Ruby를 시작했다는 것을 혼자만 알고 있기 아깝지 않습니까? 옆자리 동료나 뒤에앉은 상사에게, 아니 이 세상을 향해서 인사 한번 하고 시작합시다. Hello, World!

내가 한 일을 컴퓨터도 할 수 있을까요? Ruby가 컴퓨터한테 명령을 내리기 위해서 다음과 같이 입력해 봅시다.

print "Hello, World!"

자, 입을 크게 한번 벌려보세요. 턱도 좀 움직여보고. 한번 읽어 봅니다. 기호들은 빼고요. 프린트 헬로우 월드! 읽어보셨나요? 그럼 컴퓨터가 어떤 반응을 보입니까?

Hello, world=> nil

시킨데로 했습니다. (솔직히 말하죠. 아직 irb가 왜 =>nil 를 출력하는지 모르겠습니다.)

Ruby는 객체 지향 언어입니다. Ruby는 진정한 혹은 순전한 객체 지향 언어입니다. 이것이 의미하는 바는 Ruby에서 사용하는 모든 것은 객체이고 Ruby로 만드는 모든 것들 또한 객체라는 겁니다. 이미 객체 지향 언어 몇가지를 익히고 계실지 모르겠습니다. C++, Java 그리고 C#을 비롯한 .net 언어들 다 객체 지향 언어입니다. 하지만, 제가 보기엔 Ruby가 앞에서 말한 언어들보다 자유롭게 객체에 대해 생각할 수 있게 해준다고 생각합니다. 다르게 표현하면, Ruby는 우리의 생각을 자유롭게 표현할 수 있게 도와줍니다.

예를들어 Hello, world 라는 문장이 몇글자 인지 알고 싶을때 Ruby식으로 이렇게 합니다.
C: strlen("Hello, world")
Ruby: "Hello, world".length

"Mc Ryan"의 이름에 y가 몇번째 나오는 문자일까요?
"Mc Ryan".index("y")

-92의 절대값은?
Java: number = Math.abs(-92);
Ruby: number = -92.abs

-92를 Java는 숫자로 보지만, Ruby는 객체로 생각합니다. 객체는 흔히 적절한 데이터와 그것을 사용할 수 있는 메소드로 구성되어있죠.



제어문에는 if, while, for 등이 있습니다. C계열 언어라고 할 수 있는 C, C++, Java, C# - 프로그래밍 언어론 시간에는 ARGOL계열이라고 배우지만 편의상 앞으로 C계열 언어라고 하겠습니다 - 에서 사용하는 것과 문법적으로 의미 및 표기법이 흡사 합니다. 눈에 띄는 차이점이라고 한다면 Brace가 없는 거죠.

1부터 100까지 2씩 곱해나가다가 100이 넘으면 멈추는 로직을 한번 만들어 봅시다.

C의 경우

int i = 1;
while ( i < 100 )
{
  if ( (i *= 2) > 100 )
    break;
}

printf("%d ", i);

같은 로직이 Ruby라면
i = 1
while i < 100
  if (i *= 2) > 100
    break
  end
end

별로 차이가 없죠? 기존 C계열 언어의 Brace를 생략하면서 제어 구간의 마지막을 end로 일괄되게 표시함으로 문법의 간결함을 꾀했습니다. 또한 좀 더 사람들의 언어에 가까운 문법적인 특징이 있는데, 바로 조건절을 만드는 if, while 이 해야할 동작 뒤에 표시될 수 있다는 겁니다. 예를들어 위의 예에서 if문을

  if (i *= 2) > 100
    break
  end

이렇게 표시해도 같은 식입니다.
  break if (i = i * 2) > 100

"i에 2를 곱해서 100보다 크면 탈출(break)해라" 라고 말하는 거죠. 그럼 전체 프로그램이 짧아지는 효과가 있죠.
i = 1
while i < 100
  break if (i = i * 2) > 100
end

그럼 while도 될까요? 네 됩니다.
i = 1
break if (i = i * 2) > 100 while i < 100

처음 코드와 비교해서 무척 짧아진 것을 확인할 수 있습니다. 일단 한줄로 표시함으로 end가 생략되었고, 생각의 흐름을 방해하지 않고 코딩할 수 있다는 장점이 있습니다. 조건부터 생각하고 행동을 결정할 때도 있지만 행동을 결정하고 그에 해당하는 조건을 생각할 때도 있으니까요. 프로그래머의 생각을 표현해주는데 될 수 있으면 적은 고민만을 요구하는 언어. 바로 Ruby가 지향하는 바입니다.

그리고 하나 더! Ruby에서는 변수를 사용하기 전에 특정한 타입을 지정해서 선언한 후 사용할 필요가 없습니다. 사용하는 순간 Ruby가 다 알아서 해줍니다. 난 모르지~ Ruby가 다 알아서 해주니까!



프로그래밍 언어에 빠질 수 없는 것이 바로 배열입니다. 배열은 흔히 연속된 메모리의 공간으로 추상화 됩니다. 대게 같은 형식의 데이터가 연속되어 있습니다. 특히 C나 C++의 경우는 그것이 진실이기도 하죠. 하지만 Ruby는 좀더 High-Level 언어입니다. Ruby는 다음과 같은 배열의 사용이 가능합니다.

a = [ 1, 'pie', 3.14 ]

보통 같은 데이터 형식의 데이터로만 이루어진 배열을 쓰던 저에게 기본적으로 이렇게 자유로운 배열을 허락하는 Ruby가 무척이나 생소해 보입니다.
단순 반복작업을 줄이기 위한 장치가 있습니다.

a = %w[ apple egg golf fear ruby ]

irb(main):001:0> a = [1, 'pie', 3.14]
=> [1, "pie", 3.14]
irb(main):002:0> a[0]
=> 1
irb(main):003:0> a[2]
=> 3.14
irb(main):004:0> a[3]
=> nil
irb(main):005:0> a
=> [1, "pie", 3.14]
irb(main):006:0> a = %w[ apple egg golf fear ruby ]
=> ["apple", "egg", "golf", "fear", "ruby"]
irb(main):007:0> a
=> ["apple", "egg", "golf", "fear", "ruby"]
irb(main):008:0>

놀랍지 않습니까? 이 기능은 편의를 위한 조그만 것이지만 사용할 곳이 참 많습니다. 감동스럽기 까지 하네요.

그럼 irb가 보여주는 것 말고 프로그램적으로 배열의 내용을 확인하려면 어떻게 할까요?
for i in a
  puts i
end

이렇게 하면 배열 a의 내용을 하나씩 i에 대입해서 puts i 를 이용해서 출력하게 됩니다. 배열을 사용한 프로그래밍은 '블럭'이라는 루비의 특징적인 기능으로도 가능합니다 (실은 훨씬 더 많이 쓰이는것 같네요). 아마 다음번 글에서 설명하게 될 듯 합니다.

자주 사용하는 자료구조로 해쉬가 있습니다. 해쉬는 키와 값의 한쌍으로 이루어진 아이템들의 집합이라고 할 수 있습니다. 아래처럼 정의해서 사용할 수 있죠.

glossary = {
'UML' => 'Unified Modeling Language',
'GoF' => 'gang-of-four'
}

괄호가 [ 에서 {로 바뀌고 key, value의 쌍을 => 기호로 표시합니다. 사용은
glossary['UML']
=> Unified Modeling Language
glossary['GoF']
=> gang-of-four
마치 C에서 배열의 인덱스를 넣는 것 처럼 key 값을 넣으면 내용이 나오고, key에 value를 대입하면 값이 설정됩니다.
glossary['SLR'] = 'Single Lens Reflex'
glossary['SLR']
=> Single Lens Reflex
glossary['SLR'] = 'Simple LR parser'
glossary['SLR']
=> Simple LR parser

* 오늘은 간단하게 Ruby의 제어문과 배열을 살펴봤습니다. 쉬운 내용인데도 정리해보려고 하니 시간이 많이 걸리는군요. 이런 글은 일주일에 2개 쓰기 힘들것 같습니다 ^^;;
** 코드 부분은 글꼴을 다르게 하던가 하고 싶은데, 이글루스의 블로그로는 표현에 한계가 많네요. 뭔가 다른 방법을 찾아봐야겠습니다. 혹은 스스로 블로그를 하나 만들지도 모르겠습니다. Ruby에게는 Ruby on Rail 이라는 강력한 프레임웤이 있거든요~!!

재미있는 Ruby FAQ: "Ruby"와"ruby"는 어느 쪽이 올바릅니까?

Ruby의 정식적 표기는"Ruby"입니다. 다만, 커멘드명은"ruby"이고, 또 병렬해 위화감이 없는 한, Ruby 대신에 ruby를 사용하는 것은 허용 됩니다.

하지만 "RUBY", "루비"는 언어명으로서는 허용되지 않습니다.
역사적으로는"ruby"가 정식명칭이었던 시대가 있습니다
by 하얀아이 | 2005/11/08 10:55 | Ruby & Rails | 트랙백(4) | 덧글(3)
트랙백 주소 : http://hayani.egloos.com/tb/863280
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]
Tracked from Raven Riley .. at 2008/01/17 08:57

제목 : Raven Riley
Raven Riley...more

Tracked from Raven Riley .. at 2008/01/23 15:28

제목 : Raven Riley
Raven Riley...more

Tracked from stlouisperso.. at 2008/08/03 06:25

제목 : Missouri Personal Injury Att..
hey great site....more

Tracked from NathanC at 2008/12/18 20:29

제목 : just stopped in.
Gotta love msn, very fine stuff. Thank you....more

Commented by 수민 at 2005/11/08 20:24
파이썬이랑 많이 비슷하다~ ㅎㅎ
while문 줄이는거 잼있네.. 파이썬에도 비슷한거 있을지 찾아봐야징..
파이썬에서는 잼있는게 indent 가 문법이야.. 그래서 end조차 필요없음.
글고 HelloWorld->nil에서 nil 나오는건 print문의 return value같은디?
Commented by 하얀아이 at 2005/11/08 20:53
그렇군. print의 return value가 맞는거 같다 ^^;
Ruby는 return 이라고 안써줘도 마지막 evaluation 된 값이 return 되더라구.
그래서 nil 인게로군.
Commented by papaya at 2005/11/10 11:48
잘 봤으... 주구장창 verilog만 하다가 얼마만에 보는 객체지향 언어인고..ㅎ
※ 이 포스트는 더 이상 덧글을 남길 수 없습니다.
< 이전페이지 다음페이지 >