본문 바로가기
Frontend, Client/Flutter

[Flutter] 플러터 - 다트(Dart): Nullable 변수와 late 변수의 이해

by ggyongi 2022. 12. 9.
반응형

다트는 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

 

비전공자 네카라 신입 취업 노하우

시행착오 끝에 얻어낸 취업 노하우가 모두 담긴 전자책!

kmong.com

댓글