티스토리 뷰

프로그래밍언어,DB

Ruby 언어에 대하여

이재원님 2021. 2. 12. 13:24

Ruby is.. (루비란)

단순성과 생산성에 중점을 둔 동적 프로그래밍 언어로 오픈소스 기반입니다. 루비는 읽고 쓰기 쉬운 우아한 구문을 가지고 있습니다.

 

 

Seeing Everything as an Object (모든 것은 객체)

루비에서는 모든 것이 객체입니다. 루비의 순수 객체지향 접근법은 아래의 예제처럼 숫자에 액션을 취하는 코드로 대표되곤 합니다.

5.times { print "We *love* Ruby -- it's outrageous!" }

많은 언어에서 숫자는 원시 타입이지 객체는 아닙니다. 하지만 루비는 모든 것이 일관되게 객체이므로 쉽게 사용할 수 있습니다.

 

 

Ruby’s Flexibility (루비의 유연함)

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

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

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

y = 5.plus 6
# y is now equal to 11

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

 

 

Blocks: a Truly Expressive Feature (루비의 표현력을 풍부하게 해주는 블록)

개발자는 어떤 메서드에든 클로저를 추가함으로써 메서드의 동작을 기술할 수 있습니다. 루비에서 이 클로저를 블록이라고 부릅니다. 이는 PHP, 비주얼베이직 등 다른 명령형 언어에서 루비로 이주한 개발자에게 가장 매력적인 기능으로 꼽힙니다.

search_engines =
  %w[Google Yahoo MSN].map do |engine|
    "http://www." + engine.downcase + ".com"
  end

위 예제에서 블록은 do ... end 문법 구조에 기술되었습니다. map 메서드는 주어진 단어 목록에 블록을 적용합니다. 이처럼 루비의 다른 메서드도 그 동작 중 일부를 자신의 블록으로 채워넣을 수 있도록 개발자에게 열린 구조를 제공하고 있습니다.

 

 

Ruby and the Mixin (루비와 믹스인)

다른 객체지향 언어와 달리 루비는 의도적으로 단일 상속만을 제공합니다. 대신 루비에는 모듈 개념(Objective-C에서는 카테고리라 불리는)이 있습니다. 모듈은 메서드의 컬렉션입니다.

클래스에 모듈을 믹스인할 수 있는데, 그렇게 하면 유용한 메서드를 손쉽게 얻을 수 있습니다. 예를 들어 each 메서드를 구현하고 있는 클래스는 어떤 것이든 Enumerable 모듈을 믹스인하기만 하면, each 를 루프에 이용해 많은 함수들이 추가됩니다.

class MyArray
  include Enumerable
end

대부분 루비스트들은 위와 같은 기능이 복잡하기만 하고 제한적인 다중 상속보다 훨씬 간결한 방법이라고 생각합니다.

 

 

Ruby’s Visual Appearance (루비 코드의 외향)

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

 

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

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

 


요약

  • 루비는 동적 언어이다
  • 루비는 단순함과 생산성에 중점을 둔 언어이다
  • 루비는 모든것이 객체다 (기본형이 없다, 연산자도 객체의 메소드다)
  • 루비는 모든 메소드에서 클로저(블록)를 자유롭게 사용할 수 있다
  • 루비는 간결함을 위해 단일 상속만 제공하며 모듈 믹스인을 사용한다
  • 루비는 변수의 범위(scope)를 나타내기 위한 간단한 이름 관례를 사용한다

 

 

참고 - ruby 공식사이트

'프로그래밍언어,DB' 카테고리의 다른 글

[Mysql] DB 모든 테이블 truncate 하기  (0) 2019.06.23
댓글