파이썬 MRO(Method Resolution Order)와 super 동작 원리 정리

개요 파이썬은 다중 상속을 지원하며 동일한 이름의 메소드가 여러 부모에 존재할 때 어떤 구현을 선택할지 결정해야 함 이 결정 규칙이 MRO(Method Resolution Order)로, 클래스 계층 전체에서 메소드를 탐색하는 순서를 정의함 MRO가 없다면 동일 시그니처 메소드가 교차 상속되는 상황에서 해석 모호성, 이른바 death diamond 문제가 발생함 핵심 개념 MRO의 본질은 메소드 탐색 순서의 선형화 파이썬은 C3 linearization 알고리즘으로 일관된 순서를 계산함 규칙 요약 자식 클래스가 먼저 왼쪽에서 오른쪽으로 명시한 부모 순서를 존중 각 부모의 MRO를 안정적으로 병합하여 일관성 유지 클래스 속성 mro 또는 클래스 메소드 mro()로 확인 가능 동작 원리 탐색 순서 기본 형태 자식 클래스 → 명시된 순서의 부모들 → 각 부모의 상위 클래스들 → 최상위 object 순으로 선형화 C3 linearization은 다음 제약을 동시에 만족하는 유일한 순서를 생성 자식은 항상 부모보다 앞선다 부모 목록의 왼쪽 우선 순서를 보존한다 부모들의 MRO 순서를 보존한다 이 규칙으로 동일 이름 메소드가 다수 존재해도 첫 번째로 만나는 구현이 선택됨 사용법과 간단 예시 다중 상속에서 실제 탐색 순서를 눈으로 확인하는 것이 가장 빠름 ...

March 16, 2026

자바스크립트는 왜 프로토타입을 선택했나

개요 브라우저 스크립팅 수요와 10일 설계 제약 클래스보다 구현 단순, 런타임 확장 유리한 위임 모델 채택 개념 객체는 프로토타입 링크로 행동 위임 프로퍼티 조회는 체인 상향 전파 ES6 class는 프로토타입 문법 설탕 이유 동적 합성 용이, 메모리 공유로 중복 감소, 런타임 교체 가능 주의 깊은 체인 비용과 디버깅 난이도 this 바인딩 혼동, 내장 프로토타입 오염 금지 마무리 웹의 변화 속도에 맞춘 실용적 선택 외형은 class 사용 가능하나 내부 모델은 프로토타입 ...

March 8, 2026

전략 패턴 (Strategy Pattern) - 유연한 코드 만들기

전략 패턴이란? 객체의 특정 행동(알고리즘)을 직접 구현하지 않고, 외부에서 ‘전략’을 주입받아 갈아 끼우는 방식임 쉽게 말해 “본체는 그대로 두고, 부품만 바꿔서 기능을 바꾸는 것"이라 보면 됨 전략 패턴이 적용되지 않은 코드 전략 패턴을 쓰지 않으면 보통 이렇게 구현하게 됨 class Vehicle { constructor(private type: "road" | "rail") {} move() { if (this.type === "road") { console.log("부릉부릉 도로로 감 🚌"); } else if (this.type === "rail") { console.log("칙칙폭폭 선로로 감 🚂"); } } }이 방식이 가지는 문제는 다음과 같음 조건문이 계속 늘어남 새로운 이동 방식이 생길 때마다 move()를 수정해야 함 → OCP(Open-Closed Principle) 위반 ...

December 6, 2025