// main 함수는 실행함수로 반드시 있어야함
void main() {
// 1. 변수선언 var: 함수나 메소드 내부 지역변수 선언시 var 주로 사용
var name = '지노'; // 선언하는 타입(지금은 STRING)으로 맞춰짐
// = String name;
// class 에서 변수나 property를 선언할 때는 타입을 지정해줌
name = 'gino'; //변수를 수정할 때는 같은 타입으로
// 2. dynamic type
var namm2; // 변수가 어떤 타입인지 알기 어려울 때, 특히 json이랑 함께 작업할 때 유용
// = dynamic name2;
// dynamic 은 가급적 쓰지 않고 정말 필요할 때만 써야함
name2 = 'gino';
name2 = true;
name2 = 12;
if (name2 is int) {
// dynamic 변수인 경우 if문 이렇게 활용하기도 함
}
// 3. null safety
// 어떤 변수가 특정타입도 되고, NULL도 될 수 있게하려면 ? 활용 (?는 변수를 nullable로 만들어줌)
String? name3 = 'gino';
name3 = null;
name3?.isNotEmpty; // null이 아니라면 isNotEmpty 속성을 달라고 요청
// ? 문법은 API로 부터 데이터를 받아올 때 많이 활용됨
// 4. Final 변수를 수정 불가능하게 만들어줌
final name4 = 'gino';
name4 = 'ginoo'; // final로 변수선언했기 때문에 값 수정 불가능
// 5. 수식어 late
late final String name5; // 데이터값 없이 변수를 선언할 수 있게 해주는 수식어
// do something, go to api
name5 = 'api'; // api로 부터 받은 데이터를 넣어줌
// 6. const : compile-time constant를 만들어줌
const max_allowed_price = 120; // 앱을 스토어에 올리기 전에 미리 값을 알고 있을 대 활용
// 만약 api로부터 받아오거나, 사용자의 입력값을 받아야한다면 const는 쓰면 안됨 (런타임 전에 변수가 완성되는 경우에 쓰임)
}