|
|||
|
|
1. 클래스 생성, 인스턴스변수 셋팅하기클래스 만들기 class Song
def initialize(name, artist, duration)
@name = name
@artist = artist
@duration = duration
end
end
song = Song.new("Foo", "Fleck", 300)
puts song.inspect
- 실행결과 ----- #<Song:0x2bb67a8 @duration=300, @artist="Fleck", @name="Foo"> 새로운 Song 객체를 만들기 위해 song = Song.new("Foo", "Fleck", 300)를 호출하면 initialize메서드를 호출한다. 객체 상태를 초기화하는데 initialize 메소드가 적절하다. Song.new(...)을 호출하면 Song클래스의 initialize(...) 메소드에 인자가 매핑되어 호출됨을 알 수 있다. 인스턴스변수는 @변수명 형식으로 변수명 앞에 @만 붙여주면 된다. inspect메소드는 객체의 ID와 인스턴스 변수를 출력한다. 2. to_s 메소드 재정의 하기재정의 전 실행puts song.to_s - 실행결과 ----- #<Song:0x2e3a538> 재정의 후 실행 메소드 재정의 하기 class Song
def to_s
"Song: #@name -- #@artist (#@duration)"
end
end
puts song.to_s
- 실행결과 ----- Song: Foo -- Fleck (300) "Song: #@name -- #@artist (#@duration)" 에서 처럼 문자열 안에서 #@인스턴스변수명 을 써주면 인스턴스변수의 값을 가져온다. 3. 클래스 상속하기Song 클래스를 상속 class KaraokeSong < Song
def initialize(name, artist, duration, lyrics)
super(name, artist, duration)
@lyrics = lyrics
end
def to_s
super + "[#@lyrics]"
end
end
karaokeSong = KaraokeSong.new("Foo", "Fleck", 300, "가사가 들어갑니다.")
puts karaokeSong.to_s
- 실행결과 -----Song: Foo -- Fleck (300)[가사가 들어갑니다.] - 상속은 클래스 선언부에 하위(구현)클래스 < 상위클래스명 형식으로 < 표시로 상속을 표현한다.면 된다. - initialize 메소드 안의 super(name, artist, duration) 는 상위 클래스 Song객체의 initialize 메소드를 호출한다. - to_s 메소드의 super는 상위 클래스인 Song 클래스의 to_s 메소드의 결과값을 가져온다. ※ 위 내용은 데이브토머스 차드파울러 앤디헌트 지음, 강문식, 박지인, 양석호 옮김 『Programming Ruby』 책의 내용을 바탕으로 정리한 것입니다. |
||
최근 댓글