조회 수 2317 추천 수 2 댓글 5
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄 수정 삭제
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄 수정 삭제
입문 마지막 시간입니다. 
마지막시간이니 만큼 클래스를 가지고 놀아봅시다.

1. 클래스 정의

지금까지 string 클래스나 array 클래스 같은 rgss에서 제공하는 클래스와 메서드를 사용해왔었는데요.
이런 클래스들을 만들고 정의하는 방법에 대해서 배워봅시다.

class abs
end

클래스를 만드는 방법입니다. 클래스의 생성 또한 ~ end 로 끝내야 합니다.
내용이 nil인 클래스를 만들었습니다만. class 클래스의 new 메서드로 인스턴스를 정의할수있습니다.

aaa = abs . new

abs 클래스안에 aaa 라는 인스턴스를 만들수있습니다.
슈퍼클래스와 서브클래스의 관계를 만들어주는 계승은 다음과 같이 정의합니다.

class abs < aaa
end

이렇게 하면 aaa 클래스와 서브클래스인 abs가 만들어집니다.


2. 메서드 정의

메서드의 정의방법은 다음과 같습니다. 

class abs
 def hello
   print "안녕하세요"
  end
end

이렇게 abs 클래스의 hello 메서드를 만들었는데, 출력하는 방법은 다음과 같습니다.

aaa = abs . new
aaa . hello

이건 인수를 넣는것과 비슷한 개념입니다. aaa에 . 메서드를 붙이는것으로 실행되도록 abs 클래스의 인스턴스를 대입하고있지요.


3. 인스턴스 변수

하나의 오브젝트인 변수를 인스턴스 변수라고 부릅니다. @다음 변수명을 적는것으로 정의 할수있는데, 글로벌변수와 비슷한것이라고 생각하시면 됩니다. 인스턴스변수의 정의는 다음과 같습니다.

class abs                  # 클래스 abs의 정의

 def name                  # 메서드 name 의 정의
  return @name                 # name 의 반환값을 @name 으로
 end                           # 정의 끝

 def name= (name)             # 메서드 name= 의 정의 가인수 name
  @name = name               # 인스턴스변수 @name 을 가인수 name에 대입
 end                             # 정의끝

 def hello                                                 # 메서드 hello의 정의
  p "나는 " + @name + "다."                
 end                                                        # 정의끝

end                                  # 클래스 정의끝

aaa = abs . new                                # aaa 인스턴스의 정의

aaa . name = "아방스"                         # 인스턴스변수 @name 에 "아방스"를 대입

aaa . hello                                     # "나는 아방스다." 출력

(실행하면 에러가 나는군요.. 원인을 알아봤는데 abs라는 이름에 문제가 많은것같은데 왜인지 모르겠습니다만, 테스트하실때는 다른이름으로 하시길 바랍니다.)
이 식에서는 @name 인스턴스변수를 만들어 name, name= 이라는 메서드로 오브젝트 밖에서 꺼내 쓸수있도록 하고있습니다. 이런 메서드를 accessor 라고 부르는데, 이런 엑세서는 매우 간단하게 쓸수있습니다.

attr_accessor :name

엑세서는 우변에 쓴 이름과 같은이름의 인스턴스변수에 대해 대입과 읽기등이 가능한 메서드를 자동으로 정의합니다.
이렇게 쓰는것으로 아래식을 대체 할수있습니다.

  def name
    return @name
  end

  def name=(name)
    @name = name
  end

xp의 스크립트에서는 이 엑세서가 많이 쓰이고있습니다.


4. 오브젝트 초기화

오브젝트가 작성될때 인스턴스변수같은것들을 특정값으로 초기화 하고싶을때 initialize 라는 메서드를 써두면 new로 불려왔을때 지정한 값으로 초기화가 됩니다.

class abs
 def initialize
  @name = "이름없음"
 end
end

식을 보면 @name 인스턴스변수의 초기값으로 "이름없음"이 대입되어있습니다. 이걸로 abs 오브젝트가 만들어졌을때 "이름없음"으로 초기화 할수있습니다.

initialize 메서드에 가인수를 지정하면 new가 그 인수를 받습니다.

class abs
 def initialize (name)
  @name = name
 end
end

aaa = abs.new ("아방스")

initialize 메서드에 name 이라는 가인수가 설정되어있어서 인스턴수변수 @name 의 초기값으로 대입하도록 되어있습니다. 
그리고 인수 name 은 abs 클래스의 new에게 건내줍니다. 그리고 마지막행에 "아방스" 라는 인수가 설정되어있기 때문에 @name의 값또한 
"아방스"가 됩니다.


