불필요한 late 규칙

불필요한 late 규칙 (unnecessary_late)

굳이 late가 필요하지 않은데 붙여 놓은 건 아닌지 잡아 주는 린트 규칙이에요. 특히 top-level이나 static 변수처럼 이미 지연 평가(lazy evaluation)되는 애들한테는 late가 의미가 없을 때가 많거든요. "이 변수는 늦게 초기화돼도 괜찮아"라는 의도를 명확히 표현하고 싶다면, 정말 필요한 곳에만 써야 해요.

출처: unnecessary_late

본문

초기화식(initializer)이 있는 top-level 변수와 static 변수에는 late를 지정하지 마세요.

top-level 변수와 static 변수는 초기화식이 있으면 마치 late로 표시된 것처럼 이미 지연 평가되거든요. 그런데 굳이 late를 또 붙이면 불필요한 중복이 돼요.

이렇게 쓰는 건 좋지 않아요.

late String badTopLevel = ' ';

이렇게 쓰는 게 좋아요.

String goodTopLevel = ' ';

클래스 안의 static 변수에서도 마찬가지예요. 먼저 좋지 않은 예를 볼게요.

class BadExample {
  static late String badStatic = ' ';
}

static 변수는 이미 지연 평가되니 late 없이도 충분해요.

class GoodExample {
  late String goodStatic;
}

물론 위의 GoodExample처럼 초기화식이 없고 나중에 값을 채워야 하는 인스턴스 변수라면 late가 필요하겠죠. 여기서 핵심은 초기화식이 있으면서 이미 지연 평가되는 top-level·static 변수에 중복으로 late를 붙이는 걸 피하라는 거예요.

활성화하기

unnecessary_late 규칙을 켜려면 analysis_options.yaml 파일의 linter > rules 아래에 unnecessary_late를 추가하면 돼요.

linter:
  rules:
    - unnecessary_late

린트 규칙을 설정할 때 YAML 맵 문법을 쓰고 있다면, linter > rules 아래에 unnecessary_late: true처럼 넣어 주면 돼요.

linter:
  rules:
    unnecessary_late: true

더 알아보기

  • 이 규칙은 Dart 2.16에서 추가됐고, 권장(Recommended) 단계로 자동 수정(Fix)이 제공돼요.
  • late를 언제 써야 하는지 더 자세히 보고 싶다면 공식 문서의 late 키워드 설명도 함께 살펴보면 도움이 돼요.