본문 바로가기
Dart (Flutter)

[Dart] Variables

by llHoYall 2023. 1. 30.

이번 포스팅에서는 변수와 상수에 대해 가볍게 살펴보겠습니다.

다른 언어 경험이 있으시면 쉽게 사용하실 수 있을 거에요.

Variables

Dart에서 변수를 선언할 때는 var keyword를 사용하거나 type을 명시해서 선언합니다.

var keyword를 사용하게 되면, 타입 추론을 통해 타입이 설정됩니다.

Local 변수의 경우 일반적으로 var를 이용한 선언이 사용됩니다.

void main() {	
  var name = 'HoYa';
  int age = 18;
}

위의 예제에서 nameString type으로 추론이 됩니다.

 

변수를 선언할 때는 기본적으로 초기값이 필요합니다.

만약, 초기값 없이 var keyword를 사용하여 선언한다면 null이 됩니다.

void main() {
  var test;
  print(test);  // null
}

하지만, Dart에서는 초기화되지 않은 변수의 선언 시 type annotation이 권고됩니다.

모든 것이 object인 Dart 언어에서 null object는 다른 type object의 값이 될 수 없습니다.

따라서, 이 경우 ? 기호를 사용하여 명시적으로 nullable임을 선언해야 합니다.

void main() {
  int? num;
  print(num);  // null
}

다만 사용 전에 값이 할당된다면, 더이상 에러가 발생하지 않습니다.

void main() {
  int num;
  num = 7;
  print(num); // 7
}

 

Top-level 변수나, class 변수의 경우 초기화가 늦춰져 사용 시 초기화 코드가 호출됩니다.

Constants

상수는 기본적으로 final keyword를 사용하여 선언합니다.

final name = 'HoYa';
final int age = 18;

 

또다른 방법으로 const keyword를 사용하는 방법이 있는데, 이는 compile-time 상수를 만듭니다.

즉, compile 시점에 값을 알 수 있어야 합니다.

다시 말하면, run-time에 외부 API등을 통해 값을 알 수 있는 경우 사용할 수 없습니다.

const name = 'HoYa';
const int age = 18;

 

Class의 instance 상수는 final은 가능하지만, const는 불가능합니다.

오직 static const만 가능합니다.

class Person {
  final String name = 'HoYa';
  // const int age = 18; // Error!
}

 

final object는 변할 수 없지만, 내부 요소들은 변할 수 있습니다.

반면, const object는 내부 요소들도 변할 수 없습니다.

void main() {
  final List<int> nums1 = [1, 2, 3];
  // nums1 = [4, 5, 6]; // Error!
  nums1[0] = 4;
  
  const List<int> nums2 = [1, 2, 3];
  // nums2 = [4, 5, 6]; // Error!
  // nums2[0] = 4; // Run-time Error!
}

late

late를 사용하여 변수를 선언하면, 명시적으로 초기값 없이 변수를 선언할 수 있게 해줍니다.

즉, 초기화 시점을 해당 변수의 사용 직전으로 옮겨줍니다.

또한, late와 함께 초기값을 전달할 경우 해당 초기화는 사용 직전에 수행이 됩니다.

late var name;
late final int age;

Wrap Up

이번에는 Dart의 변수 및 상수에 대해 살펴보았습니다.

특별히 독자적인 개념은 없어서 다른 언어의 사용 경험이 있다면 쉽게 사용하실 수 있을거에요.

'Dart (Flutter)' 카테고리의 다른 글

[Dart] Operators  (0) 2023.02.02
[Dart] Data Types  (0) 2023.02.01
[Flutter] Desktop Application using Flutter  (0) 2023.01.25
[Flutter] Animation  (0) 2022.04.03
[Flutter] File Handling  (0) 2022.04.02

댓글