Ruby

루비는 간결함과 생산성을 강조한 동적인 오픈 소스 프로그래밍 언어입니다. 루비의 우아한 문법으로 자연스럽게 읽히고 쓰기 편한 프로그램을 만들 수 있습니다.
루비 공식 누리집

Ruby는 범용 프로그래밍 언어 가운데 하나로, 일본의 마츠모토 유키히로가 설계하고 개발하였다. 동적이고, 객체 지향적인 스크립트 언어보다 진중하고 파이썬보다 객체적인 언어를 목표로 설계되었다. 펄과 스몰토크, 아이펠, 에이다, 리스프 등에 영향을 받았으며 주로 웹 서비스 개발에 쓰이고 있다. 특히 Ruby로 짠 웹 프레임워크인 Ruby on Rails와 Sinatra는 다른 많은 웹 프레임워크에 영향을 끼쳤다. Ruby 프로그래머들은 스스로를 Rubist라고 칭한다.

1 특징[편집]

루비는 다중 패러다임 언어로 다음과 같은 특징을 갖고 있다.

  • 완전 객체 지향. 원시 타입이 없다.
  • 동적 자료형, 오리 자료형을 사용한다.
  • 독특한 참/거짓 판별[1]
  • 언어 확장이 편리하여 메타 프로그래밍이 쉽다.

코드의 외형으로 보았을 때 눈에 띄는 특징은 다음과 같다.

  • 세미콜론이 없다. 명시적으로 사용할 수는 있으나 한 줄에 다 적으려 하지 않는 이상 굳이 쓰지 않는다.
  • 중괄호({, }) 대신 do, end를 이용하여 블록을 만든다. 한 줄에 적을 때는 중괄호를 쓰나 그 외엔 do, end를 쓰는 것이 관례이다.
  • 메소드를 호출할 때 괄호를 생략할 수 있다.
  • 1, 2와 같은 숫자나 문자열 역시 클래스라 메소드를 갖고 있다.

단점으로는 다른 주요 언어와 비교했을 때 매우 느리다.

2 구현체[편집]

2.1 MRI[편집]

MRI(Matz' Ruby Implementation)는 C로 쓰인 공식 구현체로 언어 제창자 유키히로 마츠모토가 개발하였다. 1.9버전 이후로는 사사다 코치가 개발한 YARV(Yet Another Ruby VM)와 병합되었다.

2.2 기타 구현체[편집]

  • JRuby: JVM 구현체
  • IronRuby: .Net 프레임워크 구현체
  • MacRuby: Object-C 런타임으로 구성된 OS X 구현체
  • Opal: JavaScript로 컴파일되는 구현체
  • Rubinius: Ruby로 짠 Ruby 구현체. PyPy와 같은 맥락이다.

3 Ruby가 쓰이는 곳[편집]

반 이상이 웹 관련인 것 같다면 착각이다.

3.1 Ruby로 짠 소프트웨어[편집]

3.2 Ruby를 스크립트로 사용하는 소프트웨어[편집]

  • 구글 스케치업(Google SketchUp)
  • RPG Maker [4]

4 예시[편집]

4.1 Hello, World![편집]

puts "Hello, World!"

결과:

Hello, World!

puts가 어떤 속하지 않은 함수같지만 실은 Kernel이라는 모듈에 속한 메소드이다.

4.2 반복문[편집]

3.times do |i|
  puts "리호코는 귀엽구나" + "!" * ( i + 1 ) 
end

결과:

리호코는 귀엽구나!
리호코는 귀엽구나!!
리호코는 귀엽구나!!!

4.3 열린 클래스[편집]

class Fixnum
  def plus objcet
    puts self + object
  end
end
3.plus 2

결과:

5

Ruby의 모든 클래스는 열려 있기 때문에 정의를 다시 열어 내용을 추가할 수 있다. Fixnum은 작은 정수를 다루는 내장 클래스이다. 3이 Fixnum의 인스턴트이기 때문에 메소드 호출이 가능하다.

5 패키지 관리자와 버전 관리자[편집]

Unix-like 환경에서는 RVM이나 rbenv를 통하여 다양한 Ruby 구현체를 관리할 수 있다. 외부 라이브러리를 관리하는 gem이 내장된 이후로 복잡한 RVM보다는 가벼운 rbenv를 선호하는 추세이다. 윈도우는 그런 거 ㅇ벗다

외부 라이브러리는 젬(gem)이라는 이름으로 배포되고 있다. 1.9버전부터 내장된 gem 명령어로 편리하게 필요한 라이브러리를 찾거나 만들거나 깔 수 있다.

많은 수의 gem을 사용한다면 Bundler를 이용하여 의존성 문제없이 안전하게 gem을 쓸 수 있다. Gemfile에 필요한 gem을 기술하면 Bundler가 의존성 문제를 해결해 준다.

6 기타[편집]

Ruby Warrior라는 게임이 있다. Ruby 코드로 캐릭터를 조작해 던전을 클리어하는 게임. Ruby의 기본을 익히기에 좋다.

7 각주

  1. 다른 언어와 다르게 0이 false가 아니다.
  2. 성능 문제로 인해 Scala로 갈아 탔다.
  3. 음악 스트리밍앱 "비트"를 만들었던 더블트랙이란 회사에서 개발한 SNS. 현재는 서비스 종료.
  4. RPG Maker MV부터는 Ruby 대신 JavaScript를 사용한다.