반응형
다트는 Nullable type을 제공해준다. 초기화하지 않을 경우 값은 null이 된다.
자바에서는 기본타입(int, double..) 등이 null이 될 수 없지만, 다트에서는 nullable이기만 한다면 int 같은 기본타입도 널이 가능하다. ⇒ Object로 취급하기 때문.
int? lineCount;
assert(lineCount == null);
non-nullable일 경우, 반드시 initialize를 해주어야 한다.
int lineCount = 0;
그런데, 초기화를 반드시 선언부에서 할 필요는 없고 사용 시점에서 non-null이면 된다.
따라서 아래와 같은 코드도 유효하다.
int lineCount;
if (weLikeToCount) {
lineCount = countLines();
} else {
lineCount = 0;
}
print(lineCount);
근데 이게 안되는 경우가 있다.
Top-level 변수와 인스턴스 변수는 일 때는 다트가 이를 감지할 수 없다고 한다.
예를 들면 다음과 같다.
String description;
void main() {
description = 'Feijoada!';
print(description);
}
위의 경우, description 변수가 Top-level에 존재하기 때문에 invalid하다. 위의 코드는 컴파일 에러가 발생한다.
그럴 때 late키워드를 사용하여 지연 초기화(lazy initializing)를 해주면 된다.
지연 초기화는 변수가 사용되는 시점 이전에 초기화가 될 것이라고 단언해주는 것을 의미한다.
아래 코드는 valid하다.
late String description;
void main() {
description = 'Feijoada!';
print(description);
}
다트 언어 공식문서 : https://dart.dev/guides/language/language-tour
댓글