코딩라이브러리/Dart

[Dart] 변수 종류, 널(null) 변수 디폴트 처리

유니네 라이브러리 2024. 6. 4. 19:26

Dart에서는 변수를 선언하는 방법이 다양하며, 변수의 타입을 어떻게 지정하는지에 따라 다르게 동작한다.

또한, null 값을 허용할지 여부도 변수 선언 시 결정할 수 있다.

 

이번 포스트에서는 Dart 변수 선언 방식null 처리 방법을 정리해본다.

 

📌 Dart 변수 선언 방법

 

Dart의 변수 선언 방식은 3가지로 나뉜다.

1. var

2. dynamic

3. final & const

 

✅ var – 초기 값의 타입이 고정되는 변수

 

var 키워드로 선언된 변수는 처음 할당된 값의 타입으로 고정된다.

한 번 타입이 정해지면 다른 타입의 값을 저장할 수 없다.

void main() {
  var strName = "유니네 라이브러리";  
  print(strName); // 유니네 라이브러리

  // Error: A value of type 'int' can't be assigned to a variable of type 'String'.
  strName = 1234;  
  print(strName);
}

변수 타입이 String으로 고정되므로 int를 할당할 수 없다.

 

✅ dynamic – 타입이 자유롭게 변경되는 변수

dynamic 타입은 값이 변경될 때마다 타입이 달라질 수 있는 변수이다.

  • var와 달리, 다른 타입의 값을 자유롭게 할당할 수 있다.
void main() {
  dynamic strName = "유니네 라이브러리";
  print(strName); // 유니네 라이브러리

  strName = 1234;  
  print(strName); // 1234
}

문자열 → 숫자로 변경 가능 (오류 없음)

 

📌 final & const – 상수 선언하기

 

변수의 값이 변경되지 않도록 고정하려면 final 또는 const를 사용한다.

키워드 특징
final 런타임 상수 (프로그램 실행 중에 값이 정해짐)
const 빌드 타임 상수 (컴파일 시점에 값이 정해짐)

 

✅ final – 실행 중에 값이 결정되는 상수

 

final 변수는 프로그램이 실행될 때 값이 확정된다.

import 'dart:math';

void main() {
  final int rdnNum = Random().nextInt(10);
  print(rdnNum); // 실행할 때마다 다른 값 출력
}

실행할 때마다 Random().nextInt(10)의 결과가 달라진다.

 

✅ const – 컴파일 시점에서 값이 확정되는 상수

 

const 변수는 코드가 실행되기 전에(빌드 타임) 값이 결정되어야 한다.

void main() {
  // 정상 작동 (빌드 시점에서 값이 확정됨)
  const String strName = "유니네 라이브러리";
  print(strName); // 유니네 라이브러리

  // Error: Method invocation is not a constant expression.
  const int rdnNum = Random().nextInt(10);
  print(rdnNum);
}

Random().nextInt(10)은 실행 시점에서 결정되므로 const로 선언할 수 없다.

 

📌 Nullable & Non-Nullable 변수 처리 (null 허용 여부)

 

Dart에서는 null을 허용할지 여부를 변수 선언 시 결정할 수 있다.

  • null을 허용하려면 ?를 붙여야 한다.
  • 기본적으로 모든 변수는 null을 허용하지 않는다.

✅ null을 허용하는 (nullable) 변수

void main() {
  String? strName = "유니네 라이브러리";  
  print(strName); // 유니네 라이브러리

  strName = null;  
  print(strName); // null (오류 없음)
}

String?으로 선언하면 null을 저장할 수 있다.

 

✅ null을 허용하지 않는 (non-nullable) 변수

void main() {
  String notNullStr = "유니네 라이브러리";  
  print(notNullStr); // 유니네 라이브러리

  // Error: The value 'null' can't be assigned to a variable of type 'String'.
  notNullStr = null;
  print(notNullStr);
}

기본적으로 null을 허용하지 않기 때문에 오류 발생

 

📌 정리

변수 타입 특징 예제
var 초기 값의 타입이 고정됨 var name = "Dart";
dynamic 타입이 자유롭게 변경됨 dynamic value = 10; value = "Hello";
final 실행 중에 값이 결정됨 (런타임 상수) final int x = Random().nextInt(10);
const 컴파일 시점에서 값이 결정됨 (빌드 타임 상수) const double pi = 3.14;
String? null을 허용하는 문자열 변수 String? name = null;
String null을 허용하지 않는 문자열 변수 String name = "Dart";

 

🔗 Dart 학습에 참고한 문서

 

Must Have 코드팩토리의 플러터 프로그래밍 - 예스24

인프런 NO. 1 플러터 강사와 함께왕초보 실력을 현업 수준으로 끌어올리기저자는 왕초보 실력을 현업 수준으로 끌어올리기를 목표로 이 책을 썼습니다. 배운 이론을 곧바로 실무에 진짜 유용한

www.yes24.com