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 개념도 함께 살펴보면 도움이 돼요.