메서드 오버라이딩이란?
오버라이딩(Overriding, 재정의)은 클래스가 기반 클래스(부모 클래스) 중 하나에서 제공하는 메서드의 구현을 자신에게 맞게 변경할 수 있는 객체 지향 프로그래밍(OOP)의 핵심 속성입니다.
오버라이딩은 상속이 그 힘을 최대한 발휘할 수 있도록 해주기 때문에 OOP에서 매우 중요한 개념입니다. 메서드 오버라이딩을 활용하면 한 클래스가 다른 클래스를 사실상 "복사"하여 중복 코드를 작성하지 않으면서도, 필요한 부분만 향상시키거나 커스터마이징할 수 있습니다. 즉, 메서드 오버라이딩은 상속 메커니즘의 중요한 일부라고 할 수 있습니다.
Python에서 메서드 오버라이딩하는 방법
Python에서 메서드 오버라이딩은 매우 간단합니다. 자식 클래스에 부모 클래스의 메서드와 같은 이름의 메서드를 정의하기만 하면 됩니다. 자식 클래스 객체에 해당 메서드가 정의되어 있으면 메서드 호출 시 자식 클래스의 구현이 우선적으로 실행되며, 부모(조상) 클래스의 구현은 더 이상 사용되지 않습니다.
class Parent(object):
def __init__(self):
self.value = 4
def get_value(self):
return self.value
class Child(Parent):
def get_value(self):
return self.value + 1
이제 Child 객체는 부모 클래스와 다르게 동작합니다.
>>> c = Child()
>>> c.get_value()
5
super()를 활용한 부모 메서드 호출
메서드를 오버라이딩하면서도 부모 클래스의 원래 구현을 함께 활용하고 싶다면 super() 함수를 사용할 수 있습니다. 이 방법은 코드 중복을 줄이고 부모 클래스의 로직을 그대로 재사용하면서 추가 동작만 덧붙일 때 특히 유용합니다.
class Child(Parent):
def get_value(self):
return super().get_value() + 1
정리
Python의 메서드 오버라이딩은 자식 클래스에서 부모 클래스와 동일한 이름의 메서드를 정의하는 것만으로 구현됩니다. 이를 통해 상속받은 기능을 그대로 사용하거나, 완전히 새로운 동작으로 대체하거나, super()를 이용해 부모의 구현을 확장할 수도 있습니다. 오버라이딩을 잘 활용하면 중복 코드 없이 유연하고 유지보수하기 쉬운 객체 지향 코드를 작성할 수 있습니다.