믹스인 적용에서의 private 이름 충돌
믹스인 적용에서의 private 이름 충돌 (private_collision_in_mixin_application)
이 문서는 Dart 분석기(analyzer)가 만들어 내는 private_collision_in_mixin_application 진단(diagnostic)에 대한 상세한 내용을 설명하는 문서예요. 같은 private 멤버를 정의하는 두 믹스인(mixin)이, 그 믹스인들을 정의한 라이브러리가 아닌 다른 라이브러리의 한 클래스에서 함께 사용될 때 분석기가 이 진단을 알려 줘요. 어떤 상황에서 발생하고 어떻게 고치는지 함께 알아볼게요.
본문
진단 메시지
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() {}
}
다음 코드는 믹스인 A와 B가 모두 _foo 메서드를 정의하기 때문에 이 진단을 만들어 내요.
import 'a.dart';
class C extends Object with A, B {}
일반적인 해결 방법
두 믹스인이 모두 필요하지 않다면, with 절에서 둘 중 하나를 제거해 주세요.
import 'a.dart';
class C extends Object with A, B {}
두 믹스인이 모두 필요하다면, 두 믹스인 중 하나에서 충돌하는 멤버의 이름을 바꿔 주세요.
더 알아보기
- Dart 분석기 진단 목록에서 다른 진단들도 함께 살펴보세요.
- Dart의 private 멤버와 라이브러리 프라이버시에 대한 더 자세한 내용은 Dart 언어 투어 (Language tour)를 참고해요.