Nullable 을 알아보기 앞서 null 이란 아직 값이 없다는 뜻의 특별한 값이다.
Dart 언어 에서는 null-safety가 기본이라서, 명시적으로 nullable로 선언하지 않는다면 null을 넣을 수 없다.
위와 같이 오류가 발생하게된다.
null을 선언하기 위해서는
위에 있는 String 타입의 name에 null을 담고 싶다면 String 뒤에 ?를 붙여 주면 "null 일 수도 있어" 라는 의미를 가지게 된다.
String? name;
nullable 변수또한 그냥 쓰면 에러가 나게된다.
그래서 이걸 처리 하기 위해서는
1. null 체크 먼저하기.
void main() {
String? name;
if (name != null) {
print(name.length);
}
}
name이 null이 아니라면 출력하는 함수 시행하기!
2. null-aware operator(?.)
void main() {
String? name;
if (name != null) {
print(name.length);
}
print(name?.length);
}
null
?. 을 사용하게 되면 name 이 null값일 때 null을 출력하게 만든다.
3. default 값 주기(??)
String safeName = name ?? "김옥윤";
print(safeName); // ??는 앞의 값이 null이면 뒤의 값으로 대체해줌
김옥윤
만약에 name이 null이라면 오른쪽 값을 넣어달라는 뜻!
4. !(null이 아님 단언 연산자)
void main() {
String? name;
if (name != null) {
print(name.length);
}
print(name?.length);
print(name!.length);
}
강제로 null이 아님을 선언하는 연산자이다.
-
데이터의 부재 또는 미결정 상태 표현:특정 속성이나 값이 아직 결정되지 않았거나, 데이터가 의도적으로 비어 있어야 하는 상황을 명확하게 나타낼 수 있다.
-
데이터베이스와의 연동:데이터베이스에서 null 값을 가지는 컬럼을 C# 같은 언어에서 다룰 때, Nullable 타입을 사용하면 해당 컬럼의 null 값을 자연스럽게 표현하고 처리할 수 있다.
-
코드의 명확성 향상:변수나 매개변수에 null이 허용될 수 있음을 명시함으로써, 코드를 읽는 다른 개발자가 해당 값의 상태를 더 쉽게 이해할 수 있게 한다.
-
Null 관련 오류 감소:Nullable 타입을 통해 변수의 null 여부를 미리 검사하고 처리할 수 있어, NullPointerException(널 참조 예외)과 같은 런타임 오류를 줄일 수 있다.
-
특정 데이터 타입에 대한 유연성 부여:int나 bool과 같이 기본적으로 null 값을 허용하지 않는 값 타입에 int? 나 `bool?`과 같은 Nullable 형식을 적용하여 null을 가질 수 있도록 확장한다.
처음에 강의만 들었을 때 null이라는 의미없는 값을 왜 쓰는 걸까 라는 생각이 들었는데 직접 찾아보고 나서야 중요하지 않은게 아니구나 라는걸 알 수 있었다. 강의를 들으면서도 그 이유를 명확하게 알지 못하겠어서 답답했는데 이렇게 해소 되지 않는 부분을 직접 찾아보며 해결 할 수 있도록 해야겠다.