Dart에서는 null 관련 연산자로 크게 2가지가 있습니다.
?
! (Null check operator)
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();
}
}
}