루비 클래스 샘플 코드
<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}세 입니다."
댓글 없음:
댓글 쓰기