Class
- 생성자 : initialize() 함수가 생성자로 만들어진다.
- 모든 Class들은 열려져있는 상태를 유지하게 된다. 이미 정의된 CLass에서라도 언제든 원하는 메서드를 추가하는 것이 가능하다.
- 같은 method를 다시 선언해서 치환하는 것이 가능하다.
- super
- 부모 Class에서의 선언되어있는 모든 것들을 의미한다.
- Kasaoke < Song 의 경우에, to_s의 부모 선언부를 알아보기 위해서는 다음과 같이 사용하면 된다.
- 각 객체의 super class 를 순차적으로 찾아가면서 찾게 된다.
class KaraokeSong < Song def to_s super + " [#@lyrics]" end end
Instance와 Property
C#에서의 property와 같은 접근법을 제공한다.(C# 3.0에서는 오히려 Ruby와 동일한 Class의 생성법들을 제공하고 있다.)
class Song attr_reader :name, :artisit, :duration attr_writer :name, :artist, :duration end
위와 같은 코드에서는 자동적으로 @name, @artist, @duration과 Song.name, Song.artist, Song.duration의 읽고 쓰기가 가능한 Property가 생성이 된다.
Method와 속성과의 차이
: C#에서도 같은 이야기가 나온적이 있었고, 무언지 좋은지 나쁜지에 대한 토론이 자주 있었던것 같다. 그렇지만, 이에 대해서 확실한 것은 code의 가독성이라는 것에 대한 차이는 상당히 크다고 생각이 된다. 여러가지 코드를 볼때 언제나 값을 넣을 때, set, get의 Method만을 호출하는 것과, 자신의 Class의 값에 대해서는 Property를 이용해서 값을 넣고, 무언가 다른 class나 다른 resource에 값을 설정하고 저장할 때, 그에 대한 내용으로 set, get을 이용하는 것이 좀더 나은 방법으로 생각된다.
Class Variable & Class Method
: 생성된 모든 Class에서는 모두 instance를 가지게 된다. Ruby에서 제공되는 Class Variable과 Class Method는 일반적으로 제공되는 Static Method와 Static Variable과 동일하게 생각하면 된다.
Class Method
: 선언부로 instance메서드와 구분된다.
class Example def instance_method end def Example.class_method end end