
void main(){
var name = '쩡';
}
void main(){
String name = '쩡';
}
dynamic : 여러가지 타입을 가질 수 있는 변수에 사용되는 키워드 (자주 사용하는 것을 추천하지 않음)
void main() {
var name; // == dynamic name;
name = '쩡';
name = 1;
name = true;
}

void main() {
dynamic name;
if(name is String){
name.
}
}

기본적으로 모든 변수는 non-nullable임
null safety : 개발자가 null 값을 참조할 수 없도록 하는 것
void main() {
String? nico = 'nico';
nico = null;
// if (nico != null) {
// nico.isNotEmpty; // 컴파일러가 null이 아님을 알기 때문에 에러가 나지 않음
// }
nico?.isNotEmpty;
}
void main() {
String? nico = 'nico';
nico = null;
nico.length;
}

void main() {
final (String) name = '쩡';
name = 'hello';
}

late : final이나 var 앞에 붙여줄 수 있는 수식어로, 초기 데이터 없이 변수를 선언할 수 있도록 해줌
void main() {
late final name;
// API 요청으로 데이터 받아옴
name = 'data';
}
flutter에서 data fetching 할 때 유용
const : compile-time constant를 만들어줌, 수정 불가능한 상수(final과 똑같이 작동), 컴파일 시간에 값이 있어야함
compitle-time constant : 컴파일 시간에 초기화 값을 확인할 수 있는 상수
void main() {
// const API = '1123344'; // 하드코딩 됨
const API =
fetchApi(); // 컴파일러는 api의 변수 값을 모르기 때문에 compile-time constant가 아님 -> final API = fetchApi();로 작성
}
final: 값을 재할당하지 못하는 변수를 만듦
dynamic type: 어떤 타입의 데이터가 들어올 지 모를 때 사용함
const: 컴파일 할 때 값을 알고 있는 변수
final: 런타임 중에 만들어질 수 있는 변수
late: final, var, String같은 것들 앞에 써줄 수 있는 수식어로서 어떤 데이터가 올 지 모를 때 사용한다.