본문 바로가기

개발/Ruby on Rails

Ruby : 기초(6) 클래스

반응형

선언

클래스는 def 클래스명 - end로 선언합니다.
기초 1의 내용과 같이, 클래스명은 파스칼 케이스로 짓는 것이 관례입니다.

함수 스코프와는 관계 없는 인스턴스 변수

클래스 내에서 사용되는 인스턴스 변수(@var)는 선언 위치와 상관 없이 클래스 내의 어디에서든 접근할 수 있습니다.

class Apple
  def set_phone(phone_name)
    @phone = phone_name
  end
  def print_phone
    puts @phone # 접근이 안될 것 같지만 가능하다
  end
end

접근제어

기본적으로 클래스 내 모든 메소드는 public이지만 필요에 의해 바꿀 수 있습니다.

...
public
  def func1
  ...
  end
private
  def func2
  ...
  end
protected
  def func3
  ...
  end
...

혹은 이런식으로도 가능합니다.

def func1
  ...
end
def func2
  ...
end

private :func1
protected :func2

속성

클래스 내부가 외부에 노출되는 것을 속성이라고 합니다.
이 속성은 클래스가 생성된 뒤 .으로 접근할 수 있습니다.

class Apple
  def phone
    "iPhone"
  end
end

apple = Apple.new
apple.phone # iPhone

접근과 수정 메소드를 자동으로 생성해주는 attr

attr_reader로 변수를 선언하면, 클래스 외부에서 직접 읽을 수 있는 메소드를 함께 생성(Getter)해줍니다.
attr_accessor로 변수를 선언하면, 클래스 외부에서 직접 접근할 수 있는(쓰기 가능) 메소드를 함께 생성(Getter&Setter)해 줍니다.

class Company
  attr_reader :name
  attr_accessor :product
  def initialize(company_name)
    @name = company_name
  end
end

apple = Company.new("Apple")
apple.product = "iPhone"
puts apple.name, apple.product

물론 직접 접근은 캡슐화를 위반하므로 가급적 안 쓰는 게 낫겠죠.

'개발 > Ruby on Rails' 카테고리의 다른 글

Bundler MYSQL2 설치 중 에러 해결하기  (0) 2020.06.14
Mac의 zsh에서 rbenv 사용하기  (0) 2020.05.31
Ruby : 기초(5) 메소드  (0) 2020.03.14
Ruby : 기초(4) 해시와 심볼  (0) 2020.03.14
Ruby : 기초(3) 반복  (0) 2020.03.13