본문 바로가기

Private/SW Programming

[0] Ruby가 뭔가요? 먹는건가요? 우걱우걱.

 

Ruby



루비의 창시작인 "유키히로 마츠모토"의 아래의 말이 루비를 공부하게 만들었습니다.
 "루비는 프로그래머가 즐거워하도록 만들어졌습니다."

마츠는 기존의 언어들이 보기 싫거나, 거칠거나, 복합하거나, 간단해서 만족할 만한 언어가 없었다고 합니다. 그래서 만든것이 루비이구요. 자신을 위해서 만들었는데. 자신과 비슷한 사람들이 루비에 관심을 갖기 시작했고 지금은 이렇게 널리 퍼졌다고 합니다.

그럼 시작해 볼까요.

 

루비의 특징들

먼저 본격적으로 공부하기 전에 루비의 특징 몇가지를 살펴볼까 합니다.

 

루비는 객체지향

 루비는 완전한 객체지향 언어입니다. C/C++/Java와는 다르게 숫자나 true, false, nill 같은 값들도 모두 객체입니다. 그래서 아래와 같은 표현이 가능합니다.

puts(1.class)
puts(0.0.class())
puts true.class
puts false.class()
puts nil.class

위 구문의 결과는 아래와 같습니다. 숫자, true/false 등이 클래스이기때문에 메서드를 호출할수가 있습니다. 그리고 더불어 괄호-()-가 생략가능하죠.

Fixnum
Float
TrueClass
FalseClass
NilClass


블록과 반복자

  루비는 반복자를 사용해서 쉽게 특정 블록을 실행시킬수 있습니다.

  상수 객체의 반복메서드를 이용한 구문입니다. C/C++,Java에서는 for, while문을 보통 사용할테지만 Ruby는 이렇게 간단합니다.

3.times{ puts "Ruby!" }
9.downto(1){|x| print x}

 배열에서도 비슷한 구문을 사용할수가 있습니다.

num = [3,2,1]
num.each {|x| print x}

이 뿐만 아니라 Hash과 파일 입출력에서도 반복메서드를 이용할수가 있습니다.

 

식과 연산자

 Ruby의 모든 구문은 식(expression)입니다. 다른 언어는 구문(statement)와 식(expression)으로 구분이 됩니다. Ruby은 모두 식입니다.

식이라는 것는 반환값을 가진다는 것인데요. 모두 반환값을 가지지만 모두 유의미한 반환값을 가지는 것은 아닙니다.

간단하게 아래와 같은 구문이 가능하다는 얘기죠.

minValue = if x<y then x else y end

메서드

루비도 객체언어이니 메서드 선언이 가능합니다. 그리고 return 이라는 구문이 없이 메서드에서 실행한 마지막값이 리턴이 됩니다.

def circle(r)
  r*r*3.14
end

puts(circle(3))

또한, 루비는 모든 모듈과 클래스가 열려 있어서 밖에서도 메서드를 추가하는 것이 그낭합니다.


대입

루비도 다른 언어들 처럼 대입연산자(=)있는데요. 편리하게도 다중 대입을 지원합니다.

그래서 아래 두번째 구문 처럼 swap을 쉽게 할수가 있습니다.

x,y = 1,2
x,y = y,x
a,b,c=[1,2,3]

다중 대입은 두개 이상의 값을 반환하는 메서드와 쓰면 편리합니다.



클래스와 모듈

클래스는 객체 상태로 동작하는 연관 메서드의 집합입니다. 

또한 루비에는 모듈이라는 것이 존재하는데요. 모듈은 클래스와 비슷하지만 상속이나 인스턴스를 만들수 없습니다. 이부분은 추후에 다시 설명할 기회가 있을겁니다.

참고 자료

 최대한 루비의 모든 자료를 담고 싶습니다만, 부족한것이 많을것입니다. 그래서 준비한 참고 자료.ㅋ

http://www.rubyist.net/~slagell/ruby/methods.html

http://enshahar.tistory.com/category/루비/레일스%20프로그래밍

http://www.joinc.co.kr/modules/moniwiki/wiki.php/Site/Ruby/Tutorial02

http://www.codeschool.com/courses/ruby-bits

http://tryruby.org