루비 클래스 샘플 코드
<Tutorial-01-Class.rb>
# 1. class 정의하기
class Song #class 이름은 대문자로 시작하도록.
def initialize(name, artist, duration)
@name = name # class의 멤버변수는 @xxx 형태
@artist = artist
@duration = duration
@plays = 0
end
def getSong
"my name is #@name and my nick name is #@artist, i love number #@duration"
end
def getSing
'my name is #@name and my nick name is #@artist, i love number #@duration'
end
end
song = Song.new('beatles', 'john lenon', 300);
puts song.getSong # 출력: my name is beatles and my nick name is john lenon, i love number 300
puts song.getSing # 출력: my name is #@name and my nick name is #@artist, i love number #@duration
# song.play 함수는 지금 이 시점에서는 정의되어있지 않기 때문에 compile error
# 2. 클래스변수의 이해 @@XXX
class Song # Song 클래스 정의 추가
@@plays = 0 # class 변수 <- Song 클래스의 모든 객체가 동일하게 사용
# class 변수는 사용하기 전 반드시 초기화되야 함
def play
@plays += 1
@@plays += 1
"This song: #@plays plays. Total #{@@plays} plays."
end
end
puts song.play # @@plays 는 1
song2 = Song.new("meatalica", "daumdaum", 200)
puts song2.play # @@plays 는 2
# 3. 클래스 메소드의 이해
class Song
# 클래스 메소드 정의방법 1
def Song.classMethod1
puts "This is class method 1 for Song class"
end
# 클래스 메소드 정의방법 2
def self.classMethod2
puts "This is class method 2 for Song class"
end
# 클래스 메소드 정의방법 3
class <<self
def classMethod3
puts "This is class method 3 for Song class"
end
end
end
songClassMethodTest = Song.new("hello", "world", 100)
Song.classMethod3
Song.classMethod2
Song.classMethod1
# songClassMethodTest.Song.classMethod2 compile Error
# songClassMethodTest.classMethod2 compile Error
# 4. 클래스 접근제어
class Song
public :getSong # 기존 public, 변동 없음
private :getSing, :play # 기존 public 을 private 으로
end
puts song.getSong # public 접근제어라서 함수 호출 가능
# puts song.getSing 클래스 접근제어를 변경해서 이제는 함수호출 불가
puts "////////////////////////////////////////////////////////
"
# 5. getter setter
class Human
attr_reader :name, :age, :gender # 멤버변수 getter
def initialize(name, age, gender)
@name = name
@age = age
@gender = gender
end
end
human = Human.new("이승철", 50, "male")
puts "제 이름은 #{human.name} 이고 나이는 #{human.age}세 입니다."
class Human2
attr_writer :name, :age, :gender # 멤버변수 setter
# xxx= 이라는 함수를 내부적으로 생성
# 객체.xxx = yyy 로 함수 호출 가능
def name
@name
end
def age
@age
end
def gender
@gender
end
end
human2 = Human2.new
human2.name = "이승환"
human2.age = 60
human2.gender = "남"
puts "제 이름은 #{human2.name} 이고 나이는 #{human2.age}세 입니다."
class Human3
attr_accessor :name, :age, :gender # 멤버변수 getter, setter
end
human3 = Human3.new
human3.name = "김완선"
human3.age = 80
human3.gender = "여"
puts "제 이름은 #{human3.name} 이고 나이는 #{human3.age}세 입니다."
댓글 없음:
댓글 쓰기