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)

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

댓글 없음:

댓글 쓰기

블록체인 개요 및 오픈소스 동향

블록체인(block chain) 블록체인은 공공 거래장부이며 가상 화폐로 거래할때 발생할때 발생할 수 있는 해킹을 막는 기술. 분산 데이터베이스의 한 형태로, 지속적으로 성장하는 데이터 기록 리스트로서 분산 노드의 운영자에 의한 임의 조작이 불가...