Rails Insights

루비에서 메서드 가시성 이해하기

루비는 객체 지향 프로그래밍 언어로, 메서드의 가시성은 객체의 속성과 행동을 정의하는 데 중요한 역할을 합니다. 메서드 가시성은 메서드가 어디에서 호출될 수 있는지를 결정하며, 이는 코드의 구조와 유지보수성에 큰 영향을 미칩니다. 이 글에서는 루비에서 메서드 가시성을 이해하고, 각 가시성의 특징과 사용 사례를 살펴보겠습니다.

메서드 가시성의 종류

루비에서 메서드 가시성은 주로 세 가지로 나뉩니다:

  • 공개 메서드 (Public Methods)
  • 비공개 메서드 (Private Methods)
  • 프로텍티드 메서드 (Protected Methods)

1. 공개 메서드 (Public Methods)

공개 메서드는 클래스의 인스턴스에서 호출할 수 있는 메서드입니다. 기본적으로 루비에서 정의된 모든 메서드는 공개 메서드로 간주됩니다. 공개 메서드는 외부에서 접근할 수 있으므로, 객체의 인터페이스를 정의하는 데 사용됩니다.

class Dog
  def bark
    "Woof!"
  end
end

dog = Dog.new
puts dog.bark  # "Woof!" 출력

위의 예제에서 bark 메서드는 공개 메서드로, Dog 클래스의 인스턴스에서 호출할 수 있습니다.

2. 비공개 메서드 (Private Methods)

비공개 메서드는 같은 클래스 내에서만 호출할 수 있는 메서드입니다. 외부에서 직접 호출할 수 없으며, 주로 내부 로직을 캡슐화하는 데 사용됩니다. 비공개 메서드는 클래스의 인스턴스에서 호출할 수 있지만, 다른 인스턴스에서는 호출할 수 없습니다.

class Dog
  def bark
    "Woof!"
  end

  private

  def wag_tail
    "Wagging tail!"
  end

  def make_sound
    bark
  end
end

dog = Dog.new
puts dog.bark        # "Woof!" 출력
# puts dog.wag_tail  # 오류 발생: private method `wag_tail' called
puts dog.make_sound  # "Woof!" 출력

위의 예제에서 wag_tail 메서드는 비공개 메서드로, 외부에서 호출할 수 없습니다. 그러나 make_sound 메서드 내에서는 호출할 수 있습니다.

3. 프로텍티드 메서드 (Protected Methods)

프로텍티드 메서드는 같은 클래스 또는 서브클래스에서 호출할 수 있는 메서드입니다. 이는 상속 관계에서 메서드를 공유할 수 있도록 하며, 주로 상속을 통해 기능을 확장할 때 유용합니다.

class Animal
  protected

  def sound
    "Some sound"
  end
end

class Dog < Animal
  def bark
    sound
  end
end

dog = Dog.new
puts dog.bark  # "Some sound" 출력
# puts dog.sound  # 오류 발생: protected method `sound' called

위의 예제에서 sound 메서드는 프로텍티드 메서드로, Animal 클래스의 서브클래스인 Dog 클래스에서 호출할 수 있습니다. 그러나 외부에서는 직접 호출할 수 없습니다.

메서드 가시성의 중요성

메서드 가시성은 코드의 구조와 유지보수성에 큰 영향을 미칩니다. 다음은 메서드 가시성이 중요한 이유입니다:

  • 캡슐화: 비공개 및 프로텍티드 메서드를 사용하여 내부 구현을 숨기고, 객체의 상태를 보호할 수 있습니다.
  • 인터페이스 정의: 공개 메서드를 통해 객체의 인터페이스를 정의하고, 외부에서 어떻게 상호작용할 수 있는지를 명확히 할 수 있습니다.
  • 상속과 재사용: 프로텍티드 메서드를 사용하여 상속 관계에서 메서드를 공유하고, 코드의 재사용성을 높일 수 있습니다.

메서드 가시성 설정하기

루비에서 메서드의 가시성을 설정하는 방법은 간단합니다. public, private, protected 키워드를 사용하여 메서드의 가시성을 정의할 수 있습니다. 다음은 메서드 가시성을 설정하는 예제입니다:

class Example
  def public_method
    "I am public"
  end

  private

  def private_method
    "I am private"
  end

  protected

  def protected_method
    "I am protected"
  end
end

위의 예제에서 public_method는 공개 메서드, private_method는 비공개 메서드, protected_method는 프로텍티드 메서드로 설정되어 있습니다.

메서드 가시성의 예외

루비에서는 메서드 가시성에 대한 몇 가지 예외가 있습니다. 예를 들어, 비공개 메서드는 같은 클래스의 인스턴스에서 호출할 수 있지만, 다른 인스턴스에서는 호출할 수 없습니다. 또한, 프로텍티드 메서드는 서브클래스에서 호출할 수 있지만, 외부에서는 호출할 수 없습니다.

class Parent
  private

  def private_method
    "I am private"
  end
end

class Child < Parent
  def call_private_method
    private_method  # 호출 가능
  end
end

parent = Parent.new
child = Child.new
puts child.call_private_method  # "I am private" 출력
# puts parent.private_method     # 오류 발생: private method `private_method' called

위의 예제에서 private_methodParent 클래스의 비공개 메서드입니다. Child 클래스에서는 이 메서드를 호출할 수 있지만, 외부에서는 호출할 수 없습니다.

결론

루비에서 메서드 가시성은 객체 지향 프로그래밍의 중요한 개념입니다. 공개, 비공개, 프로텍티드 메서드를 적절히 사용하여 코드의 구조를 명확히 하고, 유지보수성을 높일 수 있습니다. 메서드 가시성을 이해하고 활용하는 것은 루비 프로그래머로서의 중요한 스킬 중 하나입니다. 이 글이 루비의 메서드 가시성을 이해하는 데 도움이 되었기를 바랍니다!

Published: August 12, 2024

© 2024 RailsInsights. All rights reserved.