루비에서 class 를 선언하는 방법은 다음과 같다. snake case 로 짓는 메소드명과 달리, 클래스의 이름은 Convention 상 camel case로 짓는다.
class MyClass
...
end
클래스를 재선언하더라도 루비는 오류를 띄우지 않는다.
initialize 메소드를 사용하여 constructor 를 만들 수 있다.
class Animal
attr_accessor :noise
def initialize(options={})
@noise = options[:noise] || 'Grrr!'
end
end
클래스로부터 인스턴스를 생성하려면 ClassName.new 를 사용한다.
> p1 = Person.new
class 속성의 reader (getter) 와 writer (setter) 를 만드는 방법.
class Animal
def noise
@noise
end
def noise=(value)
@noise = value
end
end
class Animal
attr_reader :noise
attr_writer :noise
end
attr_accessor 를 사용하면 한 attr_reader, attr_writer 를 한 줄로 줄일 수 있다.
class Animal
attr_accessor :noise
end
접근자의 종류
class MyClass
def method_1 ...
protected
def method_2 ...
private
def method_3 ...
end
모든 인스턴스가 공유하는 클래스 메소드를 만드려면 메소드 이름 앞에 self 를 붙여준다. class method 팩토리 패턴 예시도 참고.
class MyClass
def self.method_name
end
def self.factory_pattern_example
MyClass.new()
end
end
class Animal
@@species = ['cat', 'dog']
def self.species
@@species
end
def self.species=(array)
return unless arra.is_a?(Array)
@@species = array
end
end
레일즈에는 cattr_accessor 가 정의되어 있어 쉽게 클래스 변수를 만들 수 있다.