[Dart] 변수(Variable) 사용 방법

Dart에서 변수 사용 방법에 대해 알아보겠습니다.

변수를 만드는 2가지 방법

dart에서는 변수를 var 키워드 또는 명시적으로 변수의 타입을 지정해서 사용합니다. 다른 타입의 변수는 서로 대입할 수 없습니다.

1
2
3
4
5
6
7
// 방법 1
void main() {
var name = "car";
name = "bus";
// [오류]
🚫 name = 1;
}
1
2
3
4
5
// 방법 2
void main() {
String name = "car";
name = "bus";
}

var를 사용하는 게 dart 스타일가이드의 권장 방식입니다.

함수나 메소드 내부에 지역변수를 선언할 때는 var를 사용하고 class에서 변수나 property를 선언할 때는 타입을 지정해 줍니다.

Dynamic 타입

여러 가지 타입을 가질 수 있는 변수에 쓰는 키워드입니다. 변수를 선언할 때 dynamic을 쓰거나 값을 지정하지 않으면 dynamic 타입을 가집니다.

1
2
3
4
void main() {
dynamic name;
var name2;
}
1
2
3
4
5
6
void main() {
var name;
name = 'car';
name = 1;
name = true;
}

dynamic 타입은 언제 사용될까?

  • 해당 변수의 타입을 알 수 없을 때 주로 사용합니다. 예를 들어 json을 작업할 경우입니다.
  • 하지만 dynamic 타입은 다양한 타입을 가질 수 있기 때문에 정말 필요할 때만 사용해야 합니다. (위험 방지)

Null Safety

null safety는 개발자가 null 값을 참조할 수 없도록 하는 것입니다.
String 뒤에 ?를 붙여줌으로써 name 이 String 또는 null 이 될 수 있다고 명시해 준 것입니다. 기본적으로 모든 변수는 non-nullable(null이 될 수 없음)입니다.

1
2
3
4
void main() {
String? name = "eden";
name = null;
}

final 변수

var 대신 final로 변수를 만들게 되면 이 변수는 수정할 수 없게 됩니다. (딱 한 번만 설정될 수 있음) 자바스크립트의 const 랑 비슷합니다.

1
2
3
4
5
6
7
void main() {
final name = "pizza";
🚫name = "ham"; // 수정 불가

final String username = "eden";
🚫name = "eden2"; // 수정 불가
}

late 변수

초기 데이터 없이 먼저 변수를 생성하고 추후에 데이터를 넣을 때 주로 사용합니다. flutter로 data fecthing을 할 때 유용합니다.

late 변수를 만들고, API에 요청을 보낸 뒤에 API에서 값을 보내주면 그 응답 값을 late 변수에 넣어 사용할 수 있습니다.

1
2
3
4
5
6
7
8
9
void main() {
late final String name;
🚫print(name); // 값을 넣기 전에는 name 변수에 접근 불가

// do something, go to api
name = 'api';
// 한번만 할당해 줄 수 있음
🚫name = 'test';
}

const 변수

dart에서 const는 compile-time constant를 만들어줍니다. const는 컴파일할 때 알고 있는 값을 사용해야 합니다.

만약 어떤 값인지 모르고, 그 값이 API로부터 오거나 사용자가 화면에서 입력해야 하는 값이라면 그건 const가 아닌 final이나 var가 되어야 합니다.

1
2
3
4
5
6
7
void main() {
// 컴파일 시점에 바뀌지 않는 값
const API_KEY = "********";

// 컴파일 시점에 바뀌는 값
final API = fetchAPI();
}
  • const: 컴파일 시점에 바뀌지 않는 값 (상수)
  • final: 컴파일 시점에 바뀌는 값 (API에서 받아온 값, 사용자 입력값)
Share