Ruby.new

이 책을 Top-down방식으로 구성하기 위해서 class와 object가 먼저 나오고 그 다음에 세부적인 문법들을 다루려고했지만 string이나 if문 연산자와 같이 기본적인 것을 모르면 class의 예를 들기가 어렵기 때문에 전체적으로는Top-down 방식으로 기술하지만 거기에 사용된 예를 이해하기 위한 세부적인 것 까지 추가하여 다르게 됩니다.

그럼 이제 부터 Ruby를 시작하기에 앞서 Ruby의 중요한 특징과 Ruby에서 사용되는 특별한 단어들에 대한 짧은 tutorial을 보겠습니다.


Ruby Is an Object-Oriented Language

Ruby는 진짜 객체지향 언어 입니다. 당신이 만들어 내는 모든 것이 객체 이고 그것들의 연산의 결과 역시 객체입니다. 하지만, 많은다른 언어들도 똑같이 객체 지향이라고 주장하며, 종종 객체 지향에 대한 다른 해석과 그들만이 사용하는 개념에 대한 다른 용어들을가지고 말을 합니다.

따라서 보다 세부적인 내용을 살표보기 전에, 먼저 우리가 사용할 용어들을 간략히 살펴봅시다.

Class는 state와 state를 사용하는 method들의 combination입니다.
(아래는 원문입니다.)

A class is a combination of state (forexample, the name of the song)and methods that use that state (perhapsa method to play the song).

Object는 class instance와 같은 말입니다.
(아래는 원문입니다.)

The word objectis usedinterchangeably with class instance (and being lazy typists,we'llprobably be using the word ``object'' more frequently).

Ruby는 이런 객체들은 생성자를 호출해서 만들 수 있습니다. 생성자는 class와 관련된 특별한 메소드 입니다. 기본 생성자는 new 를 통해서 불려집니다.

[CODE]song1 = Song.new("Ruby Tuesday")
song2 = Song.new("Enveloped in Python")
# and so on[/CODE]

이런 객체들은 같은 class로 부터 생성되었지만 그들은 각각 유일한 특성들을 가지고 있습니다.
먼저, 모든 객체들은 유일(무이)한 object identifier(짧게 object id라고도 합니다)를 가지고 있습니다.둘째,  당신은 instance variables을 정의할 수 있습니다. instance variable이란 각각의 객체에유일한 값을 가지고 있는 변수들을 말합니다. 이러한 변수들은 객체의 상태를 나타냅니다.

각각의 class들은 또한instance method들을 정의할 수 있습니다. 각각의 method는 자기 자신에 의해 호출되거나 class 밖에서호출되는 기능의 덩어리 입니다. 이러한 instance method들은 객체의 instance 변수와 객체의 상태에 접근할 수있고 습니다.

Method들은 객체에 메시지를 보내어 호출 됩니다(are invoked). message는method의 이름과 method가 필요로 하는 parameter들이 딸려 있습니다. 객체가 message를 받으면 해당하는method를 자신의 class에서 찾습니다. 만약에 발견하면 그 method는 수행되며 만약에 찾지 못하면...이 부분은나중에 다루겠습니다.

복잡하게 들릴지 모르겠지만 실제로는 매우 자연스럽습니다. 몇몇 method 호출을 살펴보겠습니다.(기억하세요 code 예제에 있는 화살표는 리턴되는 값을 보여줍니다.)

"gin joint".length » 9
"Rick".index("c") » 2
-1942.abs » 1942
sam.play(aSong) » "duh dum, da dum de dum ..."

Here, the thing before the period is called the receiver, andthe name after the period is the method to be invoked.  <- 무슨말인지 모르겠네요;
첫번째 것은 string의 길이를 요청했고, 두번쨰는 c가 몇번째에 있는지 알려달라고 했습니다. 세번째는 절대값을 마지막은 sam에게 노래를 불러 달라고 요청했습니다.

이쯤에서 다른 언어들과 Ruby의 차이를 말해야겠네요. Java에서는 어느 수의 절대값을 알고싶을 때 그 수를 따로 분리 되어 있는 함수를 호출하면서 인자로 넘깁니다. 아마도 다음과 같이 사용할 것입니다.
[CODE]number = Math.abs(number)     // Java code[/CODE]
Ruby에서는 절대값을 구하는 기능은 숫자들에 내장되어 있습니다. 세부사항은 숫자들이 내부적으로 알아서 관리합니다. 당신은 간단하게 abs message를 보내면 되는 것입니다.

[CODE]number = number.abs[/CODE]

이러한 것은 모든 Ruby객체에 적용됩니다: 이밖에도 C언어 에서는 strlen(name)이런 방법을 사용할 것을 Ruby에서는name.length를 사용합니다. 바로 이 부분이 우리가 Ruby가 진짜 객체 지향이라고 말하는 이유입니다.