1. 접근 제어의 종류와 특징

클래스 인터페이스를 설계할 때, 클래스를 외부에 어느 정도까지 노출할지를 고려하는 것은 중요한 일이다. 루비에는 아래 세 가지의 보호 단계가 있다.
  • public 메소드 - 누구나 호출할 수 있다. 루비에서 메소드는 기본적으로 public이다.(initialize는 예외로 항상 private이다.)
  • protected 메소드 - 그 객체를 정의한 클래스와 하위클래스에서만 호출할 수 있다.
  • private 메소드 - 오직 현재의 객체에서만 호출 할 수 있다.

루비에서는 접근 제어가 동적으로 즉 프로그램이 실행될 때 결정된다. 따라서 접근 위반 에러는 제한된 메소드를 실제로 호출한 그 순간에만 발생하게 된다.

2. 접근 제어 사용 예

기본적인 방법
class MyClass
  # 기본값은 'public'이다.
  def method1
    #...
  end
  
  # 이제부터 선언하는 메소드는 모두 'protected'가 된다.
  protected
  def method2
    #...
  end
  def method3
    #...
  end
  
  # 이제부터 선언하는 메소드는 모두 'private'가 된다.
  private
  def method4
    #...
  end
end

이미 정의된 메소드의 접근 단계 재정의
class MyClass
  def method1
    #...
  end
 
  def method2
    #...
  end
  # 중략...
  
  public :method1, :method3
  protected :method2
  private :method4
end

※ 위 내용은 데이브토머스 차드파울러 앤디헌트 지음, 강문식, 박지인, 양석호 옮김 『Programming Ruby』 책의 내용을 바탕으로 정리한 것입니다.