루비에 대해서
루비가 왜 인기 있을까요? 루비 팬들은 아릅답고 기교가 뛰어난 언어이기 때문이라고 말합니다. 지만 이 말로는 부족지요. 어떤 점이 루비를 이럼 매력적인 언어로 만드는 것일까요?
루비를 만든 마츠 목표
루비는 균잡힌 언어입니다. 루비를 만든 유키히로 마츠모토(일명 마츠)는 그가 좋아는 언어인 펄, 스몰토크, 아이펠, 에이다, 리스프를 섞어서 명령 프로그밍언어이자 함 언어인 새로운 언어를 만들었습니다.
그는 “루비를 단순게 만드는 것이 아니라 자연스럽게 만들려고 노력한다”라고 말곤 합니다. 우리 삶을 고자 한다는 것이지요.
이렇게 말한 적도 있습니다.
루비는 언뜻보기에는 간단해보입니다. 지만 그 내부는 무척이 복잡지요. 마 사람 몸럼요[1].
루비 성장세
1995년에 음 공개된 이후로 전세계에 많은 루비 개발자가 생겨났습니다. 특히 2006년에는 많은 사람들이 루비를 배웠습니다. 전 세계 왠만한 도시에는 활발한 사용자 그룹이 만들어졌고, 루비와 관랸된 컨퍼런스는 모두 매진었습니다.
루비 주된 커뮤니케이 채널인 루비 토크는 루에 평균 200개 글이 라 정도로 성장습니다.
프로그밍 언어 인기 순위를 제공는 TIOBE 인덱스에 따르면 루비는 세계에서 10번째로 많이 쓰이는 프로그밍 언어이다. 그리고 2006년 ‘해 언어로’ 꼽히기도 다. 이런 성장은 루비로 만들어진 대중적인 소프트웨어, 특히 루비 레일스 웹 프레임워크[2] 공이다.
루비는 완전히 무료이다. 사용뿐 만 아니라 복사, 정, 배포까지도 무료이다.
모든 것은 객체이다.
음에 마츠는 이상적인 문법을 가진 언어를 찾고 있었다. 그 때를 회고며 그는 “는 펄보다 강력고 파이썬보다는 객체지향적인 스크립트 언어가 필요했다[3]”라고 말해다.
루비에서는 모든 것이 객체이다. 따라서 루비에서 모든 것은 자신만 속성과 액을 갖는다. 객체지향 프로그밍에서 이런 속성을 인스턴스 변라고 고, 액을 메서드라고 한다. 루비 순 객체지향 접근법은 아 제럼 숫자에 액을 취는 코드로 대표곤 한다.
5.times { print "우리는 루비를 *사랑*해요! 너무 멋져요!" }
많은 언어에서 숫자는 원시 타입이지 객체는 아니다. 지만 루비는 스몰토크 향을 받아 모든 태 것에 메서드와 인스턴스 변를 부여한다. 이는 모든 곳에서 일관게 적용므로 루비 사용법을 쉽게 해준다.
루비 유연함
개발자가 루비 어떤 부분이든 자유롭게 바꿀 있기 때문에 매우 유연한 언어라고 할 있다. 원한다면 루비 코어 부분도 제거고 재정할 있다. 이미 존재는 코드에 무엇인가를 덧붙일 도 있다. 루비는 기본적으로 개발자 사고를 제한지 않는다.
를 들어 아는 + 연산자 대신 plus 라고 쓰는 것이 더 읽기 편다고 결정했다면 루비 빌트인 클스인 Numeric에 메서드드를 추가면 된다.
class Numeric
def plus(x)
self.+(x)
end
end
y = 5.plus 6
# 이제 y는 11이 었다
루비 연산자는 메서드를 이용한 문법 단축에 불과다. 물론 이 부분도 재정할 있다.
루비 표력을 풍부게 해주는 블럭
루비 블럭 기능 한 뛰어난 유연성 원천입니다. 개발자는 어떤 메서드에든 클로저를 추가함으로써 메서드 동작을 기술할 있습니다. 루비에서 이 클로저를 블럭이라고 부릅니다. 이는 PHP, 비주얼베이직 등 다른 명령 언어에서 루비로 이주한 개발자에게 가장 매력적인 기능으로 꼽힌다.
블럭은 함 언어에서 아이디어를 따왔다. 마츠는 “루비 클러저를 만들면서 는 리스프 클로저 기능을 존중고 싶었다[4]”고 말했다.
search_engines =
%w[Google Yahoo MSN].map do |engine|
"http://www." + engine.downcase + ".com"
end
위 제에서 블럭은 do ... end 문법 구조에 기술었다. map 메서드는 주어진 단어 리스트에 블럭을 적용한다. 이럼 루비 다른 메서드들도 그 동작 중 일부를 자신 블럭으로 채워넣을 있도록 개발자에게 열린 구조를 제공고 있다.
루비와 믹스인
다른 객체지향 언어와 달리 루비는 도적으로 단일 상속만을 제공한다. 대신 루비에는 모듈 개념(Object-C에서는 카테고리라 불리는)이 있다. 모듈은 메서드 컬렉이다.
클스에 모듈을 믹스인할 있는데, 그렇게 면 유용한 메서드를 손쉽게 얻을 있다. 를 들어 each 메서드를 구고 있는 클스는 어떤 것이든 Enumerable 모듈을 믹스인기만 면, each를 루프에 이용해 많은 함들이 추가된다.
class MyArray
include Enumerable
end
대부분 루비스트들은 위와 같은 기능이 복잡기만고 제한적인 다중 상속보다 훨씬 간결한 방법이라고 보고 있다.
루비 코드 외향
루비에는 변 선언이 없다. 단지 변 범위를 타내기 위해 몇가지 간단한 이름 관례를 사용고 있다.
var지역변.@var인스턴스 변.$var전역변.
이런 몇가지 장는 변 역할을 명확히 드러냄으로써 프로그머가 코드를 읽기 쉽게 해준다. 그리고 모든 인스턴스 메서드에 붙인다면 정말 피곤할 self.도 대부분 생략할 있다.
고급 기능
루비는 개발자 편를 위해 많은 기능을 제공한다. 그 중 유용한 일부는 아와 같다.
- 루비에는 자바, 파이썬럼 외 리 기능이 있다. 따라서 에러 리를 간편게 할 있다.
- 루비는 모든 객체를 대상으로 마크-스윕 가바지 컬렉터를 제공한다. 확장 라이브러리에서 참조 카운트를 관리할 필요는 없다. 마츠는 “건강을 위한” 기능이라고 표했다.
- C 에서 루비를 사용기 위한 간결한 API를 제공기때문에, 펄이 파이썬보다 쉽게 C 확장기능을 만들 있다. 여기에는 스크립팅을 위해 루비를 임베딩는 것도 포함된다. 물론, SWIG 인터이스도 제공된다.
- OS가 지원한다면 확장 기능을 동적으로 로드할 있다.
- 루비는 운체제에 존지 않는 스레딩 기능을 제공한다. 그리고 이는 루비가 동작는 모든 플랫폼에 적용된다. 따라서 스레드를 지원지 않는 MS-DOS에서도 다중 스레드 프로그램을 작성할 있다.
- 루비는 이식성이 매우 높다. 대부분 GNU 리눅스에서 개발었지만 대부분 유닉스. 맥 OS X, 윈도우 95/98/Me/NT/2000/XP, 도스, BeOS, OS/2 등에서 동작한다.
참조
1 마츠, 루비토크 메일링리스트에서, May 12th, 2000.
2 자세한 내용은 루비 레일스 홈이지를 참조.
3 마츠, An Interview with the Creator of Ruby, Nov. 29th, 2001.
4 마츠, Blocks and Closures in Ruby, December 22nd, 2003.
rubyforge.org forum.rubykr.org rubyforge.org tryruby.hobix.com rpple.ikspres.com rubyforge.org radiantcms.org rubyforge.org rubyforge.org