Ruby를 공부해보자

2008. 5. 6. 18:57Other languages & Web programming/Ruby

루비라는 것을 함 해보기로 했다.

우선 루비가 무엇인지 알아봤다.
http://www.ruby-lang.org/ko/ 에서 추출한 내용입니다.

보다 자세한 내용은 링크를 참고하면 될것 같다....
그중에서 몇가지만 정리해서 적어둔다.
사이트를 보면서 Try Ruby(브라우저창에서) 라는 부분이 있다...
브라우저창에다가 루비코드를 입력하면 곧바로 실행결과값이 나오는....건디..
음..... 그전에 20분 가이드를 먼저 숙지하고 참고하는것이 좋을 듯 싶다.

오늘은 여기까지 함 해볼란다...

루비를 만든 마츠의 목표

루비는 균형잡힌 언어입니다. 루비를 만든 유키히로 마츠모토(일명 마츠)는 그가 좋아하는 언어인 펄, 스몰토크, 아이펠, 에이다, 리스프를 섞어서 명령형 프로그래밍언어이자 함수형 언어인 새로운 언어를 만들었습니다.

그는 “루비를 단순하게 만드는 것이 아니라 자연스럽게 만들려고 노력한다”라고 말하곤 합니다. 우리의 삶을 반영하고자 한다는 것이지요.

 ======> 이넘의 유키히로 마츠모토 라는 넘인가부다....-.,-a
루비는 완전히 무료이다. 사용뿐 만 아니라 복사, 수정, 배포까지도 무료이다.

모든 것은 객체이다.

루비에서는 모든 것이 객체이다. 따라서 루비에서 모든 것은 자신만의 속성과 액션을 갖는다. 객체지향 프로그래밍에서 이런 속성을 인스턴스 변수라고 하고, 액션을 메서드라고 한다. 루비의 순수 객체지향 접근법은 아래의 예제처럼 숫자에 액션을 취하는 코드로 대표되곤 한다.

5.times { print "우리는 루비를 *사랑*해요! 너무 멋져요!" }

많은 언어에서 숫자는 원시 타입이지 객체는 아니다. 하지만 루비는 스몰토크의 영향을 받아 모든 형태의 것에 메서드와 인스턴스 변수를 부여한다. 이는 모든 곳에서 일관되게 적용되므로 루비 사용법을 쉽게 해준다.

루비의 유연함

개발자가 루비의 어떤 부분이든 자유롭게 바꿀 수 있기 때문에 매우 유연한 언어라고 할 수 있다. 원한다면 루비 코어 부분도 제거하고 재정의할 수 있다. 이미 존재하는 코드에 무엇인가를 덧붙일 수도 있다. 루비는 기본적으로 개발자의 사고를 제한하지 않는다.

예를 들어 아래는 + 연산자 대신 plus 라고 쓰는 것이 더 읽기 편하다고 결정했다면 루비의 빌트인 클래스인 Numeric에 메서드드를 추가하면 된다.

class Numeric
  def plus(x)
    self.+(x)
  end
end

y = 5.plus 6
# 이제 y는 11이 되었다

루비의 연산자는 메서드를 이용한 문법 단축에 불과하다. 물론 이 부분도 재정의할 수 있다.

루비의 표현력을 풍부하게 해주는 블럭

루비와 믹스인

다른 객체지향 언어와 달리 루비는 의도적으로 단일 상속만을 제공한다. 대신 루비에는 모듈 개념(Object-C에서는 카테고리라 불리는)이 있다. 모듈은 메서드의 컬렉션이다.
클래스에 모듈을 믹스인할 수 있는데, 그렇게 하면 유용한 메서드를 손쉽게 얻을 수 있다. 예를 들어 each 메서드를 구현하고 있는 클래스는 어떤 것이든 Enumerable 모듈을 믹스인하기만 하면, each를 루프에 이용해 많은 함수들이 추가된다.
대부분 루비스트들은 위와 같은 기능이 복잡하기만하고 제한적인 다중 상속보다 훨씬 간결한 방법이라고 보고 있다.

루비 코드의 외향

루비에는 변수 선언이 없다. 단지 변수의 범위를 나타내기 위해 몇가지 간단한 이름 관례를 사용하고 있다.

  • var 지역변수.
  • @var 인스턴스 변수.
  • $var 전역변수.

이런 몇가지 장치는 변수의 역할을 명확히 드러냄으로써 프로그래머가 코드를 읽기 쉽게 해준다. 그리고 모든 인스턴스 메서드에 붙인다면 정말 피곤할 self.도 대부분 생략할 수 있다.

고급 기능

  • 루비에는 자바, 파이썬처럼 예외 처리 기능이 있다. 따라서 에러 처리를 간편하게 할 수 있다.
  • 루비는 모든 객체를 대상으로 마크-스윕 가바지 컬렉터를 제공한다. 확장 라이브러리에서 참조 카운트를 관리할 필요는 없다. 마츠는 “건강을 위한” 기능이라고 표현했다.
  • C 에서 루비를 사용하기 위한 간결한 API를 제공하기때문에, 펄이나 파이썬보다 쉽게 C 확장기능을 만들 수 있다. 여기에는 스크립팅을 위해 루비를 임베딩하는 것도 포함된다. 물론, SWIG 인터페이스도 제공된다.
  • OS가 지원한다면 확장 기능을 동적으로 로드할 수 있다.
  • 루비는 운영체제에 의존하지 않는 스레딩 기능을 제공한다. 그리고 이는 루비가 동작하는 모든 플랫폼에 적용된다. 따라서 스레드를 지원하지 않는 MS-DOS에서도 다중 스레드 프로그램을 작성할 수 있다.
  • 루비는 이식성이 매우 높다. 대부분 GNU 리눅스에서 개발되었지만 대부분의 유닉스. 맥 OS X, 윈도우 95/98/Me/NT/2000/XP, 도스, BeOS, OS/2 등에서 동작한다.