티스토리 뷰

반응형

다트는 엄격한 널 안전성(sound null safety)을 강제한다. 널 안전성은 널(null)로 설정된 변수를 의도치 않게 접근하는 것에 비롯되는 오류를 방지한다.

 

예를 들어, 메서드가 정수를 기대하지만 널을 받는 경우, 앱이 런타임 오류를 일으킬 수 있다. 이러한 타입의 오류는 널 역참조 오류(null dereference error)라고 하며, 디버깅하기 어렵다.

 

엄격한 널 안전성에서는 모든 변수에 값이 필요하다. 이는 다트가 모든 변수를 널이 될 수 없다고 간주한다는 의미이다. 선언된 타입의 값만 할당할 수 있다. 기본 타입 변수에는 절대 널 값을 할당할 수 없다. 변수 타입이 널 값을 가질 수 있음을 명시하려면 타임 주석 뒤에 ?를 추가하자. (예: int? i) 이러한 널-가능 타입은 널 또는 정의된 타입의 값을 가질 수 있다.

 

엄격한 널 안전성은 잠재적인 런타임 오류를 편집 시간 분석 오류로 변경한다. 널 안전성을 사용하면 다트 분석기와 컴파일러는 널-불가능 변수에 대해 다음과 같은 경우에 알려준다.

  • 널이 아닌 값으로 초기화되지 않는 경우
  • 널 값을 할당하는 경우

이러한 체크를 통해 앱을 배포하기 전에 오류를 수정할 수 있다.

 

 

 

예제를 통한 소개

널 안전성을 사용하면 다음 코드의 변수는 모두 널이 될 수 없다.

// 널 안정성을 사용하면, 이 변수들은 절대 null이 될 수 없습니다.
var i = 42; // int로 추론됩니다.
String name = getFileName();
final b = Foo();

 

변수가 널 값을 가질 수 있음을 표시하려면 타입 선언 시 ?를 추가하기만 하면 된다.

int? aNullableInt = null;
int? otherNullableInt;  // 널-가능은 선언시 초기화를 하지 않으면 자동으로 null이 된다.

 

 

반응형
댓글
공지사항