본문 바로가기
Back-end

Ruby 언어의 기본

by 탄이. 2019. 1. 11.

Ruby

  • 루비는 인터프리터 형식으로 실행되는 고기능 스크립트 언어이자 뛰어난 객체 지향적 언어이다.

모든 것은 객체

  • 마츠모토 유키히로가 개발한 동적 객체 지향 스크립트 프로그래밍 언어이다. 루비는 순수 객체 지향 언어라, 정수나 문자열 등을 포함한 데이터 형식 등 모든 것이 객체이다.

  • 루비에서는 모든 것이 객체입니다. 따라서 루비에서 모든 것은 자신만의 속성과 액션을 갖습니다. 객체지향 프로그래밍에서 이런 속성을 인스턴스 변수라고 하고, 액션을 메서드라고 합니다.

  • 루비는 모든 형태의 것에 메서드와 인스턴스 변수를 부여합니다. 이는 모든 곳에서 일관되게 적용되므로 루비 사용법을 쉽게 해줍니다.

루비의 유연함

  • 개발자가 루비의 어떤 부분이든 자유롭게 바꿀 수 있기 때문에 매우 유연한 언어라고 할 수 있습니다.

  • 원한다면 루비 코어 부분도 제거하고 재정의할 수 있습니다.

  • 이미 존재하는 코드에 무엇인가를 덧붙일 수도 있습니다.

  • 루비는 기본적으로 개발자의 사고를 제한하지 않습니다.

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

  • 개발자는 어떤 메서드에든 클로저를 추가함으로써 메서드의 동작을 기술할 수 있습니다.

루비와 믹스인

  • 다른 객체지향 언어와 달리 루비는 의도적으로 단일 상속만을 제공한다.

  • 대신 루비에는 모듈 개념(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과의 비교

  • 파이썬이 정형화된 들여쓰기를 요구하는 반면 루비는 정형화 된 서식을 요구하지는 않는다.

  • 세계적으로 파이썬이 인기가 더 많다.


댓글