nullable 값을 non-nullable 타입으로 캐스팅하지 말아 주세요

nullable 값을 non-nullable 타입으로 캐스팅하지 말아 주세요

nullable 값(T?)을 non-nullable 타입으로 곧바로 캐스팅(as)하면 null 검사를 건너뛰게 되는데, 대부분 의도한 동작이 아니에요. 명시적으로 null이 아님을 알려 주는 게 좋아요.

출처: cast_nullable_to_non_nullable

본문

nullable 값은 non-nullable 타입으로 캐스팅하지 않는 걸 권장해요. 이렇게 하면 null 검사가 숨겨지는데, 대부분의 경우 기대한 동작이 아니거든요.

BAD 예시:

class A {}
class B extends A {}

A? a;
var v = a as B;
var v = a as A;

GOOD 예시:

class A {}
class B extends A {}

A? a;
var v = a! as B;
var v = a!;

이렇게 ! 연산자로 null이 아님을 명시적으로 밝히면 캐스팅하기 전에 null 검사가 제대로 드러나요.

활성화하기

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

linter:
  rules:
    - cast_nullable_to_non_nullable

만약 linter 규칙을 YAML 맵 문법으로 설정한다면 linter > rules 아래에 cast_nullable_to_non_nullable: true라고 적어 주면 돼요.

linter:
  rules:
    cast_nullable_to_non_nullable: true

더 알아보기

  • Linter rules 목록에서 다른 규칙도 살펴볼 수 있어요.
  • null을 안전하게 다루는 방법은 Null safety 문서에서 확인해 보세요.