var
- 변수 선언 시 var(아무타입)을 쓰거나 넣어줄 데이터의 타입을 명시할 수 있다.
- 위 방식들은 데이터의 타입을 그대로 한다면 변수 값을 업데이트할 수 있다.
void main() {
// 함수나 메소드 내부에서 지역변수 선언시
var name1='수수';
// 클래스에서 변수나 property 선언시
String name2='수수';
}
dynamic: 여러 타입을 가질 수 있는 변수에 쓰는 키워드
→ 인터넷에서 어떤 데이터를 받을 때 데이터의 타입을 모른다면 아주 유용
void main() {
dynamic name;
name='12';
name=12;
name=true;
if(name is String){
//String처리
}
if(name is int){
//정수처리
}
}
null safety
- 개발자가 null값을 참조할 수 없게 만듦 (null값 참조→런타임 에러)
- 다트에서의 null safety는 어떤 변수 or 데이터가 null이 될 수 있음을 명시하는 것
그러나 가끔 어떤 변수가 null이 되길 원하거나 null값 자체를 나타낼 때가 있다.
→ 데이터 타입 뒤에 ?를 붙인다.
void main(){
String? nico='nico'; //nico가 null이 가능
nico=null;
if (nico!=null){
nico.isNotEmpty;
}
nico?.isNotEmpty //nico가 null이 아니면 뒤 실행
}
final: 한번 정의된 변수를 수정할 수 없게 만드는 키워드 (js의 const)
late: final이나 var 앞에 붙여줄 수 있는 수식어
- 초기 데이터없이 변수 선언할 수 있게 해줌 (아직 어떤 값인지 몰라)
- 필요한 데이터가 아직 없을 때 이렇게 선언하면 유용함
- 변수에 데이터를 넣고 난 뒤에만 사용 가능 (null safety)
- data fetching때 유리
void main(){
late final String name;
//do something, goto api
name='nico';
}
const: compile-time constant(컴파일할 때 값을 아는 변수)를 만듦
- 상수를 만들어주지만 js의 const와는 다름 (그건 final)
- 앱스토어에 앱을 올리기 전에 미리 알고 있는 값에 사용
- 밑에서 컴파일러는 API2값을 모르기 때문에 final로 바꿔야 한다. (API로부터 가져오기 때문에)
- 사용자가 화면에서 입력해야 하는 값도 마찬가지임
- final은 런타임중에 만들어질 수 있다!
void main(){
const API1='121212';
//밑에는 불가능
const API2 = fetchApi();
}