Dart에서 변수 사용 방법에 대해 알아보겠습니다.
변수를 만드는 2가지 방법
dart에서는 변수를 var 키워드 또는 명시적으로 변수의 타입을 지정해서 사용합니다. 다른 타입의 변수는 서로 대입할 수 없습니다.
// 방법 1
void main() {
var name = "car";
name = "bus";
// [오류]
🚫 name = 1;
}
// 방법 2
void main() {
String name = "car";
name = "bus";
}
var를 사용하는 게 dart 스타일가이드의 권장 방식입니다.
함수나 메소드 내부에 지역변수를 선언할 때는 var를 사용하고 class에서 변수나 property를 선언할 때는 타입을 지정해 줍니다.
Dynamic 타입
여러 가지 타입을 가질 수 있는 변수에 쓰는 키워드입니다. 변수를 선언할 때 dynamic을 쓰거나 값을 지정하지 않으면 dynamic 타입을 가집니다.
void main() {
dynamic name;
var name2;
}
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이 될 수 없음)입니다.
void main() {
String? name = "eden";
name = null;
}
final 변수
var 대신 final로 변수를 만들게 되면 이 변수는 수정할 수 없게 됩니다. (딱 한 번만 설정될 수 있음) 자바스크립트의 const 랑 비슷합니다.
void main() {
final name = "pizza";
🚫name = "ham"; // 수정 불가
final String username = "eden";
🚫name = "eden2"; // 수정 불가
}
late 변수
초기 데이터 없이 먼저 변수를 생성하고 추후에 데이터를 넣을 때 주로 사용합니다. flutter로 data fecthing을 할 때 유용합니다.
late 변수를 만들고, API에 요청을 보낸 뒤에 API에서 값을 보내주면 그 응답 값을 late 변수에 넣어 사용할 수 있습니다.
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 가 되어야 합니다.
void main() {
// 컴파일 시점에 바뀌지 않는 값
const API_KEY = "********";
// 컴파일 시점에 바뀌는 값
final API = fetchAPI();
}
- const: 컴파일 시점에 바뀌지 않는 값 (상수)
- final: 컴파일 시점에 바뀌는 값 (API에서 받아온 값, 사용자 입력값)
'Language > Dart' 카테고리의 다른 글
[Dart] 클래스(Class) 사용 방법 (0) | 2023.05.26 |
---|---|
[Dart] 함수(Function) 사용 방법 (0) | 2023.05.22 |
[Dart] Data Types (0) | 2023.05.18 |
[Dart] Null Safety (0) | 2023.05.15 |
[Dart] 시작하기 (0) | 2023.05.08 |
IT 기술과 개발 내용을 포스팅하는 블로그
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!