unnecessary_overrides 진단: 불필요한 재정의(override)

unnecessary_overrides 진단: 불필요한 재정의(override)

Dart 분석기가 내보내는 진단에는 이름이 있어요. unnecessary_overrides인스턴스 멤버(member)가 상속받은 멤버를 재정의했는데, 정확히 같은 인자로 재정의된 멤버만 다시 호출할 뿐일 때 알려주는 린트(lint) 진단이에요.

출처: unnecessary_overrides

본문

설명

분석기는 인스턴스 멤버가 상속받은 멤버를 재정의하면서, 딱 그 재정의된 멤버를 같은 인자로 호출하는 것밖에 하지 않을 때 이 진단을 만들어요.

예시

다음 코드는 메서드 D.m이 재정의된 메서드를 호출하는 것 외에는 아무것도 하지 않기 때문에 이 진단을 만들어요.

class C {
  int m(int x) => x;
}

class D extends C {
  @override
  int m(int x) => super.m(x);
}

흔한 해결 방법

메서드가 재정의된 메서드가 하는 일보다 더 많은 일을 해야 한다면, 빠져 있는 기능을 구현해요.

class C {
  int m(int x) => x;
}

class D extends C {
  @override
  int m(int x) => super.m(x) + 1;
}

재정의된 메서드를 수정해야 한다면 — 반환 타입이나 매개변수 타입을 바꾸거나, 매개변수 중 하나를 covariant로 만들거나, 문서 주석을 달거나, 추가적인 애너테이션을 붙이는 식으로 — 코드를 갱신해요.

import 'package:meta/meta.dart';

class C {
  int m(int x) => x;
}

class D extends C {
  @mustCallSuper
  @override
  int m(int x) => super.m(x);
}

재정의하는 메서드가 코드의 의미를 바꾸거나 향상시키지 않는다면, 그냥 제거해요.

class C {
  int m(int x) => x;
}

class D extends C {}

더 알아보기