Null Safety 는 개발자가 Null 로 인한 에러를 피할 수 있도록 도와주는 dart의 기능이다.
- 변수에 null 값을 할당하는 것을 엄격하게 제한한다.
- 변수를 nullable 또는 non-null 로 선언할 수 있다.
- Not-null 변수는 null을 가질 수 없으며, Null 변수는 null만을 가질 수 있다.
1. Null Check 연산자 (?)
void main() { String name = "jhon"; // 이 name 이라는 변수는 null아닌 문자열만 가질 수 있다. int age = 30 ; // null 이 아닌 정수값만 가질 수 있다. String? nullableName ; // 이 변수는 문자열 또는 null 값을 가질 수 있다. int? nullableInt ; // 이 변수는 정수값 또는 null 값을 가질 수 있다. }
타입 뒤에 ? 가 없다면 null 값을 가질 수 없지만, ? 가 있다면 null 값을 가질 수 있다.
2. Null 대체 연산자 (??)
(??) 연산자는 값이 null 인 경우 대체 값을 지정할 수 있다.
void main() { String? name = getName(); String displayName = name ?? "Unkown"; // name 값이 null 이면 Unkown 을 출력한다. print("displayName : $displayName"); } String? getName() { return null; }
3. Null 억제 연산자 (!)
(!) 연산자는 해당 값이 null 이 아님을 나타낸다. 개발자가 해당 값이 null 이 아님을 확신할 때, 예외를 발생시키지 않기를 원할 때 유용하다. 만약 해당 값이 null이 된다면 오류가 발생하게 된다.
void main() { String? name = "john"; String? nameNotNullable = name!; print("name:$name"); }
void main() { String? name = null; String? nameNotNullable = name!; print("name:$name"); }
4. late 키워드
late 키워드는 변수가 null이 아닌 경우, 변수의 초기화를 미루고, 변수가 실제로 사용되기 전에 초기화된다.
1. 변수를 정의할 때 초기화할 수 있는 시점이나 방법이 없는 경우
2. 변수를 생성자나 함수에서 나중에 초기화해야 하는 경우
3. 변수를 사용하기 전에 null 여부를 확인하거나 예외 처리를 할 필요가 없는 경우
사용한다.
class MyClass { late String name; // 변수를 선언한 시점에 초기화되지 않음. MyClass() { name = "홍길동"; // 변수 초기화를 나중에 함. } void printString() { print("name : $name"); } } void main() { final myObject = MyClass(); myObject.printString(); }
Share article