Flutter - DART 문법(Null Safety)

박선규's avatar
Apr 09, 2024
Flutter - DART 문법(Null Safety)
Contents
Null Safety

Null 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이 아니면 호출 }
notion image
 

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 여부를 확인하거나 예외 처리를 할 필요가 없는 경우
notion image
 
notion image
notion image
Share article

p4rksk