2011년 6월 2일 목요일

Classes, Objects and Variables

Classes, Objects and Variables

주크박스를 만들어보기로 한다. 제일 먼저 제목, 음악가, 연주시간의 속성을 가지는 노래 객체를 만들어본다.

class Song
 def initialize(name, artist, duration)
   @name     = name
   @artist   = artist
   @duration = duration
 end
end

initialize 메소드는 새로운 Song객체를 만들기 위해 Song.new를 호출하면, 루비는 초기화되지 않은 객체를 위한 메모리 공간을 할당하고 new의 매개변수를 이용해 그 객체의 initialize 메서드를 호출한다. initialize 메서드 내부에는 name, artist, duration 3개의 지역변수가 사용되고 객체의 모든 메서드에서 접근할수 있는 Instance변수 @name, @artist, @duration도 선언한다.

aSong = Song.new("Bicylops", "Fleck", 260)  
puts aSong.inspect
puts aSong.to_s

>> #<Song:0x2bd51bc @duration=260, @artist="Fleck", @name="Bicylops">
>> #<Song:0x2bd51bc>

inspect 메시지는 어떻한 객체에도 보낼 수 있는데, 이메시지는 객체의 ID와 인스턴스 변수를 리턴한다.
또한, to_s는 단지 객체의 ID를 보여준다. Song 클래스의 to_s 메서드를 재정의해보기로 한다.

class Song
 def initialize(name, artist, duration)
@name = name
@artist   = artist
@duration = duration
 end
 
 def to_s  
"Song: #{@name}--#{@artist} (#{@duration})"  
 end
end

aSong = Song.new("Bicylops", "Fleck", 260)  
puts aSong.to_s

>> Song: Bicylops--Fleck (260)

루비에서는 클래스가 닫혀져 있지 않다. 이미 정의된 클래스라도 언제든 원하는 메서드를 추가할 수 있다. 이것은 표준 라이브러리이건 내장 클래스이건, 아니면 직접 만든 클래스건 간에 가능하다.

댓글 없음:

댓글 쓰기

ETL 솔루션 환경

ETL 솔루션 환경 하둡은 대용량 데이터를 값싸고 빠르게 분석할 수 있는 길을 만들어줬다. 통계분석 엔진인 “R”역시 하둡 못지 않게 관심을 받고 있다. 빅데이터 역시 데이터라는 점을 볼때 분산처리와 분석 그 이전에 데이터 품질 등 데이...