루비의 프라이빗 메소드 :
메소드가 Ruby에서 개인용 인 경우 명시 적 수신자 (오브젝트)가 메소드를 호출 할 수 없습니다. 암시 적으로 만 호출 할 수 있습니다. 이 클래스는 서브 클래스뿐만 아니라 해당 클래스가 설명 된 클래스에 의해 내재적으로 호출 될 수 있습니다.
다음 예제는 더 잘 설명합니다.
1) 개인 메소드 class_name을 가진 동물 클래스
class Animal
def intro_animal
class_name
end
private
def class_name
"I am a #{self.class}"
end
end
이 경우 :
n = Animal.new
n.intro_animal #=>I am a Animal
n.class_name #=>error: private method `class_name' called
2) 양서류라는 동물의 서브 클래스 :
class Amphibian < Animal
def intro_amphibian
class_name
end
end
이 경우 :
n= Amphibian.new
n.intro_amphibian #=>I am a Amphibian
n.class_name #=>error: private method `class_name' called
보다시피, private 메소드는 암시 적으로 만 호출 할 수 있습니다. 명시적인 수신자가 호출 할 수 없습니다. 같은 이유로, 개인용 메소드는 정의 클래스의 계층 외부에서 호출 될 수 없습니다.
루비에서 보호 된 메소드 :
메소드가 Ruby로 보호되는 경우, 정의 클래스와 해당 서브 클래스 둘 다에 의해 내재적으로 호출 될 수 있습니다. 또한 수신자가 자체 클래스이거나 자체 클래스와 동일한 클래스 인 경우 명시 적 수신자가 호출 할 수도 있습니다.
1) protected 메소드 protect_me를 가진 Animal 클래스
class Animal
def animal_call
protect_me
end
protected
def protect_me
p "protect_me called from #{self.class}"
end
end
이 경우 :
n= Animal.new
n.animal_call #=> protect_me called from Animal
n.protect_me #=>error: protected method `protect_me' called
2) 동물 계급에서 물려받은 포유류 계급
class Mammal < Animal
def mammal_call
protect_me
end
end
이 경우
n= Mammal.new
n.mammal_call #=> protect_me called from Mammal
3) 동물 계급 (포유류 계급과 동일)에서 물려받은 양서류 계급
class Amphibian < Animal
def amphi_call
Mammal.new.protect_me #Receiver same as self
self.protect_me #Receiver is self
end
end
이 경우
n= Amphibian.new
n.amphi_call #=> protect_me called from Mammal
#=> protect_me called from Amphibian
4) Tree라는 클래스
class Tree
def tree_call
Mammal.new.protect_me #Receiver is not same as self
end
end
이 경우 :
n= Tree.new
n.tree_call #=>error: protected method `protect_me' called for #<Mammal:0x13410c0>
Object
개인 메소드를 호출하도록 허용 된 경우Object
와 같은 것을 말할 수 있습니다5.puts("hello world")
.