루비 (프로그래밍 언어)

위키백과 ― 우리 모두의 백과사전.

Ruby(루비)
로고 그림
패러다임  다중 패러다임
발표 연도  1995년
설계자  마쓰모토 유키히로
개발자  마쓰모토 유키히로
최근 버전  1.8.6-p110 / 2007년 9월 27일
미리보기 버전  1.9.0 / 2007년 12월
자료형 체계  불규칙, 동적 타이핑
주요 구현체  YARV, Jruby, Ruby.NET, IronRuby, Rubinius
영향을 받은 언어  스몰토크, 리스프,
영향을 준 언어  그루비
운영 체제  크로스 플랫폼
라이선스  GNU 일반 공중 사용 허가서
웹사이트  http://www.ruby-lang.org/

루비(Ruby)는 동적 객체 지향 프로그래밍 언어이다. 현재 루비 온 레일즈라는 신속한 웹 개발을 지원하는 웹 개발 프레임워크의 인기로 많은 주목을 받고 있다. 나사의 우주선에 채택되기도 하였으며, 많은 호평을 받고 있다.[출처 필요]

목차

[편집] 역사

1995년 일본의 프로그래머인 마츠모토 유키히로(松本行弘(まつもとゆきひろ))가 만들어 대중에게 소개하였으며 현재 GNU 일반 공중 사용 허가서 아래 공개되어 있다. 2008년 1월 현재 최신 안정 버전은 1.8.6 버전이다. 1.9.0 버전이 2007년 12월 발표되었으나 아직 개발버전으로 간주되고 있다. 루비 2.0 은 현재 여러 팀이 서로 다른 형태로 개발 중이다.

[편집] 루비의 방향

루비의 개발자 마츠모토 유키히로는 루비가 스트레스가 없는 쉬운 프로그래밍이고, 루비는 우리의 삶을 반영해야 하며, 프로그래밍 언어는 (컴퓨터가 아닌) 인간 중심으로 설계되어야 한다고 했다.

[편집] 구현 버전

루비는 크게 두 가지 버전으로 나누어 볼 수 있다. 하나는 마츠모토 유키히로가 만든 루비 인터프리터이다. 또 다른 하나는 자바 VM을 사용하는 것으로 JRuby라고 한다. 이것은 Ruby 2.0 에 해당한다. 루비 인터프리터는 유닉스, 리눅스, 마이크로소프트 윈도, 맥 오에스 텐, MS-DOS, OS/2, 아미가 등 많은 플랫폼에 이식되어 있다. JRuby는 순수한 자바에서 실행되기 때문에, 자바 환경을 실행시킬 수 있는 어떠한 곳에서도 실행 가능하다. 닷넷 기반의 IronRuby가 출시되어 있다. 한편 순수 루비 인터프리터가 갖는 속도의 한계를 뛰어넘기 위해 만들어진 바이트코드 인터프리터인 YARV가 있다. YARV는 2007년 12월에 발표된 루비 1.9.0 버전에 포함되어 있다. 루비는 이식성이 매우 높다. 대부분 GNU 리눅스에서 개발되었지만 대부분의 유닉스. 맥 OS X, 윈도우 95/98/Me/NT/2000/XP, 도스, BeOS, OS/2 등에서 동작한다.[1]

[편집] 파이썬과의 비교

프로그래밍 언어로서의 루비는 한마디로 말한다면, "객체 지향 "이라 할 수 있다. 즉 인터프리터 형식으로 실행되는 고기능 스크립트 언어이자 뛰어난 객체 지향적 언어이다. 이러한 특성을 가지면서 루비와 같이 가독성이 뛰어난 대표적인 스크립트 언어는 파이썬이다. 이런 유사함은 각각의 언어 사용자 간에 '어떤 언어가 더 뛰어난가?' 라는 논쟁을 일으켰다. 그러나 그런 논쟁은 대체적으로 기술적으로 너무 세부적인 곳에 집착한 의미 없는 논쟁이었다.

파이썬이 정형화된 들여쓰기를 요구하는 반면 루비는 정형화된 서식을 요구하지는 않는다.

사용자 수와 구현 시스템의 수와 질 등을 비교해 보면, 세계적으로 파이썬이 인기가 더 많다. 한편, 루비의 개발자가 일본 사람이기 때문에 일본에서는 루비의 인기가 높고 서적 등도 많이 출판되고 있다. 2004년까지는 루비로 작성된 킬러 어플리케이션이 없었다. 하지만, 2004년 말에 발표되어 2005년에 루비 온 레일즈가 폭발적인 인기를 모으자 루비는 큰 주목을 받게 되었다.

[편집] 사용 예제

[편집] 기본적인 코드

  • 루비에서는 모든 것이 객체다.

극단적인 예로, + 연산자를 새로 정의하여 더하기의 개념이 아닌 빼기의 개념으로 만들어 버릴수도있다. 단순히 재정의 하기만 하면 된다. 초보자의 상태에서도 가능하다.

-199.abs # 199
"ruby is cool".length # 12
"Rick".index("c") # 2

[편집] 컬렉션

  • 배열 작성과 사용법
a = [1, 'hi', 3.14, 1, 2, [4, 5]]
 
a[2] # 3.14
a.reverse # [[4, 5], 2, 1, 3.14, 'hi', 1]
a.flatten.uniq # [1, 'hi', 3.14, 2, 4, 5]
  • 해시의 작성과 사용법
hash = {'water' => 'wet', 'fire' => 'hot'}
 
hash['fire'] # hot
 
hash.each_pair do |key, value|
  puts "#{key} is #{value}"
end
 
# 결과:
# water is wet
# fire is hot

[편집] 제어구조

다른 언어에서도 흔히 보는 제어구조를 제공한다.

if "fablic".length > 3
  puts 'ya'
else
  puts 'nop'
end
 
# 결과:
# ya
 
n = 0
while n < 3
  puts 'foobar'
  n += 1
end
 
# 결과:
# foobar
# foobar
# foobar

일부 제어구조에서는 이터레이터(Iterator)로 대신한다.

[편집] 블럭(Block)과 이터레이터(Iterator)

{ puts "Hello, World!" }
 
do puts "Hello, World!" end

[편집] 반복 처리

  • 배열의 각 요소로 반복 처리
list1 = [1, 2, 5, 13, 21]
list1.collect!{|item| item*2} # list의 모든 요소가 2배가 됨
 
# 블럭을 사용하지 않고 구현하기
list2 = [1, 2, 5, 13, 21]
n = 0
while n < list2.length
  list2[n] *= 2
  n += 1
end
  • 지정된 횟수를 반복 처리
3.times{ puts 'foobar' }
 
# 결과:
# foobar
# foobar
# foobar

[편집] 같이보기

[편집] 주석


[편집] 바깥고리