[Dart] null check를 했음에도 null check operator ! 를 사용해야 하는 경우

Minji Jeong·2024년 6월 7일
0

Flutter/Dart

목록 보기
9/13
post-thumbnail

Dart에서는 null 관련 연산자로 크게 2가지가 있습니다.

?

  • nullable 변수 선언 및 접근 시 사용합니다. 해당 연산자가 사용된 변수는 null 값을 가질 수 있습니다.

! (Null check operator)

  • non-null 타입 변수에 nullable 타입 변수를 할당해야 할 때 사용합니다. 해당 연산자가 사용된 nullable 변수는 개발자 본인이 변수가 null값이 할당되지 않았음을 보장할 수 있을 때만 사용해야 합니다. 그렇지 않으면 런타임에 NPE 가 발생합니다.

Dart를 쓰다보면 간혹가다 아래처럼 if 문을 통해 nullable 변수에 대한 null 가능성 여부를 체크해줌에도 무조건 !를 사용해야 하는 경우가 있습니다.

class Test extends StatelessWidget {
  String? testStr;
  
  
  Widget build(BuildContext context) {
    if (testStr != null) {
      return Text(
        testStr!
      );
    } else {
      return Container();
    }
  }
}

이유는 testStr이 클래스의 멤버변수라서 if (testStr != null) 문이 실행되는 도중 testStr에 null값이 들어올 수도 있기 때문입니다. Dart 컴파일러는 혹시 모를 예외 상황을 방지하기 위해 이같이 smart cast를 허용하지 않습니다.

따라서 이 부분이 거슬리면 ?? 연산자를 사용해서 testStr가 null인 경우 default 값을 할당하는 방식으로 해결할 수 있습니다. 물론 개발자 본인이 해당 변수가 null이 될 수 없음을 확신한다면 !를 사용해도 괜찮습니다.

class Test extends StatelessWidget {
  String? testStr;
  
  
  Widget build(BuildContext context) {
    if (testStr != null) {
      return Text(
        testStr ?? ''
      );
    } else {
      return Container();
    }
  }
}
profile
Software Engineer

0개의 댓글