Ruby
Ruby란 무엇일까? Ruby를 사용하고 있는 개발자들을 Ruby가 아릅답고 기교가 뛰어난 언어이기 떄문이라고
설명한다. 하지만 이 말로는 부족한데 어떠한 점이 Ruby를 이처럼 매력적인 언어로 만드는 것일까?
Ruby를 개발한 마츠의 목표
Ruby는 균형잡힌 언어이다. Ruby를 만들 유키히로 마츠모토(일명 마츠)는 그가 좋아하는 언어인
Prel, Smalltalk, Effel, Ada, Lisp를 섞어 명령형 프로그래밍 언어이자 함수형 언어인 새로운 언어를 만들었다.
그는 Ruby를 단순히 만드는 것이 아닌 자연스럽게 만들려고 노력한다라고 말하고 있다.
Ruby는 우리의 삶을 반영하고자 한다는 뜻이다.
Ruby의 성장세
Ruby는 1995년 처음 공개된 이후 전세계에 많은 Ruby 개발자가 생겨났다. 특히 2006년에는 수많은 사람들이
Ruby라는 언어를 배우게 되며 전 세계의 웬만한 도시에는 활발한 사용자 그룹이 만들어지며
Ruby와 관련된 컨퍼런스는 모두 매진되었다. Ruby의 주된 메일링 리스트(Mailing List)인 Ruby-Talk는
2006년까지 하루 평균 200개 글이 올라올 정도로 성장하였고
최근 몇 년 동안에 커뮤니티의 경향이 하나의 집중된 메일링 리스트보다 작은 그룹에서의 토큰을 선호하게 바뀌어
토론의 숫자는 감소중이다.
Ruby는 현재 성장세와 인기 면에서는 TIOBE Index 같은 세계적 랭킹의 10위권 안에 드는 프로그래밍 언어다.
이런 성장에는 Ruby로 만들어진 대중적인 소프트웨어 특히 Ruby on Rails(루비 온 레일즈) 웹 프레임워크의 공이 크다.
Ruby는 완전히 무료인 언어이며, 사용 뿐만아니라 복사, 수정, 배포까지도 무료이다.
Ruby는 모든 것이 '객체' 이다.
Ruby의 개발자 마츠는 처음에는 이상적인 문법을 가진 언어를 찾고 있었다. 그 떄를 회고하며
"나는 Perl 보다 강력하고 Python보다 객체지향적인 스크립트 언어가 필요했다"고 말했다.
Ruby에서 모든 것은 객체이며, 따라서 Ruby의 모든 것은 자신만의 속성과 액션을 가지고 있다.
객체지향 프로그램에서 이런 속성을 인스턴스 변수(instance variable) 이라고 하고,
액션을 매서드(Method)라고 한다.
Ruby의 순수 객체지향 접근법으로는 아래 예제처럼 숫자에 액션을 취하는 코드로 대표되곤 한다.
5.times { print "우리는 Ruby를 "사랑" 해요! 너무 멋져요!" }
많은 언어에서는 숫자는 원시 타입이지 객체가 아니다. 하지만 Ruby에서는 Smalltalk의 영향을 받아 모든 형태의 것에
메서드와 인스턴스 변수를 부여하고, 이는 모든 곳에서 일관되게 적용되 Ruby를 사용하기 간편하게 한다.
Ruby는 '유연' 하다.
개발자가 Ruby의 어떤 부분이든간에 자유롭게 바꿀 수 있기에 매우 유연한 언어라고 말할 수 있다.
사용자가 원한다면 Ruby 코어 부분도 제거하고 재정의 할 수 있다. 이미 존재하는 코드에 무엇인가를 덧붙일 수 있고
Ruby는 기본적으로 개발자의 사고를 제한하지 않는다. 예를 들어 아래에 +연산자를 대신에 plus라고 쓰는 것이
더 읽기 편하다고 결정했다면 Ruby의 빌드인 클래스 Numeric에 매서드를 추가하면 된다.
class Numeric
def plus(x)
self .+(x)
end
end
y = 5.plus 6
# y는 11이 된다
Ruby의 연산자는 메서드를 이용한 문법 단축에 불과하다. 물론 이 부분도 재정의 할 수 있다.
Ruby는 표현력을 풍부하게 해주는 블록형태
Ruby의 블록 기능 또한 뛰어난 유연성의 원칙으로, 개발자는 어떠한 매서드에도 클로저를 추가함으로써
메서드의 동작을 기술할 수 있다. Ruby의 이 클로저를 블록(block)이라고 부른다.
이는 PHP, Visual Basic 등 다른 명령형 언어에서 Ruby로 이주한 개발자에게 가장 매력적인 기능으로 꼽히고 있다.
블록은 함수형 언어에서 아이디어를 따왔는데
마츠는 "Ruby 클로저를 만들면서 나는 Lips의 클로저 기능을 존중하고 싶었다"라고 말했다.
search_engines =
%w[Google Yahoo MSN].map do |engine|
"https://www." + engine.downcase + ".com"
end
위 예제에서 블록은 do ... end 문법 구조에 기술되어 있다. map 메서드는 주어진 단어 목록에 블록을 적용한다.
이처럼 Ruby의 다른 메서드도 그 동작 중 일부를 자신의 불록으로 채워넣을 수 있도록 개발자에게 열린 구조를 제공하고 있다.
Ruby와 믹스인
다른 객체지향 언어와는 달리 Ruby는 의도적으로 단일 상속만을 제공한다. 대신 Ruby에는
모듈 개념(Objective-C에서는 카테고리)이 있다.
모듈은 메서드의 컬렉션이고 클래스에 모듈을 믹스인(Mixin)할 수 있는데, 그렇게 하면 유용한 메서드를
손쉽게 얻을 수 있다. 예를 들어 each 메서드를 구현하고자 한다면 클래스가 어떻든
enumerable모듈을 믹스인 하면, each를 루프에 이용해 많은 함수들이 추가된다.
class MyArray
include Enumerable
end
대부분 루비스트들은 위와 같은 기능이 복잡하기만 하고 제한적인 다중 상속보다 훨씬 간결한 방법이라 생각한다.
Ruby 코드의 외향
Ruby는 종종 매우 제한된 문장 부호를 사용하고 일반적으로는 영어 키워드를 선호하고 있지만, 일부 문장 부호는
Ruby를 장식하는 데 사용된다. Ruby에서는 변수 선언이 없고, 단지 변수의 범위를 나타내기 위해
몇 가지 간단한 이름 관례를 사용하고 있다.
- var 지역변수
- @var 인스턴스 변수
- $var 전역변수
이러한 몇 가지 장치에는 변수의 역할을 명확히 드러냄으로 개발자가 코드를 읽기 쉽게 해줄 수 있다.
그리고 모든 인스턴스 메서드에 붙인다면 정말 피곤할 self. 도 대부분 생략할 수 있다.
Ruby의 고급 기능
Ruby에는 개발자의 편의를 위해서 많은 기능을 제공하고 있다. 그 중 유용한 일부는 아래와 같다.
- Ruby에는 Java, Python 처럼 예외 처리 기능이 있어 에러 처리를 간편히 할 수 있다.
- Ruby는 모든 객체를 대상으로 마크-스윕 가비지 컬렉션을 제공한다. 확장 라이브러리에서
래퍼런스 카운트를 관리할 필요가 없다. 마츠는 이를 "건강을 위한" 기능이라 표현했다. - C에서 Ruby를 사용하기 위해 간결한 API를 제공하기 때문에 Perl이나 Python보다 쉽게
C에 확장기능을 만들 수 있다. 여기에는 스크립팅을 위해 Ruby를 임베딩 하는 것도 포함된다.
물론 SWIG 인터페이스도 제공 - OS 가 지원한다면 확장 기능을 동적으로 로드할 수 있다.
- Ruby는 운영체제에 의존하지 않는 스레딩 기능을 제공한다. 그리고 이는 Ruby가 동작하는 모든
플랫폼에 적용되 스레드를 지원하지 않는 MS-DOS에서도 다중 스레드 프로그램을 작성할 수 있다. - Ruby는 이식성이 매우 높다. 대부분 GNU Linux에서 개발되었으나 대부분의 UNIX, macOS
Windows, DOS, BeOS, OS/2 등에서도 동작한다.
Ruby의 다른 구현체들
언어로서 Ruby는 몇몇 다른 구현체를 가지고 있다.
주로 MRI("Matz의 Ruby 인터프리터")나 CRuby(C로 작성된 Ruby)같은 레퍼런스 구현체에
대해서 이야기 하고 있으나, 다른 것들도 많다.
이들은 특정 상황에서 유용할 떄가 있는데, 다른 언어 혹은 환경과의 추가 통합을 지원한다거나
MRI가 지원하지 않는 특별한 기능을 가지거나 한다.
다음은 해당 구현체 목록이다.
- JRuby는 JVM(java 가상 머신) 위에 구동되는 Ruby다, JVM의 최적화 JIT 컴파일러, 가비지 컬렉터
병렬 스레드, 툴 에코시스템, 그리고 다양한 라이브러리 집합을 사용한다. - Rebinius는 'Ruby로 쓰인 Ruby'며, LLVM 위에 구축되, Rubinius는 다른 언어 역시
구축된 멋진 가상 머신 위에서 활동한다. - mruby는 Ruby의 경량 구현체로 애플리케이션 안에 링크되거나 포함시킬 수 있고,
Ruby의 창시자인 유키히로 마츠모토가 개발을 이끌고 있다. - IronRuby는 .NET Framework와 강력하게 통합된 구현체이다.
- MagLev는 "통합된 개체 지속성과 분산 공유 캐시를 가진 빠르고, 안정적인 Ruby 구현체"이다.
- Cardinal는 "Parrot 가상 기기를 위한 Ruby 컴파일러" (perl6) 이다.
Reference
Ruby에 대해서
Ruby가 왜 인기 있을까요? Ruby의 팬들은 아름답고 기교가 뛰어난 언어이기 때문이라고 말합니다. 하지만 이 말로는 부족하지요. 어떤 점이 Ruby를 이처럼 매력적인 언어로 만드는 것일까요? Ruby를
www.ruby-lang.org
'백엔드 > Ruby' 카테고리의 다른 글
[ruby] Ruby 튜토리얼 1 - ruby 출력과 변수 주석처리법 (0) | 2023.01.10 |
---|---|
[Ruby] 우분투 rvm + ruby 설치 + Ruby on Rails (0) | 2022.04.03 |