overridden_fields: 필드를 오버라이드하지 마세요

overridden_fields: 필드를 오버라이드하지 마세요

서브클래스에서 부모의 필드를 같은 이름으로 다시 선언해 덮어쓰는 경우를 가끔 보게 되는데요, 대부분 의도하지 않은 실수로 이뤄져요. overridden_fields는 필드를 오버라이드하지 말라고 알려주는 린트(lint) 규칙이에요.

출처: overridden_fields

본문

상세 설명

필드를 오버라이드하지 마세요. 필드를 오버라이드하는 일은 거의 항상 의도치 않게 발생해요. 그렇다 하더라도 좋은 습관은 아니에요.

BAD:

class Base {
  Object field = 'lorem';

  Object something = 'change';
}

class Bad1 extends Base {
  @override
  final field = 'ipsum'; // LINT
}

class Bad2 extends Base {
  @override
  Object something = 'done'; // LINT
}

GOOD:

class Base {
  Object field = 'lorem';

  Object something = 'change';
}

class Ok extends Base {
  Object newField; // OK

  final Object newFinal = 'ignore'; // OK
}

GOOD:

abstract class BaseLoggingHandler {
  Base transformer;
}

class LogPrintHandler implements BaseLoggingHandler {
  @override
  Derived transformer; // OK
}

타입을 더 구체적인(specialized) 타입으로 좁히는 의도적인 오버라이드라면 @override와 함께 쓰는 건 문제없어요.

활성화하기

overridden_fields 규칙을 활성화하려면 analysis_options.yaml 파일의 linter > rules 아래에 overridden_fields를 추가해요.

linter:
  rules:
    - overridden_fields

대신 YAML map 문법으로 린터 규칙을 설정한다면, linter > rules 아래에 overridden_fields: true를 추가해요.

linter:
  rules:
    overridden_fields: true

참고로 이 규칙은 권장(Recommended) 규칙이에요.

더 알아보기