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
'코딩라이브러리 > Dart' 카테고리의 다른 글
[Dart] for, while 반복문 (with 백준 2446, 2522) (0) | 2024.07.18 |
---|---|
[Dart] if, swich 조건문 (with 백준 1330) (0) | 2024.06.18 |
dart 은(는) 내부 또는 외부 명령, 실행할 수 있는 프로그램, 또는 배치파일이 아닙니다 (with 안드로이드 스튜디오) (0) | 2024.06.12 |
[Dart] 코딩 연습 입출력 코드 방법 (0) | 2024.06.10 |
Dart 주석 처리 (2) | 2024.06.03 |