테스트 코드를 작성해서 결과를 확인해 봅시다.
코드 7-9 oop2/oop2_2/method_overriding.py ③
if __name__ = = "__main__": car = Car('Greg') car.drive() #6 print('') s_car = SelfDrivingCar('John') s_car.drive() #7
실행결과 Greg can not do anything else
Greg is driving now.
Car is driving by itself
Car 객체와 SelfDrivingCar 객체를 하나씩 만들어 각자 drive() 메서드를 호출합니다. car.drive()는 Car 객체가 drive() 메서드를 호출하는 것이고(#6), s_car.drive()는 SelfDrivingCar 객체가 drive() 메서드를 호출하는 것입니다(#7). 이름이 같은 메서드를 호출해도 구현 내용이 다르므로 결과는 다르게 나옵니다. 실행 결과를 보면 Car 객체는 CarOwner 객체가 집중해서 운전하고, SelfDrivingCar 객체는 차가 스스로 운전합니다. 이처럼 같은 이름의 메서드를 호출해도 호출한 객체에 따라 다른 결과를 내는 것을 ‘다형성’이라고 합니다.
TIP 오버라이딩은 다른 행동 혹은 기능을 의미합니다. 기본 클래스 객체와 파생 클래스 객체의 여러 가지 행동(메서드)이 다르다면 과연 IS-A 관계가 맞는지 다시 한 번 검토해 봐야 합니다.