본문 바로가기
CS/Languages

[Ruby] Ruby에 대해서

by seoyamin 2025. 2. 1.

* 해당 게시글은 Ruby 공식 문서를 바탕으로 학습한 후 개인적으로 정리한 내용을 담고 있습니다.

https://www.ruby-lang.org/ko/about/#fn2

 

Ruby에 대해서

Ruby가 왜 인기 있을까요? Ruby의 팬들은 아름답고 기교가 뛰어난 언어이기 때문이라고 말합니다. 하지만 이 말로는 부족하지요. 어떤 점이 Ruby를 이처럼 매력적인 언어로 만드는 것일까요? Ruby를

www.ruby-lang.org

 

 

Ruby에 대해서

공식 문서에 따르면 Ruby의 팬들은 아름답고 기교가 뛰어난 언어이기 때문에 Ruby가 인기있다고 말한다고 한다.

 

자고로 프로그래밍 언어의 공식 문서들은 매우 딱딱하고 노잼인 것이 국룰인데, 자칭 프로그래머의 단짝 친구 Ruby의 공식 문서는 아주 사심이 가득해보인다ㅋㅋ 그렇다면 아름답고 기교가 뛰어난 그 이유가 무엇인지 나도 알아야겠다.

프로그래머의 단짝 친구 !

 

 

Ruby는 '객체 지향 프로그래밍'에 특화된 언어라고 한다. 어떤 특성이 Ruby의 객체 지향에 힘을 실어주었을까?

 

 

1. 자유로운 인스턴스 변수, 메서드의 적용

Ruby는 모든 것을 객체로 표현 가능하며, 각각의 속성(=인스턴스 변수)과 액션(=메서드)를 가질 수 있다.

아래의 예시에서 숫자 5는 마치 하나의 객체처럼 동작한다. 이는 숫자를 원시 타입 취급하는 많은 언어들과 Ruby의 차이점이다.

 

5.times { print "우리는 Ruby를 *사랑*해요! 너무 멋져요!" } # 여기서도 사심을..

 

2. 유연함

Ruby는 개발자가 원하는 부분을 언제든  새롭게 정의하고 바꿀 수 있다. Ruby의 코어 부분도 예외는 아니다.

아래 예시는 Ruby 빌트인 클래스 Numeric에 plus 메서드를 추가하는 사례이다.

 

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

y = 5.plus 6       # y = 11

 

3. 블록 기능

Ruby는 메서드 동작을 기술할 수 있는 do......end 구조의 클로저(=블록) 기능을 지원한다.

어떤 메서드든 중간에 이 블록을 끼워넣을 수 있다.

 

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

 

4. 믹스인

Ruby는 다른 객체 지향 언어들과 다르게 의도적으로 단일 상속만을 지원한다.

대신 메서드의 컬렉션인 '모듈'이라는 개념이 있는데, 클래스에 모듈을 믹스인하여 필요한 메서드를 쉽게 가져다 쓸 수 있다.

 

class MyArray
  include Enumerable
end

 

 

5. 코드의 외향

Ruby에는 별도의 변수 선언이 없으며, 변수의 범위를 나타내기 위해 아래와 같은 네이밍 관례를 사용중이다.

 

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

 

6. 고급 기능

이 외에도 개발자의 편의를 위한 다양한 기능을 제공한다고 한다.

 

  • Java, Python과 같은 예외 처리 가능
  • 모든 객체를 대상으로 Mark-Sweep Garbage Collector 제공
  • C에서 Ruby 임베딩을 위한 간결한 API 제공중
  • OS가 지원한다면 확장 기능을 동적 로드 가능
  • OS에 의존하지 않는 스레딩 기능 제공 (스레드 미지원 MS-DOS에서도 다중 스레드 프로그램 작성 가능)
  • 높은 이식성 (Linux, UNIX, macOS, Windows, DOS, BeOS, OS/2 등)

 

'CS > Languages' 카테고리의 다른 글

[Ruby] Ruby 20분 가이드  (0) 2025.02.01
[Node.js] node.js 관련 개념  (0) 2022.06.29
[React Native] 개발 환경 설정하기  (0) 2022.06.22
[Vue.js] 기초 #3  (0) 2021.09.07
[Vue.js] 기초 #2  (0) 2021.09.03