nullable 타입의 extension에 쓰는 불필요한 null-aware 연산자 규칙

nullable 타입의 extension에 쓰는 불필요한 null-aware 연산자 규칙 (unnecessary_null_aware_operator_on_extension_on_nullable)

nullable 타입에 대해 정의된 extension의 멤버를 호출할 때 굳이 ?. 같은 null-aware 연산자를 쓰고 있진 않은지 잡아 주는 린트 규칙이에요. 해당 extension은 null이어도 정상 동작하도록 설계된 경우가 많기 때문에, ?.는 오히려 불필요한 안전장치가 될 수 있어요.

출처: unnecessary_null_aware_operator_on_extension_on_nullable

본문

nullable 타입에 대해 정의된 extension의 멤버에는 null-aware 연산자를 피하세요.

먼저 좋지 않은 예를 볼게요. int? 타입에 대한 extension E가 있고, 그 안에 m()이라는 메서드가 있어요. 호출할 때 i?.m()처럼 ?.를 쓰고 있는데,

extension E on int? {
  int m() => 1;
}

f(int? i) => i?.m();

사실 이 extension은 null이어도 동작하도록 정의됐기 때문에, i.m()처럼 그냥 일반 호출로 바꿔도 돼요.

extension E on int? {
  int m() => 1;
}

f(int? i) => i.m();

이렇게 하면 null-safe하면서도 더 단순한 코드가 돼요.

활성화하기

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

linter:
  rules:
    - unnecessary_null_aware_operator_on_extension_on_nullable

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

linter:
  rules:
    unnecessary_null_aware_operator_on_extension_on_nullable: true

더 알아보기

  • 이 규칙은 Dart 2.18에서 추가됐고, 현재 Stable(안정) 단계예요.
  • null-aware 연산자를 언제 써야 할지 더 알고 싶다면 avoid_null_checks_in_null_aware_branches나 Dart의 sound null safety 개념도 함께 살펴보면 도움이 돼요.