Mixin은 홀로 존재하지 않는 작은 능력이야
로그 출력, JSON 변환처럼 한 가지 행동을 여러 클래스에 제공하고 자체 정체성이나 큰 상태를 갖지 않아. 이름도 역할이 드러나게 하고, 다른 mixin과 겹치는 메서드가 없는지 살펴야 해.
상속이 늘수록 숨은 결합도 늘어
여러 mixin이 같은 이름이나 super 체인에 기대면 MRO를 알아야만 동작을 이해할 수 있어. 직교하는 작은 능력에는 쓸 만하지만, 상태와 수명이 있는 부품이라면 합성이 더 정직해.
합성은 소유권을 호출부에 드러낸다
객체가 도우미를 속성으로 가지고 명시적으로 일을 맡기면 교체와 시험이 쉽고, 메서드가 어디서 왔는지도 바로 보여. 간접 호출 한 단계의 비용 대신 경계가 선명해져.
5% 관점: mixin은 상속의 모양을 빌리지만 정체성의 계보를 만들려는 도구는 아니야. 본체가 아니라 횡단 능력을 주입하는 특성에 가까워. 호스트 내부를 많이 알아야 하거나 mixin끼리 순서를 다투기 시작하면 합성이 더 정직한 경계라는 신호야.