[Dart] Null Safety

Null Safety는 개발자가 null 값을 참조할 수 없게 하는 것입니다.

다음 코드를 봅시다.

1
2
3
4
5
6
bool isEmpty(String string) => string.length == 0;

main(){
// [오류]
isEmpty(🚫null);
}

다음과 같은 코드는 어떻게 실행될까요?

정답은 NoSuchMethodError를 실행합니다. 왜 이렇게 실행될까요?
바로 String을 보내야 할 곳에 null을 보냈기 때문입니다.
null 에는 length 라는 속성이 없기 때문이기도 합니다.

이와 같은 에러는 컴파일러에서 잡을 수 있는 에러가 아닙니다.
이런 상황이 발생하지 않도록 null 를 삭제하기에는 null 값은 유용합니다.

그럼 어떻게 null 값을 참조하는 것을 dart 는 어떻게 보호할까요?
dart에서는 변수가 null이 될 수 있음을 명확히 표시해야 합니다.

다음 코드를 봅시다.

1
2
3
4
void main() {
String name = "eden";
🚫name = null;
}

이 코드는 에러가 납니다. name 이 null 값을 참조할 수 있다고 알려주지 않고 null 값을 참조하기 때문입니다.

그러면 다음 코드를 봅시다.

1
2
3
4
void main() {
String? name = "eden";
name = null;
}

이 코드는 에러가 나지 않습니다. 차이점이 뭘까요? 바로 변수 뒤에 ?를 사용해 이 변수에는 null 이 참조될 수 있음을 알려주는 것입니다.

만약 ?를 붙인 변수는 이 변수가 null 인지 아닌지 확인해야 합니다.

1
2
3
4
5
6
7
8
void main() {
String? name = "eden";
name = null;

if (name != null) {
print(name.length);
}
}
Share