void main() {
var name = "리아";
name = 1; // name의 타입은 String인데 1(int)를 넣으면 에러 발생
name = "ria";
}
void main() {
String name = "리아";
name = "ria";
}
관습적으로
- 함수나 메소드 내부에 지역 변수를 선언할 때는 var를 사용
- class에서 변수나 property를 선언할 때는 타입을 지정
void main() {
var name; // dynamic 변수
name = "ria";
name = 1;
name = true;
}
void main() {
dynamic name; // dynamic 변수
name = "ria";
name = 1;
name = true;
}
void main() {
dynamic name;
if (name is String) {
name. /* name. 까지 입력하면 String 타입관련 자동완성 메서드 목록이 나타남.
해당 블록 안에서는 name이 String이란 걸 알기 때문 */
}
// 여기서 name은 dynamic이기 때문에 타입을 체크해줘야 함
if (name is int) {
name. // int 타입관련 자동오나성 메스드 목록이 나타남.
}
}
void main() {
String**?** name = "ria";
name = null;
if (name !== null) { // 컴파일러가 name은 null 아님을 알 수 있음
name.isNotEmpty;
}
// 간단하게 작성하면 이와 같음
name?.isNotEmpty;
}
void main() {
// 값을 변경할 수 있는 변수
String name = "ria";
name = "리아";
// 값을 변경할 수 없는 변수
final name = "ria";
// 굳이 필요없지만 type을 추가 할 수 있음 (필수x)
final String name = "ria";
}
void main() {
// 변수를 만드는데 데이터가 없음(필요한 데이터가 아직 없음)
late final String name; // 한번만 할당 할 수 있는 변수
// API 요청하여 데이터를 받은 다음, 그 데이터를 변수에 넣음
name = "ria";
}
void main() {
final API = fetchApi(); // o
const API = fetchApi(); // x 컴파일 할 때 알고 있는 값이 아님.
// 앱스토어에 올리기 전에 알고 있는 값이어야 함.
}