프로그래밍언어/파이썬[중급]
[파이썬][중급] Chapter04. 다중 상속과 MRO 이해
about_IT
2025. 5. 18. 21:35
728x90
파이썬은 다중 상속(Multiple Inheritance)을 지원하는 언어로, 하나의 클래스가 둘 이상의 부모 클래스를 상속받을 수 있습니다. 다중 상속은 유연한 설계가 가능하게 하지만, 메서드 호출 순서를 명확히 이해하지 않으면 예기치 않은 동작을 유발할 수 있습니다.
● 다중 상속이란?
하나의 클래스가 여러 클래스로부터 속성과 메서드를 상속받는 것을 말합니다. 파이썬에서는 클래스 정의 시 괄호 안에 여러 부모 클래스를 나열하면 됩니다.
class A:
def greet(self):
print("Hello from A")
class B:
def greet(self):
print("Hello from B")
class C(A, B):
pass
위의 예제에서 C 클래스는 A와 B를 동시에 상속받습니다. 이때 C().greet()
을 호출하면 어떤 클래스의 메서드가 실행될까요? 이것이 바로 MRO(Method Resolution Order)의 개념입니다.
● MRO(Method Resolution Order)
MRO는 클래스 상속 관계에서 메서드나 속성을 검색하는 순서를 의미합니다. 파이썬은 C3 선형화 알고리즘을 사용하여 이 순서를 결정합니다.
print(C.mro()) # [C, A, B, object]
즉, C 클래스에서 메서드를 찾을 때 A → B → object 순으로 검색합니다. 따라서 위 예제에서는 A 클래스의 greet
메서드가 호출됩니다.
● super() 함수와 MRO
다중 상속에서 super()
는 MRO에 따라 다음 클래스의 메서드를 호출하는 방식으로 동작합니다. 이를 통해 중복 호출을 방지하고 확장 가능한 구조를 만들 수 있습니다.
class A:
def greet(self):
print("A")
super().greet()
class B:
def greet(self):
print("B")
class C(A, B):
def greet(self):
print("C")
super().greet()
C().greet()
출력 결과는 C → A → B 순으로 실행됩니다. 이는 C3 MRO 순서에 따른 것입니다.
● 주의할 점
- 다중 상속 시 이름 충돌이 발생할 수 있으므로 구조를 명확히 설계해야 합니다.
- 가능하면 공통 기능은 상위 추상 클래스에, 특수 기능은 하위 클래스에 구현합니다.
super()
는 항상 MRO 순서를 따른다는 점을 기억하세요.
● 마무리
다중 상속은 강력하지만 신중하게 사용해야 하는 도구입니다. MRO의 개념을 명확히 이해하면 복잡한 클래스 구조 속에서도 예측 가능한 동작을 설계할 수 있습니다.
728x90