본문 바로가기



Dart 14. 널 안전성 변수선언 {유목민 알폰스}



Dart는 널 안전성을 지원하는 프로그램입니다. 널 안전성을 지원하지 않는 프로그램들은 객체에 null값을 대입할 수 있으므로 NullPointerException발생시키는 빈도가 높습니다.

 

Dart에서는 기본적으로 변수에 null값을 허용하지 않기때문에 실행되기 이전에 미리 에러를 발생시켜서

null안정성을 지원해주고 있습니다.

 

기본은 null값을 대입하지 못합니다. 하지만 변수 선언시 물음표? 옵션을 붙여주면 null을 허용하게 됩니다.

즉 널허용 변수와 널 불허 변수를 모두 생성할 수 있습니다.

 

int1은 null을 담을수담을 수 있었고 int2는 null을 담을 수 없기 때문에 붉게 표시되고 에러가 나는 것을 볼 수 있습니다.

int var1 = null; //<=== 에러
int? var2 = null; //<=== 허용됨

//-------------------------

int var1;
print(var1 + 50); //<===== 에러 var1이 초기화되지 않았서 에러

//-------------------------

int var1 = 0;
print(var1 + 50); //<===== 정상동작

//-------------------------

int var1;
var1 = 0;
print(var1 + 50); //<===== 정상동작

 

main(){

  int var1;
  int? int1 = 10;
  int int2;

  int1 = 12;
  int2 = 13;

  print(var1); //<---- null을 허용하지 않고 초기화가 되지 않았기 때문에 에러
}
main(){

  int var1;
  int? int1 = 10;
  int int2;

  int1 = 12;
  int2 = 13;

  print(var1); //<---- null을 허용하지 않고 초기화가 되지 않았기 때문에 에러
}

 

List데이터를 인덱스로 접근했을때 null반환처리

main(){
	List<int>? rs = [1, 2, 3];
    print('rs[0] : ${list?[0]}');
    list = null;
    print('list[0] : ${list?[0]}');
}

결과)
rs[0] : 1
list[0] : null

 

null일때는 값을 대입하지 않기

main(){
  int? var1;
  var1 ??= 10;
  print('var1 : $var1');
  var1 ??= null; //<-------- null은 대입해도 실제로는 들어가지 않습니다.
  print('var1 : $var1');
}

결과)
var1 : 10
var1 : 10

 

 

By. 유목민 알폰스 - Nomadic Alphonse