5. 오버라이드

슈퍼클래스에 정의되어있는 메서드를 서브클래스에 재정의 하는것을 override 라고 합니다. 
서브클래스의 메서드부터 동명의 슈퍼클래스의 메서드를 호출하는 경우는 super 라는 메서드를 사용합니다.

class Hahaha
  def laugh(x)                            # laugh 에 가인수 x 설정
    return "하" * x                             # Hahaha 의 반환값을 "하" * x
  end
end

class Wahaha < Hahaha            # Hahaha의 서브클래스인 wahaha를 생성
  def laugh(x)                          # 동명의 laugh 메서드 생성
    return "와" + super                  # super 에 의해 Hahaha의 laugh를 불러와 "와" + "하" * x 
  end
end

man = Wahaha.new
p man.laugh(4)                    # x 를 4로 두면 "와하하하하" 출력
?

List of Articles
번호 분류 제목 글쓴이 날짜 조회 수 추천 수
공지 초급강의실 게임제작강좌 A-Z 색인 (2016.1.24 ver) 2 file 천무 2016.01.12 7372 1
» 고급강의실 RGSS 스크립트 강좌 입문 13 - 클래스(Class) 5 마니아 2013.09.16 2317 2
31 고급강의실 RGSS 스크립트 강좌 입문 12 - 연상 배열(Associative Array) 4 마니아 2013.09.16 1600 1
30 고급강의실 RGSS 스크립트 강좌 입문 11 - 배열(Array) 6 마니아 2013.09.16 1701 1
29 고급강의실 RGSS 스크립트 강좌 입문 10 - 그래픽 표시 4 마니아 2013.09.16 2183 0
28 고급강의실 RGSS 스크립트 강좌 입문 9 - 오브젝트(Object) 4 마니아 2013.09.16 1642 0
27 고급강의실 RGSS 스크립트 강좌 입문 7 ~ 8 - 함수(Function) 3 마니아 2013.09.16 1924 0
26 고급강의실 RGSS 스크립트 강좌 입문 6 - 루프(Loop) 2 마니아 2013.09.16 1586 0
25 고급강의실 RGSS 스크립트 강좌 입문 5 - 조건분기 4 마니아 2013.09.16 2131 0
24 고급강의실 RGSS 스크립트 강좌 입문 4 - 캐릭터 라인 4 마니아 2013.09.16 2274 1
23 고급강의실 RGSS 스크립트 강좌 입문 3 - 메서드(Method) 4 마니아 2013.09.16 1876 0
22 고급강의실 RGSS 스크립트 강좌 입문 2 - 수 3 마니아 2013.09.16 2256 0
21 고급강의실 RGSS 스크립트 강좌 입문 1 - 기초 개념 8 마니아 2013.09.16 4348 0
20 고급강의실 뮤's 실전 스크립팅 강좌 [5. 실전! 반복문을 응용하자!] 2 마니아 2013.09.16 1411 0
19 고급강의실 뮤's 실전 스크립팅 강좌 [4. 실전! 플래싱 메시지를 만들어보자] 3 마니아 2013.09.16 2081 0
18 고급강의실 뮤's 실전 스크립팅 강좌 [3. 기초 문법 다지기 (하)] 6 마니아 2013.09.16 1145 0
17 고급강의실 뮤's 실전 스크립팅 강좌 [2. 기초 문법 다지기 (중)] 3 마니아 2013.09.16 1371 0
16 고급강의실 뮤's 실전 스크립팅 강좌 [1. 기초 문법 다지기 (상)] 6 마니아 2013.09.16 2351 0
15 고급강의실 RGSS2 강좌 1 비형랑 2012.10.01 2528 0
14 중급강의실 [RPGVX ACE] 소재규격과 강의수록 1 2 비형랑 2012.10.01 3273 0
13 초급강의실 [RPG VX ACE] 초심자강의 1 1 비형랑 2012.10.01 3168 2
Board Pagination Prev 1 ... 4 5 6 7 8 9 10 Next
/ 10






[개인정보취급방침] | [이용약관] | [제휴문의] | [후원창구] | [인디사이드연혁]

Copyright © 1999 - 2016 INdiSide.com/(주)씨엘쓰리디 All Rights Reserved.
인디사이드 운영자 : 천무(이지선) | kernys(김원배) | 사신지(김병국)