본문 바로가기
Developer/Ruby

Ruby kind_of vs is_a vs instance_of 차이

by roqkfrlfhr 2022. 9. 4.

Ruby kind_of vs is_a vs instance_of 차이

 

Ruby 에서 클래스(혹은 타입) 비교 확인을 하기 위해서 [kind_of], [is_a], [instance_of] 이 세가지를 사용하실텐데요.

세가지 메소드의 차이는 무엇인지 알려드리도록 하겠습니다.

 

결론부터 말씀을 드리자면 한가지의 큰 차이가 존재하며,

[kind_of][is_a] 가 같은 결과, 그리고 [instance_of] 만 다른 결과를 반환합니다.

 

class Flower
end

class Freesia < Flower
end

freesia = Freesia.new

puts "freesia.kind_of? Freesia : #{freesia.kind_of? Freesia} / freesia.kind_of? Flower : #{freesia.kind_of? Flower}"
puts "freesia.is_a? Freesia : #{freesia.is_a? Freesia} / freesia.is_a? Flower : #{freesia.is_a? Flower}"
puts "freesia.instance_of? Freesia : #{freesia.instance_of? Freesia} / freesia.instance_of? Flower : #{freesia.instance_of? Flower}"


# Output
# freesia.kind_of? Freesia : true / freesia.kind_of? Flower : true
# freesia.is_a? Freesia : true / freesia.is_a? Flower : true
# freesia.instance_of? Freesia : true / freesia.instance_of? Flower : false

Flower 라는 클래스를 하나 선언하였고 Flower 클래스를 상속받는 Freesia 라는 클래스를 선언하였습니다.

그리고 Freesia 클래스로 생성한 freesia 라는 인스턴스를 선언하였습니다.

이제 freesia 인스턴스를 각각 [kind_of], [is_a], [instance_of] 를 사용하여 Freesia 클래스부모 클래스인 Flower 클래스와 비교 확인 해봤습니다.

 

차이는 생성한 인스턴스의 클래스인 Freesia의 부모 클래스 Flower와 비교 확인 했을 때의 결과에서 보입니다!

[kind_of][is_a] 를 사용하여 부모 클래스인 Flower와 비교 확인을 했을 경우 true를 반환합니다.

하지만 [instance_of] 를 사용하여 부모 클래스인 Flower와 비교 확인을 했을 경우 false를 반환합니다.

이것이 [kind_of] 와 [is_a], 그리고 [instance_of] 의 차이입니다.

 

상황에 따라 인스턴스의 클래스와 부모 클래스와 비교하였을 때 모두 true를 얻고싶으시다면 [kind_of] 와 [is_a] 를 사용하시면 되고,

인스턴스의 클래스에만 정확히 true를 얻고싶으시다면 [instance_of] 를 사용하시면 되겠습니다!

 

 

이상으로 Ruby 클래스 비교 확인 함수 [kind_of], [is_a], [instance_of] 의 차이에 대한 설명을 마치도록 하겠습니다.

 

 

도움이 되셨다면 공감, 댓글 부탁드립니다!

궁금하신 점이나 요청사항은 언제든지 말씀해주세요!

피드백도 언제나 환영입니다!

 

감사합니다.


댓글