루비는 객체 지향 프로그래밍 언어로, 메서드의 가시성은 객체의 속성과 행동을 정의하는 데 중요한 역할을 합니다. 메서드 가시성은 메서드가 어디에서 호출될 수 있는지를 결정하며, 이는 코드의 구조와 유지보수성에 큰 영향을 미칩니다. 이 글에서는 루비에서 메서드 가시성을 이해하고, 각 가시성의 특징과 사용 사례를 살펴보겠습니다.
루비에서 메서드 가시성은 주로 세 가지로 나뉩니다:
공개 메서드는 클래스의 인스턴스에서 호출할 수 있는 메서드입니다. 기본적으로 루비에서 정의된 모든 메서드는 공개 메서드로 간주됩니다. 공개 메서드는 외부에서 접근할 수 있으므로, 객체의 인터페이스를 정의하는 데 사용됩니다.
class Dog def bark "Woof!" end end dog = Dog.new puts dog.bark # "Woof!" 출력
위의 예제에서 bark
메서드는 공개 메서드로, Dog
클래스의 인스턴스에서 호출할 수 있습니다.
비공개 메서드는 같은 클래스 내에서만 호출할 수 있는 메서드입니다. 외부에서 직접 호출할 수 없으며, 주로 내부 로직을 캡슐화하는 데 사용됩니다. 비공개 메서드는 클래스의 인스턴스에서 호출할 수 있지만, 다른 인스턴스에서는 호출할 수 없습니다.
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
메서드 내에서는 호출할 수 있습니다.
프로텍티드 메서드는 같은 클래스 또는 서브클래스에서 호출할 수 있는 메서드입니다. 이는 상속 관계에서 메서드를 공유할 수 있도록 하며, 주로 상속을 통해 기능을 확장할 때 유용합니다.
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_method
는 Parent
클래스의 비공개 메서드입니다. Child
클래스에서는 이 메서드를 호출할 수 있지만, 외부에서는 호출할 수 없습니다.
루비에서 메서드 가시성은 객체 지향 프로그래밍의 중요한 개념입니다. 공개, 비공개, 프로텍티드 메서드를 적절히 사용하여 코드의 구조를 명확히 하고, 유지보수성을 높일 수 있습니다. 메서드 가시성을 이해하고 활용하는 것은 루비 프로그래머로서의 중요한 스킬 중 하나입니다. 이 글이 루비의 메서드 가시성을 이해하는 데 도움이 되었기를 바랍니다!
© 2024 RailsInsights. All rights reserved.