Ruby의 private 메소드란 무엇인가요?
정의된 클래스 내부에서만 호출할 수 있는 메서드 유형입니다.
이를 통해 메소드에 대한 액세스를 제어할 수 있습니다.
Ruby 메소드는 :
- 비공개
- 공개(기본값)
- 보호
기본적으로 모든 메소드는 public
입니다. .
누구나 사용할 수 있습니다!
그러나 메소드를 private
로 만들어서 이것을 변경할 수 있습니다. 또는 protected
.
이것이 유용한 이유는 무엇입니까?
이러한 방법을 더 쉽게 변경할 수 있기 때문입니다.
직장에서 몇 가지 다른 프로젝트에서 사용할 코드 라이브러리를 작성한다고 상상해 보세요.
이러한 프로젝트가 라이브러리를 구현하면 사용자가 만든 클래스에서 메서드를 호출하게 됩니다.
지금 :
새 버전을 출시합니다...
하지만 public
에서 이름을 변경하기로 결정했습니다. 방법.
그러면 이 방법을 사용하는 모든 프로젝트에서 오류가 발생합니다!
기억 :
공용 메서드를 줄이면 클래스 내에서 자유롭게 변경할 수 있습니다.
몇 가지 코드 예제를 살펴보겠습니다!
Ruby의 비공개 메소드 이해
"private method called" 오류 메시지를 본 적이 있습니까?
이것 :
self.puts 123 # NoMethodError: private method `puts' called
그런 다음 private
를 사용하려고 했습니다. 방법이 잘못되었습니다.
private 메소드는 단독으로만 사용할 수 있습니다.
예 :
puts 123
같은 방법이지만 이렇게 불러야 합니다.
개인 메서드는 항상 self
컨텍스트 내에서 호출됩니다. .
즉...
비공개 방법만 사용할 수 있습니다. :
- 같은 클래스의 다른 메서드
- 상위 클래스에서 상속된 메소드
- 모듈에 포함된 메서드
즉, private 메소드를 정의하는 클래스 외부에서 private 메소드를 호출할 수 없습니다.
"명시적 수신자"가 필요하기 때문입니다.
그렇지 않다면...
send
와 같은 방법을 사용합니다. 이 규칙을 우회합니다.
send(:puts, "apple")
private
를 정의하는 방법 방법?
좋아요 :
def bacon "private bacon" end private :bacon
private
라는 단어 자체는 키워드가 아니라 Kernel
에 정의된 메소드입니다. 모듈.
비공개 방법을 놓을 위치
클래스가 두 개 이상의 private 메소드를 갖는 것은 정상입니다.
이러한 방법을 어디에 배치합니까?
이렇게 하세요 :
class Food def public_method end private def bacon end def orange end def coconut end end
모든 인스턴스 메소드 private
뒤 비공개 방법이 됩니다.
private_class_method :method_name
을(를) 사용할 수 있습니다. 클래스 메서드를 private로 정의하려는 경우
먼저 모든 공개 메서드를 정의한 다음 private
을 정의하는 것이 일반적인 패턴입니다. 클래스 끝에 함께 메서드를 제공합니다.
공개 방법
공개는 Ruby의 기본 메소드 가시성입니다.
예시 :
def orange "Vitamin C" end
food
개체가 있는 경우 orange
을 정의하는 , 다음과 같이 호출할 수 있습니다.
food.orange
메서드가 비공개로 설정되었거나 보호된 경우 다시 공개로 설정할 수 있습니다.
좋아요 :
public :orange
보호된 방법이란 무엇입니까?
보호된 방법은 덜 일반적입니다.
private
와 같습니다. 메서드를 호출할 수 있지만 직접 호출하는 것이 아니라 개체에서 호출할 수 있습니다.
비공개로 이 예를 시도하면 오류가 발생합니다:
class Food def initialize(name) @name = name end def ==(other) name == other.name end protected attr_reader :name end food = Food.new("chocolate") puts food == food
name
때문에 오류가 발생합니다. 비공개이므로 other.name
을(를) 수행할 수 없습니다. .
하지만 protected
이 코드는 작동합니다!
비공개 방법과 보호 방법
차이점은 protected
메소드를 private
로 유지 하지만 개체에서 해당 메서드를 호출할 수도 있습니다.
비공개를 사용하면 name
만 수행할 수 있습니다. , protected로 object.name
을(를) 할 수 있습니다. .
protected는 언제 사용해야 하나요?
등호(==
)와 같이 매우 특정한 경우에만 ) 방법.
Ruby 문서에서는 private
사용을 권장합니다. protected
대신 가능하면 언제든지.
이 메모가 있습니다 :
<블록 인용>"보호된 메서드는 인라인 캐시를 사용할 수 없기 때문에 속도가 느립니다."
이에 대해 궁금해서 몇 가지 벤치마크를 실행했습니다. :
public: 2813891.9 i/s private: 2699273.8 i/s protected: 2572122.0 i/s
8.5%의 성능 차이입니다.
동영상 튜토리얼
요약
Ruby 메서드 가시성, 공개, 비공개 및 보호 메서드에 대해 배웠습니다. Ruby 키워드가 아닙니다. , Module
에 정의된 메소드 자체입니다. 수업.
더 많은 사람들이 이 주제를 이해할 수 있도록 이 게시물을 공유해주세요!
읽어주셔서 감사합니다 🙂