
Contents
Null SafetyNull Safety
컴파일 시점에 변수가 null 값을 가질 수 있는지 여부를 체크해서 런타임에서 발생할 수 있는 null 관련 오류를 방지한다.
Null 오류 막기
class Dog{ // 변수타입뒤에 ?를 붙인다.
String? name;
int? age;
String? color;
int? thirsty;
Dog();
}
메모리에 뜰 때 값이 할 당이 안됐으므로 null 값으로 들어가니 오류가 뜨는데
이것을 방지하기 위해 ?를쓴다. 그러나 무조건 쓰지말고 null을 허용하는지 안하는지 봐야한다.
class Dog{
String name;
int age; // 기본값 0
String? color;// new 될때 받기
int thirsty; // 기본값 0
Dog(this.name, this.age, this.thirsty);
}
void main(){
Dog d1 = Dog();
class Dog {
String name;
int age; // 기본값 0
String color; // new될때 받기
int thirsty; // 기본값 0
Dog(this.name, this.age, this.color, this.thirsty);
//오버로드를 지원안해서 생성자 이름을 다르게 만들어야 된다.
Dog.copy(String name, int age, String color, int thirsty) ://객체 복사 할때 사용
this.name = name,
this.age = age,
this.color = color,
this.thirsty = thirsty;
}
void main(){
Dog d1 = Dog("토토", 0, "하얀색", 0);
}
중괄호 있는것 (선택적 매개변수)
생성자의 순서대로 값을 안넣어도된다.
키 값이 있기 때문에 실수 할 확률이 줄어든다.
required를 붙이면 무조건 new 할때 값을 넣어야한다.
class User {
int? id;
String username;
String password;
String? profieUrl;
User({this.id, required this.username, required this.password, this.profieUrl});
}
void main() {
User u1= User(username: "ssar", password: "1234");
}
Null Chck연산자
타입 뒤에 ? 가 없다면 null값을 가질 수 없다 그러나 ?가 있다면 null 값을 가질 수 있다.
void main() {
String? username = "ssar"; //null일수도 아닐 수 도 있을 때
print(username?.contains("s")); //null이면 호출하지말고 null이 아니면 호출
}

Null 대체 연산자
(??)연산자의 경우 값이 null일 경우에 대체 값을 지정 할 수 있다.
void main() {
String? name = getName();
String displayName = name ?? "Unkown"; // name 값이 null 이면 Unkown 을 출력한다.
print("displayName : $displayName");
}
String? getName() {
return null;
}
Null 강제 연산자
! 연산자의 경우 해당 값이 null이 아님을 나타낸다.
개발자가 해당 값이 null이 아님을 확신 할 때에 예외를 발생시키지 않기를 원할 때 쓰인다.
만약 해당 값이 null일 경우 오류가 발생하게 된다.
void main() {
String? username = "ssar"; //null일수도 아닐 수 도 있을 때
print(username!.length); //!는 옵셔널의 .get 같은거다 100퍼센트 값이 있을 때 쓴다.
}
Late
타이밍상 조금 있다가 값을 받을 경우에 late를 건다.
ex) 통신 할 때 username과 password는 한번에 받는데 두번째 통신때 email을 받으려 할 때
1. 변수를 정의할 때 초기화할 수 있는 시점이나 방법이 없는 경우
2. 변수를 생성자나 함수에서 나중에 초기화해야 하는 경우
3. 변수를 사용하기 전에 null 여부를 확인하거나 예외 처리를 할 필요가 없는 경우



Share article