2021-12-27
1. 정의
Null safety 란 특정한 변수에 접근했을 때 해당 변수에 값이 할당되어 있지 않아 예상치 못한 null 에러가 발생하는 것을 말하는 것이다. 해당 에러는 보통 존재하지 않는 값에 접근하여 발생하는 에러로 " null dereference error " 라고 불려진다.
Null safety를 지원하는 언어는 Dart 외에도 여러 가지가 있으면 예를 들자면 코틀린이 있다.
2. 문법
그러면 어떤 식으로 사용되는지 확인해 보자. 아래는 공식 문서에서 제공하는 예제 코드이다. 지정한 변수 타입 앞에? 를 사용함으로써 해당 변수는 null을 할당할 수 있게 정의할 수 있다.
String? name // Nullable type. Can be `null` or string.
String name // Non-nullable type. Cannot be `null` but can be string.
두 번째 코드는 런타임 단계에서의 오류로 산정되며, 첫 번째 변수는 분석단계의 오류로 변경이 됩니다. 분석단계의 오류로 산정되기 때문에 Dart 공식 문서에서는 안전한 앱을 위해서는
- Not initialized with a non-null value.
- Assigned a null value.
위의 두 가지 사항을 항상 체크할 수 있는 코드를 작성하라고 나와 있습니다.
3. Default Value
Null safety로 지정된 코드는 Default Value 가 null로 할당된다. 때문에 이를 핸들링할 수 있는 코드가 들어가는 것이 권장된다.
void main() {
// int strCount;
// assert(strCount == null); //선언값 null이 맞아 테스트 실패
// Error compiling to JavaScript:
// compile: lib/main.dart:4:10:
// Error: Non-nullable variable 'strCount' must be assigned before it can be used.
// assert(strCount == null); //선언값 null이 맞아 테스트 실패
// ^^^^^^^^
// Error: Compilation failed.
int? lineCount; //값을 할당하지 않아 null 이 할당된
assert(lineCount == null); //선언값 null이 맞아 테스트 성공
if(lineCount == null){
lineCount = 0;
}
print(lineCount); // 0
print("===finish===");
}
4. 참고링크
https://dart.dev/language/variables
메인 이미지 출처 : 사진: Unsplash의Stephan Louis