루비는 인터프리터 형식으로 실행되는 고기능 스크립트 언어이자 뛰어난 객체 지향적 언어이다.
모든 것은 객체
마츠모토 유키히로가 개발한 동적 객체 지향 스크립트 프로그래밍 언어이다. 루비는 순수 객체 지향 언어라, 정수나 문자열 등을 포함한 데이터 형식 등 모든 것이 객체이다.
루비에서는 모든 것이 객체입니다. 따라서 루비에서 모든 것은 자신만의 속성과 액션을 갖습니다. 객체지향 프로그래밍에서 이런 속성을 인스턴스 변수라고 하고, 액션을 메서드라고 합니다.
루비는 모든 형태의 것에 메서드와 인스턴스 변수를 부여합니다. 이는 모든 곳에서 일관되게 적용되므로 루비 사용법을 쉽게 해줍니다.
루비의 유연함
개발자가 루비의 어떤 부분이든 자유롭게 바꿀 수 있기 때문에 매우 유연한 언어라고 할 수 있습니다.
원한다면 루비 코어 부분도 제거하고 재정의할 수 있습니다.
이미 존재하는 코드에 무엇인가를 덧붙일 수도 있습니다.
루비는 기본적으로 개발자의 사고를 제한하지 않습니다.
루비의 표현력을 풍부하게 해주는 블록
개발자는 어떤 메서드에든 클로저를 추가함으로써 메서드의 동작을 기술할 수 있습니다.
루비와 믹스인
다른 객체지향 언어와 달리 루비는 의도적으로 단일 상속만을 제공한다.
대신 루비에는 모듈 개념(Obj-C의 카테고리라 불리는)이 있다.
모듈은 메서드의 컬렉션이다.
클래스에 모듈을 믹스인 할 수 있는데, 그렇게 하면 유용한 메서드를 손쉽게 얻을 수 있다.
예를 들어
each
메서드를 구현하고 있는 클래스는 어떤 것이든Enumerable
모듈을 믹스인 하기만 하면,each
를 루프에 이용해 많은 함수들이 추가됩니다.class MyArray
include Enumerable
end
루비 코드의 외향
var
지역변수@var
인스턴스 변수$var
전역변수
고급 기능
루비에는 자바, 파이썬처럼 예외 처리 기능이 있어서 에러 처리를 간편하게 할 수 있습니다.
루비는 모든 객체를 대상으로 마크-스윕 가비지 컬렉터를 제공합니다. 확장 라이브러리에서 레퍼런스 카운트를 관리할 필요는 없습니다. 마츠는 이를 “건강을 위한” 기능이라고 표현했습니다.
C 에서 루비를 사용하기 위한 간결한 API를 제공하기 때문에, 펄이나 파이썬보다 쉽게 C 확장기능을 만들 수 있습니다. 여기에는 스크립팅을 위해 루비를 임베딩하는 것도 포함됩니다. 물론, SWIG 인터페이스도 제공됩니다.
OS가 지원한다면 확장 기능을 동적으로 로드할 수 있습니다.
루비는 운영체제에 의존하지 않는 스레딩 기능을 제공합니다. 그리고 이는 루비가 동작하는 모든 플랫폼에 적용되어서 스레드를 지원하지 않는 MS-DOS에서도 다중 스레드 프로그램을 작성할 수 있습니다.
루비는 이식성이 매우 높습니다. 대부분 GNU Linux에서 개발되었지만 대부분의 UNIX, macOS, Windows, DOS, BeOS, OS/2 등에서 동작합니다.
루비의 다른 구현체들
JRuby
JVM(자바 가상 기기) 위에서 구동되는 루비입니다.
JVM의 최적화 JIT 컴파일러, 가비지 컬렉터, 병렬 스레드, 툴 에코시스템, 그리고 다양한 라이브러리 집합을 활용합니다.
Rubinius
‘루비로 쓰여진 루비’입니다. LLVM 위에 구축되어, Rubinius는 다른 언어 역시 구축된 멋진 가상 기기 위에서 활동합니다.
mruby
루비의 경량 구현체로 애플리케이션 안에 링크되거나 포함시킬 수 있습니다.
루비의 창시자인 유키히로 “Matz” 마츠모토가 개발을 이끌고 있습니다.
IronRuby
“.NET Framework과 강력하게 통합된” 구현체입니다.
MagLev
“통합된 개체 지속성과 분산 공유 캐시를 가진 빠르고, 안정적인 루비 구현체”입니다.
Cardinal
“Parrot 가상 기기을 위한 루비 컴파일러”(Perl 6)입니다.
Python과의 비교
파이썬이 정형화된 들여쓰기를 요구하는 반면 루비는 정형화 된 서식을 요구하지는 않는다.
세계적으로 파이썬이 인기가 더 많다.
댓글