missing_override_of_must_be_overridden 진단 — @mustBeOverridden 멤버를 오버라이드해야 해요
missing_override_of_must_be_overridden 진단 — @mustBeOverridden 멤버를 오버라이드해야 해요
Dart 분석기가 내보내는 missing_override_of_must_be_overridden 진단은 @mustBeOverridden 어노테이션이 붙은 인스턴스 멤버를 하위 클래스에서 반드시 오버라이드해야 하는데 빠졌다는 뜻이에요.
본문
이 진단은 언제 발생해요?
analyzer는 @mustBeOverridden 어노테이션이 붙은 인스턴스 멤버가 서브클래스에서 오버라이드되지 않았을 때 이 진단을 내보내요. 이름 그대로 "반드시 오버라이드해야 하는데 안 했네요"라는 신호예요.
예시를 볼까요?
아래 코드에서 A.m에 @mustBeOverridden이 붙어 있는데, A를 상속하는 클래스 B에는 상속받은 메서드 A.m의 오버라이드가 없어서 이 진단이 발생해요.
import 'package:meta/meta.dart';
class A {
@mustBeOverridden
void m() {}
}
class B extends A {}
어떻게 고치면 돼요?
① 어노테이션이 그 멤버에 적절한 경우에는 서브클래스에서 멤버를 오버라이드하면 돼요.
import 'package:meta/meta.dart';
class A {
@mustBeOverridden
void m() {}
}
class B extends A {
@override
void m() {}
}
② 어노테이션이 그 멤버에 어울리지 않는 경우에는 어노테이션을 제거하는 게 맞아요.
class A {
void m() {}
}
class B extends A {}
무엇을 기준으로 고르면 돼요?
@mustBeOverridden은 "이 멤버는 하위 클래스에서 꼭 재정의해서 쓰도록 규칙을 만들고 싶다"는 의도를 담아요. 하위 클래스마다 다르게 구현해야 하는 멤버라면 오버라이드를, 모든 하위 클래스에 공통으로 쓰는 멤버라면 어노테이션을 떼는 방향이 자연스러워요.
더 알아보기
@mustBeOverridden은package:meta의 어노테이션이에요. 더 자세한 내용은 meta 패키지 문서를 참고해 보세요.- Dart 분석기 진단 전체 목록은 Diagnostics 문서를 확인할 수 있어요.