더북(TheBook)

코드 7-7에서는 drive() 메서드에 주목하세요(#1). Car 객체는 반드시 차 주인인 CarOwner 객체가 운전해야 하며 차 주인은 운전에만 집중해야 합니다. drive() 메서드가 시작하자마자 CarOwner 객체의 concentrate() 메서드를 호출해 차 주인이 운전 외에는 아무것도 하지 못하게 합니다(#2). 다음 print 문은 차 주인이 현재 운전하는 상태임을 나타냅니다(#3).

코드 7-8은 Car를 상속받은 파생 클래스 SelfDrivingCar를 자율주행차로 모델링한 코드입니다.

코드 7-8 oop2/oop2_2/method_overriding.py ②

class SelfDrivingCar(Car):
    def drive(self):                       #4
        print('Car is driving by itself')  #5


자율주행차는 차 주인이 운전하지 않고 차가 스스로 운전하므로 상속받은 drive() 메서드가 어울리지 않습니다. drive() 메서드를 뺀 나머지 멤버나 메서드는 여전히 유효합니다. 이러한 경우 SelfDrivingCar 클래스는 Car 클래스를 상속하되 어울리지 않는 drive() 메서드만 클래스 안에서 다시 정의합니다(#4).


이렇게 drive() 메서드만 다시 구현하는 즉, 파생 클래스에서 상속받은 메서드를 다시 구현하는 것을 메서드 오버라이딩(method overriding)이라고 합니다. 차 주인은 더 이상 차가 주행하는 동안 집중하지 않아도 되므로 오버라이딩된 drive() 메서드에는 차 주인의 concentrate() 메서드를 호출하지 않습니다. 다음 print 문은 차가 직접 운전하고 있는 상태를 나타냅니다(#5).

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.