void main() { String name = 'suwith'; //방벙1 var name = 'suwith'; //방법2 name = 'garden'; }함수나 메소드 내부에 지역변수를 선언할 때는 var를 사용하고
class에서 변수나 property를 선언할 때는 명시적 타입을 사용한다.
당연한 말이지만 다른 타입의 변수는 서로 대입할 수 없다.
var를 사용하는게 dart 스타일가이드의 권장 방식이다.
var name; dynamic name;변수를 선언할 때 dynamic을 쓰거나 값을 지정하지 않으면 dynamic타입이 된다.
이 데이터는 여러 타입을 가질 수 있기 때문에 정말 필요할 때만 사용해야 한다.
데이터 타입이 무엇인지 모를 때 주로 사용한다.var name; if(name is String){ //이곳에서는 name을 String 취급 } if(name is int){ //이곳에서는 name을 int 취급 }
String? name = 'suwith'; name = null;dart에서는 기본적으로 모든 변수가 non-nullable(null이 될 수 없는)이다.
null값을 참조할 때 일어나는 런타임 에러를 막기 위해 데이터 타입 뒤에 ?를 붙여줌으로써 데이터가 null이 될 수 있다고 명시해주는 것이다.
final name = 'suwith'; final String name = 'susu'; //이와 같이 타입을 더 구체적으로 적어도 됨상수 타입 , 자바스크립트의 const와 같이 수정할 수가 없다.

late final name;final이나 var또는 명시적 데이터타입 앞에 붙여서 초기 데이터 없이 먼저 변수를 생성하고 추후에 데이터를 넣을 때 주로 사용한다.
값을 넣기 전까지는 변수 참조가 안됨
flutter로 data fecthing을 할 때 유용하다.
fianl 키워드를 혼자 사용하면 바로 선언을 해야하지만 late 키워드를 사용한다면 선언이 아닌 할당을 하더라도 그 변수의 수정을 막을 수 있기 때문이다.
[참고]
class 개념에서 이 변수의 기능이 쓰일 것.
class 내의 인스턴스 변수가 final이면 만들면서 바로 할당해야하고 late final이면 만들고 난 후에 할당해도 됩니다.
또한 Nullable 타입이 아닌(?가 없는) 타입들은 빈 값(null)을 가질 수 없는데 late 키워드를 써줘서 사용하기 전에 할당한다고 알려줄 수 있죠.
즉, null-satefy가 보장됩니다.
void main() { const name = "tom"; // 컴파일 시점에 바뀌지 않는 값 final username=fetchAPI(); // 컴파일 시점에 바뀌는 값 }자바스크립트의 const와는 다르며 dart에서 const는 compile-time constant를 만들어준다.
const 키워드는 컴파일 타임에 평가되므로, 변수는 반드시 선언시 초기화되어야 함🧐 "late const 변수" 는 가능할까?
late와 const 키워드를 함께 사용할 수는 없다. late 키워드는 변수가 나중에 초기화될 것임을 나타내므로, 변수는 런타임에 초기화된다. 따라서 late const 는 유효하지 않은 문장이다.
const는 컴파일할 때 알고 있는 값을 사용해야 한다.
만약 어떤 값인지 모르고, 그 값이 API로부터 오거나 사용자가 화면에서 입력해야 하는 값이라면 그건 const가 아닌 final이나 var가 되어야 한다.
const와 final의 차이점
const: 컴파일 시점에 바뀌지 않는 값 (상수)
final: 컴파일 시점에 바뀌는 값 (API에서 받아온 값, 사용자 입력값)
const와 fianl의 가장 큰 차이점은 컴파일이 되는 시점에 그 값을 알 수 있는지 없는지의 차이다.
예를 들어 fetchApi를 하는 변수는 컴파일하는 시점에 그 변수를 알 수가 없다.// 컴파일하는 시점에는 API의 값을 알 수 없다 const API = fetchAPI()위 코드의 경우에는 const가 아닌 final이 더 적합하다.
final를 쓰는 대표적인 경우는 API fetching, 사용자가 화면에서 입력해야하는 값 등이 있다.
const를 쓰는 대표적인 경우는 max_allowed_price와 같은 상수에 쓰인다.