missing_override_of_must_be_overridden 진단 — @mustBeOverridden 멤버를 오버라이드해야 해요

missing_override_of_must_be_overridden 진단 — @mustBeOverridden 멤버를 오버라이드해야 해요

Dart 분석기가 내보내는 missing_override_of_must_be_overridden 진단은 @mustBeOverridden 어노테이션이 붙은 인스턴스 멤버를 하위 클래스에서 반드시 오버라이드해야 하는데 빠졌다는 뜻이에요.

출처: missing_override_of_must_be_overridden

본문

이 진단은 언제 발생해요?

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은 "이 멤버는 하위 클래스에서 꼭 재정의해서 쓰도록 규칙을 만들고 싶다"는 의도를 담아요. 하위 클래스마다 다르게 구현해야 하는 멤버라면 오버라이드를, 모든 하위 클래스에 공통으로 쓰는 멤버라면 어노테이션을 떼는 방향이 자연스러워요.

더 알아보기

  • @mustBeOverriddenpackage:meta의 어노테이션이에요. 더 자세한 내용은 meta 패키지 문서를 참고해 보세요.
  • Dart 분석기 진단 전체 목록은 Diagnostics 문서를 확인할 수 있어요.