void main(){
print('hello world');
}
main - dart프로그램의 entry point
일부러 세미콜론(;)을 안쓰는 경우도 있기에 실행을 원하면 쓰기
변수 만드는 법 : var(자동화), 명시적으로 변수 타입 지정
void main(){
/*var*/
var name = '다트';
//type이 다르기에 안 됨
name =1;
name = bool;
name = false;
//type일치
name = 'dart';
/*type지정*/
String aName ='다트';
}
var : 함수나 메소드 내부에 지역변수를 선언할때 사용
타입 지정 : class내 변수, property 선언할 때 사용
dynamic : 여러가지 타입을 가질 수 있는 변수에 쓰는 키워드
타입 지정
void main(){
var name; //==dynamic name;
name = 'dart';
name = 12;
name = true;
if(name is String){
//dynamic이 String임을 앎 -> 관련 옵션 사용가능
}
}
dynamic이 필요한 이유 : 변수가 어떤 타입일지 알기 어려운 경우, dynamic으로 살짝 돌아가는게 유용한 경우
쓰는 것을 피하고 정말 필요할때만 사용
null safety : 개발자가 null값을 참조할 수 없도록 하는 것 -> null이 될 수 있음을 정확히 표시해줘야함
변수나 데이터가 null이 될 수 있음을 명시하는 것
void main(){
String dart = 'dart';
dart = null; //불가능
}
null, string 둘 다 사용하려면 ?를 사용하면 된다.
void main(){
String? dart = 'dart';
dart = null; //가능
dart.length;//null인지 확인 필요
}
수정 버전
void main(){
String? dart = 'dart';
dart = null; //가능
if(dart != null){
dart.isNoEmpty;
}
//or
dart?.isNoEmpty;
}
수정 불가능한 데이터 타입으로 만드는 법 : final
void main(){
final name = 'dart';
name = 'dart';//수정 불가, 자바스크립트에서 const개념
}
구체적으로 해주고 싶다면 타입 추가하기
void main(){
final String name = 'dart';
}
하지만, 필수는 아님
late : final이나 var 앞에 붙여줄 수 있는 수식어
초기 데이터 없이 변수를 선언할 수 있게 해줌
void main(){
late final String name;
//do someting, go to api
print(name);//실수를 줄여줌, 값을 넣기 전에는 접근 불가
name = 'dart';//api에서 데이터를 받아 나중에 변수에 넣기
print(name);//값이 있기에 작동
}
flutter로 data fetching을 할 때 유용
const : 상수, compile-time constant
void main(){
const name ='dart';
name = '12';//final과 똑같이 작동=수정x, compile-time에 알고 있는 값
}
void main(){
const API = '121212';//컴파일 될 때 그 값을 앎
const api = fetchApi();
//컴파일러는 api변수 값을 모름 -> const가 아닌 final사용
}
즉, const는 컴파일 할 때 알고 있는 값에 사용
ex. 앱스토어에 앱을 올리기 전에 알고 있는 값
어떤 값인지 모르고, 값이 api로 부터 오거나, 사용자가 입력해야 하는 값이면 final이나 var