본 글은 MOR이란 무엇인가 작성자가 학습하기 위해 자료를 검색해 정리한 글입니다.
MRO이란?
파이썬은 기본적으로 상속을 지원하는 언어로써 다중상속을 지원하고 있습니다.
문제는 다중상속일때 같은 이름의 메소드를 가지고 있다면?
과연 순서를 어떻게 지정해야 하는가가 중요합니다.
순서를 지정하지 않는다면 아래 그림과 같이 다이아몬드 형태로 이루어져있는 상속으로 개발자가 원하는
결과를 도출하는 것이 어려울 것입니다.
그래서 여기서 필요한것이 MRO 직역하면 메소드 결정 순서라고 할 수 있습니다.
즉 위와 같은 다이아몬드 형태의 복잡한 구조를 가지게 되는 것이 아닌 정확한 순서를 지정해주니
개발자가 원하는 방향대로 흐름을 지정할 수 있는 것입니다.
여기서 좋은점은 개발자는 그저 순서만 지정 해주면 자동적으로 파이썬이 MRO를 구성한다는 점입니다.
예를 들어 순서를 D -> B -> C -> A 순으로 지정해 준다면
D가 실행되었을 때 D의 지정한 것을 도출할 것이고
D부분을 pass 등으로 지운다면 그다음 순서로 지정해둔 B의 결과를 도출하게 됩니다.
이렇듯 파이썬이 지원하는 다중상속을 사용하려면 정확한 순서를 지정해주어 MRO를 이루어야만
개발자가 원하는 프로그램 작성이 수월해 필요한 구조입니다.
MRO 구조 에러
그러나 여기서 주의할점이 있는데 MRO를 구성할 수 없는 구조
지금처럼 B와 C가 A를 상속받고 있는 상황에서 D가 바로 A를 상속받는 다면?
D -> B -> C -> A 형태였는데 D가 A를 바로 상속받더라도
D -> A -> B -> C 는 이루어 질수가 없습니다.
B와 C가 A를 상속받아 이루어지기에 순서를 지정할 수가 없는 것입니다.
이렇듯 개발자가 순서를 지정하였더라도 순서적으로 모순이 생긴다면 이는
파이썬이 MRO를 구성할 수 없게되고 MRO를 구성할 수 없으니 에러가 발생하게 됩니다.
그러므로 개발자는 파이썬의 다중상속을 사용할 때에는 순서를 확실히 지정해 MRO를 구성할때
에러가 없도록 유의하며 구성을 해야한다고 합니다.
Reference
'Reference' 카테고리의 다른 글
시스템 호출과 명령어 실행 (0) | 2022.09.08 |
---|