메서드 재정의(Overriding)란?
파이썬에서는 언제든지 부모 클래스의 메서드를 재정의(오버라이딩)할 수 있습니다. 부모 클래스의 메서드를 재정의하는 가장 큰 이유는, 서브클래스에서 부모와는 다른 특별한 기능이나 동작이 필요할 때입니다.
자식 클래스에서 부모 클래스와 같은 이름의 메서드를 정의하면, 객체가 해당 메서드를 호출할 때 자식 클래스에 정의된 메서드가 우선적으로 실행됩니다. 이것이 바로 메서드 오버라이딩입니다.
예제 코드
#!/usr/bin/python
class Parent: # 부모 클래스 정의
def myMethod(self):
print('부모 메서드 호출')
class Child(Parent): # 자식 클래스 정의
def myMethod(self):
print('자식 메서드 호출')
c = Child() # 자식 클래스 인스턴스 생성
c.myMethod() # 재정의된 메서드 호출
실행 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
자식 메서드 호출
c는 Child 클래스의 인스턴스이므로, myMethod()를 호출하면 부모 클래스의 메서드가 아닌 자식 클래스에서 재정의한 메서드가 실행됩니다.
super()로 부모 메서드 함께 호출하기
메서드를 재정의하면서도 부모 클래스의 원래 동작이 필요하다면 super() 함수를 사용하면 됩니다.
class Child(Parent):
def myMethod(self):
super().myMethod() # 부모 메서드 먼저 호출
print('자식 메서드 호출')
이 경우 실행 결과는 다음과 같습니다.
부모 메서드 호출 자식 메서드 호출
정리
- 메서드 재정의는 자식 클래스가 부모 클래스의 메서드를 자신에게 맞게 다시 구현하는 것입니다.
- 같은 이름의 메서드가 존재하면 자식 클래스의 메서드가 우선 호출됩니다.
super()를 활용하면 메서드를 재정의하면서도 부모 클래스의 기능을 그대로 재사용할 수 있습니다.