728x90
반응형
다음 문서를 참조함
https://dart.dev/null-safety/understanding-null-safety
// Without null safety:
bool isEmpty(String string) => string.length == 0;
main() {
isEmpty(null);
}
위의 dart 코드를 실행하면 length메서드 호출에서 NoSuchMethodError 예외가 발생합니다.
NoSuchMethodError 는 런타임 시점에 존재하지 않는 메서드를 호출하는 경우에 발생합니다.
isEmpty()에 전달된 null은 length메서드를 호출할 수 없습니다.
( statically-typed languages like Dart에 반하여 ) 컴파일러가 에러를 발생시키지 않기 때문에
서버 응용프로그램과 달리 사용자의 장치에 직접적인 에러를 발생시킬 수 있습니다.
Null Safety는 이러한 실수를 방지하기 위해 만들어졌습니다.
만약 Null Safety를 사용하지 않으려면
pubspec.yaml 에서 sdk 최소 버전을 2.11.0으로 변경합니다.
environment:
# Turn off Null Safety (2.11.0)
sdk: ">=2.12.0 <3.0.0"
Dart 2.11.0 이후 부터
Dart에서 모든 변수는 기본적으로 Non-Nullable입니다.
null은 값의 부재를 가능하게 해주기때문에 아주 유용합니다.
Non-Nullable 변수에서 null을 처리하기 위해서 어떻게 해야할까요?
main() {
// String 타입 뒤에 '?'를 붙인다.
String? name = 'name';
name = null; // 정상
name.length; // 오류
String nickname = 'nickname';
nickname = null // 오류
if (name != null) {
name.isNotEmpty;
}
// Samething
name?.isNotEmpty;
}
String? 은 Non-Nullable 변수를 Nullable 변수로 변환합니다.
nullable 변수의 오류를 방지하기 위해 if 조건문으로 null을 판별할 수 있지만
위의 코드처럼 다른 표현식을 사용할 수도 있습니다.
반응형