[파이썬] 오버라이딩(Overriding)
프로그래밍을 하다 보면, 기존에 정의된 메서드를 필요에 맞게 변경해야 하는 상황이 발생합니다. 이러한 요구사항을 충족하기 위한 방법 중 하나가 '오버라이딩(Overriding)'입니다. 이번 글에서는 파이썬에서 오버라이딩이 무엇인지, 어떻게 사용하는지, 그리고 왜 중요한지에 대해 예제를 통해 자세히 알아보겠습니다.
오버라이딩이란?
오버라이딩은 객체 지향 프로그래밍에서 매우 중요한 개념으로, 부모 클래스에 정의된 메서드를 자식 클래스에서 새롭게 정의하여 덮어쓰는 것을 말합니다. 쉽게 말해, 상속받은 메서드를 자식 클래스의 필요에 맞게 재정의하는 것입니다.
기본 개념
오버라이딩의 기본 개념은 간단합니다. 부모 클래스에 있는 메서드를 자식 클래스에서 동일한 이름으로 다시 정의하면, 자식 클래스의 인스턴스는 부모 클래스의 메서드 대신 재정의된 메서드를 사용하게 됩니다.
예제
기본 클래스와 메서드
먼저, 간단한 클래스 A와 그 안에 greeting 메서드를 정의해 보겠습니다.
class A:
def greeting(self):
print("안녕하세요.")
이 클래스를 상속받는 하위 클래스 B를 정의하고, 별다른 변경 없이 그대로 둔다면, B 클래스의 인스턴스는 A 클래스의 greeting 메서드를 그대로 사용할 수 있습니다.
class B(A):
pass
b = B()
b.greeting() # 출력: 안녕하세요.
메서드 오버라이딩
출력되는 메시지를 변경하고 싶다면, B 클래스에서 greeting 메서드를 다시 정의하면 됩니다.
class B(A):
def greeting(self):
print("안녕?!")
b = B()
b.greeting() # 출력: 안녕?!
이처럼, 같은 메서드 호출이지만, 클래스 B에서 메서드를 재정의하여 다른 메시지를 출력하도록 했습니다.
부모 클래스의 메서드 확장
때로는 부모 클래스의 메서드 기능을 그대로 유지하면서, 추가적인 기능을 덧붙이고 싶을 때가 있습니다. 이럴 때는 super()를 사용하여 부모 클래스의 메서드를 호출한 뒤, 추가 작업을 수행할 수 있습니다.
class B(A):
def greeting(self):
super().greeting()
print("안녕?!")
b = B()
b.greeting() # 출력: 안녕하세요.
# 안녕?!
이 경우, super().greeting()을 호출하여 부모 클래스의 greeting 메서드를 실행한 후, "안녕?!" 메시지를 추가로 출력합니다.
오버라이딩의 중요성
오버라이딩은 코드의 재사용성을 높이고, 자식 클래스가 부모 클래스의 기능을 유연하게 변경하거나 확장할 수 있도록 해줍니다. 이를 통해 객체 지향 프로그래밍의 핵심 원칙인 다형성을 구현할 수 있으며, 코드의 유지보수성과 확장성을 크게 향상시킬 수 있습니다.
결론
오버라이딩은 파이썬을 비롯한 객체 지향 프로그래밍 언어에서 중요한 개념입니다. 부모 클래스의 메서드를 자식 클래스에서 재정의하여 새로운 기능을 구현하거나 기존 기능을 확장할 수 있습니다. 이를 통해 코드의 유연성과 재사용성을 높일 수 있으며, 프로그램의 구조를 더욱 체계적으로 설계할 수 있습니다.
오버라이딩에 대한 이해와 활용은 파이썬 프로그래밍에서 한 단계 더 나아가는 중요한 도약이 될 것입니다. 예제를 통해 실습해보며, 오버라이딩의 개념을 확실히 익혀보세요.