[python]MRO(Method Resolution Order)

sicksong·2021년 12월 29일
0
post-thumbnail

MRO(Method Resolution Order)?

MRO는 파이썬의 상속과 관련있는 개념입니다. 직역하자면 '메소드 결정 순서'정도가 되겠네요.

파이썬은 기본적으로 다중 상속을 지원합니다. 상속받은 부모 클래스가 서로 겹치지 않는 메소드 네임을 가지고 있다면 딱히 문제될 것이 없습니다. 하지만 만약 부모 클래스들이 똑같은 이름의 메소드를 가지고 있다면 이름부터 무시무시한 죽음의 다이아몬드(the Deadly Diamond of Death) 문제가 발생하게 됩니다.

죽음의 다이아몬드는 다중 상속을 받을 때, 부모 클래스에 동일한 이름의 메소드를 호출하려 할 때 어떤 부모의 메소드를 호출해야 할 지 모르기 때문에 발생하는 문제입니다. 한 마디로 정리하면 하나의 구문이 두 가지 이상의 의미로 해석 될 수 있을 때 발생하는 문제입니다.

파이썬은 MRO를 통해 이 문제를 해결합니다. MRO는 자식과 부모 클래스를 전부 포함하여 메소드의 실행 순서를 지정하는 것입니다. 따라서 동일한 이름의 메소드가 등장하더라도 문제가 되지 않죠. 지정된 순서대로 실행하면 되니까요.

profile
세상을 선명하게

0개의 댓글