OOP 다형성 일명 "모든 개는 똑같이 짖지 않는다"
세대 차이
Fresh Prince가 말했듯이 "부모는 이해하지 못합니다". 자식 클래스(하위 클래스라고도 함)가 부모 클래스(슈퍼 클래스라고도 함)의 속성과 동작을 상속한다고 해서 완전히 동일한 방식으로 수행되는 것은 아닙니다. 내 말은, 당신은 당신의 부모처럼 행동하지 않는다는 것입니다. 당신은? (그렇다면 괜찮습니다).
요점은 부모와 자녀가 동일한 특성과 행동을 많이 가질 수 있지만 정확히 일대일일 필요는 없다는 것입니다. 그리고 특히 행동과 관련하여 아이들이 항상 같은 방식으로 행동하는 것은 아닙니다.
모든 개에게는 하루가 있습니다
예를 들어, 다른 개에 대한 수업을 만들어 봅시다.
다음은 개 클래스입니다.
class Dog
def initialize(breed)
@breed = breed
@number_of_legs = 4
end
def bark
puts "Bark, Bark"
end
end
또한 우리 프로그램에서 작은 개와 큰 개를 구분할 수 있으므로 작은 개와 큰 개 모두를 위한 클래스가 필요하다고 가정해 보겠습니다.
이미 Dog 클래스가 있으므로 Small Dog와 Big Dog가 Dog 수퍼 클래스에서 상속되도록 할 수 있습니다. 작은 개는 개이고 큰 개도 여전히 개이기 때문에 이것은 이치에 맞습니다.
class SmallDog < Dog
end
class BigDog < Dog
end
이제 SmallDog 및 BigDog를 품종으로 초기화할 수 있습니다. 둘 다 number_of_legs가 4로 설정되고 둘 다 bark 메서드가 있습니다. 상속 감사합니다!
하지만 문제는 작은 개와 큰 개 사이에 차이가 있는지 확인하고 싶다는 것입니다. 지금은 둘 다 슈퍼 클래스(일반적인 개)와 정확히 동일한 모든 작업을 수행하므로 서로 완전히 동일합니다.
특히 작은 개는 짖을 때 "얍, 얍"이라고 말하고 큰 개는 "멍, 멍"이라고 말하는 것이 더 이치에 맞습니다.
다형성의 OOP 원칙을 호출함으로써 우리는 그렇게 할 수 있습니다!
class SmallDog < Dog
def bark
puts "yap, yap"
end
end
class BigDog < Dog
def bark
puts "RUFF, RUFF"
end
end
우리의 서브클래스에 슈퍼클래스와 같은 이름을 가진 메서드를 제공함으로써 우리 프로그램은 메서드가 호출될 때(해당 서브클래스의 인스턴스에서) 서브클래스 구현을 사용하는 것을 선호할 것입니다. 이를 메서드 재정의라고 하며 다형성의 핵심입니다.
즉, 이제
Dog.bark
는 "Bark, Bark"를 인쇄하고, SmallDog.bark
는 "yap, yap"을 인쇄하고, BigDog.bark
는 "RUFF, RUFF"를 출력합니다.모든 개는 짖지만, 짖는 방식은 Dog의 정확한 클래스(일명 하위 클래스)에 따라 달라질 수 있습니다.
모든 기둥
이를 통해 객체 지향 프로그래밍(OOP의 4가지 기둥이라고도 함)의 주요 개념 4가지를 모두 검토했습니다.
요약:
이것으로 OOP 개념에 대한 시리즈를 마칩니다. 의견이나 질문이 있으시면 아래에 언제든지 응답해 주십시오!
감사합니다. 다음에 뵙겠습니다.
Reference
이 문제에 관하여(OOP 다형성 일명 "모든 개는 똑같이 짖지 않는다"), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/eben_eleazer/oop-polymorphism-aka-all-dogs-dont-bark-the-same-foa텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)