0. 의미
1) 모든 변수는 null이 될 수 없으며, non-nullable 변수에는 null값을 할당할 수 없다.
2) non-nullable 변수를 위한 null check가 필요 없음
3) Class 내의 변수는 반드시 선언과 동시에 초기화를 시켜야 한다.
class Person {
String name;
String nameChange(String name) {
this.name = name;
return name.toUpperCase();
}
}
void main() {
Person p = Person();
print(p.nameChange(p.name));
}
/// nullSafety
class Person {
String? name; // null값이 할당될 수 있다는 것
// late String name; // 생성자에서 생성할 때 변수 값 할당된다면 late 써도 된다.
String nameChange(String name) {
this.name = name;
return name.toUpperCase();
}
}
void main() {
Person p = Person();
print(p.nameChange(p.name));
}
/// 항상 non nullable 값을 가질 것이라는 예시
void main() {
int x = 50;
int ? y;
if (x>0) {
y = x;
}
int value = y!;
print(value);
}
- How the late keyword affects variables and initialization.
- When to add ? or ! to indicate nullability or non-nullability.
1. Null Safety
Null Safety 란 null 에 의한 NPE(Null Pointer Exception) 를 runtime 이 아닌 edit-time 에 체크하겠다는 의미이다.
first, second 변수 모두 int 타입으로 선언되어 있다. 하지만 first은 int 로 선언되어 있으며 second 는 int? 로 선언되어 있다. 모두 정수 데이터를 저장하기 위한 타입으로 선언된건 맞지만 ? 가 있고 없고의 차이는 Null Safety 에서 큰 차이가 있다.
int 로 선언되면 이 변수에는 null 대입이 불가능한 Non-Nullable 로 선언된 것이며 int? 로 선언하면 이 변수에는 null 대입이 가능한 Nullable 로 선언된 것이다.
int first=10;
int? second=10;
testMethod() {
first=null;//error
second=null;
}
2. The null assertion operator (!)
If you’re sure that an expression with a nullable type isn’t null, you can use a null assertion operator (!) to make Dart treat it as non-nullable. By adding ! just after the expression, you tell Dart that the value won’t be null, and that it’s safe to assign it to a non-nullable variable.
If you’re wrong, Dart throws an exception at run-time. This makes the ! operator unsafe, so don’t use it unless you’re very sure that the expression isn’t null.
Exercise: Nullable type parameters for generics ->차례
https://dart.dev/codelabs/null-safety
출처: https://kkangsnote.tistory.com/98 [깡샘의 토마토:티스토리]
3. setState()
- setState() 함수 안에서의 호출은 State 에서 무언가 변경된 사항이 있음을 Flutter Framework 에 알려주는 역할이다.
- 이로 인해 UI 에 변경된 값이 반영될 수 있도록 build 메소드가 다시 실행된다.
- setState() -> State에서 변경이 일어남 -> build가 작동함 -> UI가 변경됨
https://dkswnkk.tistory.com/42
https://www.youtube.com/watch?v=QP0THWoDeag
'App > Flutter' 카테고리의 다른 글
Dio & Interceptor (0) | 2022.09.13 |
---|---|
Udemy - Section4. Widgets,Styling, Adding Logic (0) | 2022.09.06 |
pubspec.yaml, analysis_options.yaml (0) | 2022.09.02 |
FireBase connection Error (0) | 2022.08.31 |
Flutter 기본 위젯 4가지 & 레이아웃 & stateful 위젯 vs. stateless 위젯 (0) | 2022.08.26 |