믹스인 적용에서의 private 이름 충돌

믹스인 적용에서의 private 이름 충돌 (private_collision_in_mixin_application)

이 문서는 Dart 분석기(analyzer)가 만들어 내는 private_collision_in_mixin_application 진단(diagnostic)에 대한 상세한 내용을 설명하는 문서예요. 같은 private 멤버를 정의하는 두 믹스인(mixin)이, 그 믹스인들을 정의한 라이브러리가 아닌 다른 라이브러리의 한 클래스에서 함께 사용될 때 분석기가 이 진단을 알려 줘요. 어떤 상황에서 발생하고 어떻게 고치는지 함께 알아볼게요.

출처: private_collision_in_mixin_application

본문

진단 메시지

The private name '{0}', defined by '{1}', conflicts with the same name defined by '{2}'.

'{1}'에 정의된 private 이름 '{0}'이(가) '{2}'에 정의된 동일한 이름과 충돌해요.

설명

분석기는 같은 private 멤버를 정의하는 두 믹스인이, 그 믹스인들을 정의한 라이브러리와는 다른 라이브러리에 있는 하나의 클래스에서 함께 사용될 때 이 진단을 만들어 내요.

예시

다음 코드가 담긴 a.dart 파일이 있다고 해 볼게요.

mixin A {
  void _foo() {}
}

mixin B {
  void _foo() {}
}

다음 코드는 믹스인 AB가 모두 _foo 메서드를 정의하기 때문에 이 진단을 만들어 내요.

import 'a.dart';

class C extends Object with A, B {}

일반적인 해결 방법

두 믹스인이 모두 필요하지 않다면, with 절에서 둘 중 하나를 제거해 주세요.

import 'a.dart';

class C extends Object with A, B {}

두 믹스인이 모두 필요하다면, 두 믹스인 중 하나에서 충돌하는 멤버의 이름을 바꿔 주세요.

더 알아보기