App/Flutter

Null Safety, setState()

prden 2022. 9. 12. 21:48

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);
  }

https://www.youtube.com/watch?v=QP0THWoDeag

  • 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

 

Null safety codelab

Learn about and practice writing null-safe code in DartPad!

dart.dev

출처: https://kkangsnote.tistory.com/98 [깡샘의 토마토:티스토리]

 

3. setState()

  • setState() 함수 안에서의 호출은 State 에서 무언가 변경된 사항이 있음을 Flutter Framework 에 알려주는 역할이다.
  • 이로 인해 UI 에 변경된 값이 반영될 수 있도록 build 메소드가 다시 실행된다.
  • setState() -> State에서 변경이 일어남 -> build가 작동함 -> UI가 변경됨

https://dkswnkk.tistory.com/42

 

[flutter] setState 란?

setState() 이란? setState() 함수 안에서의 호출은 State 에서 무언가 변경된 사항이 있음을 Flutter Framework 에 알려주는 역할이다. 이로 인해 UI 에 변경된 값이 반영될 수 있도록 build 메소드가 다시 실행

dkswnkk.tistory.com

 

 

https://www.youtube.com/watch?v=QP0THWoDeag