main 함수는 모든 Dart 프로그램의 Entry point이기 때문에 아주 중요하다.
파이썬과 비슷한 점이 있지만 파이썬과 다르게 꼭 세미콜론(;)을 써 줘야 한다. 빼먹으면 프로그램이 컴파일 되지 않는다.
typescript나 javascript을 사용하다가 왔다면 세미콜론을 사용하지 않는 것에 익숙할 수 있다. formatter나 VSCode 같은 프로그램이 알아서 달아준다. dart에는 자동으로 달아주지 않는다.
main함수는 모든 Dart프로그램의 Entry point이다. main 함수에서 쓴 코드가 호출된다. (만약 main이 없다면 실행이 되지 않는다.)
dart는 자동으로 세미콜론을 붙여주지 않기 때문에 직접 붙여야 한다.( 일부러 세미콜론을 안 쓸때가 있기 때문이다.)
void main(){
print('hello');
}
값을 업데이트를 할 때는 변수의 본래 타입과 일치해야 한다.
변수를 만드는 방법은 두가지다.
명시적으로 변수의 타입을 지정하거나 var 키워드를 이용하는 것이다.
void main(){
var name = 'Seung'; // 방법 1
String age = '25'; // 방법 2
name = 'Baek';
age = '27';
print(name);
print(age);
}
함수나 메소드 내부에 지역변수를 선언할 때는 var를 사용하고 class에서 변수나 property를 선언할 때는 타입을 지정해준다.
dart는 모든 타입에 대해서 멋진 속성들을 가지고 있다.
Dynamic 타입
여러가지 타입을 가질 수 있는 변수에 쓰는 키워드이다. (해당 변수의 타입을 알 수 없을 때 주로 사용)
변수를 선언할 때 dynamic을 쓰거나 값을 지정하지 않으면 dynamic 타입을 가진다.
void main(){
dynamic name;
}
dynamic 타입은 대표적으로 타입을 알기가 힘들 때 사용한다. 예를 들어 json을 작업할 때 같은 경우다.
하지만 dynamic 타입은 다양한 타입을 가질 수 있기 때문에 '정말 필요할 때만'사용해야 한다.(위험 방지)
런타임 에러는 사용자가 앱을 사용하던 중에 뜨는 에러라는 뜻이다.
dart의 null safety라는 건 어떤 변수, 혹은 데이터가 null이 될 수 있음을 명시하는 걸 말한다.
void main(){
String? chan = 'chan';
chan = null;
print(chan);
}
null safety는 개발자가 null값을 참조할 없게 하는 것이다.
String뒤에 ?를 붙여줌으로서 chan이 String 또는 null 될 수 있다고 명시해준것입니다. 기본적으로 모든 변수는 non-nullable(null이 될 수 없음)이다.
dart의 변수는 기본적으로 nullable이 아니란 것만 기억해주세요. nullable로 만들고 싶다면, 꼭 물음표를 넣어줘야 한다.
final 변수
var 대신 final로 변수를 만들게 되면 이 변수는 수정할 수 없게 된다.(딱 한 번만 설정될 수 있음) 자바스크립트의 const랑 비슷하다.
void main(){
final String name = 'chan';
print(name);
}
late는 final이나 var 앞에 붙여줄 수 있는 수식어다. late는 초기 데이터 없이 변수를 선언할 수 있게 해준다. 변수를 만드는데 데이터가 없는 거다.
void main(){
late final Sting name;
// do something, go to api
name = 'chan';
print(name)
}
flutter로 data fetching을 할 때 정말 유용하다. flutter에서 API와 작업할 떄 많이 보게 될 것이다. late 변수를 만들고 API에 요청을 보낸 뒤에 AP에서 값을 보내주면 그걸 late 변수에 넣어주는 거다.
dart의 const는 javascript나 typescript와 다르다. javascript나 typescript의 const는 dart의 final과 비슷해 dart에서 const는 compile-time constant를 만들어 준다.
const는 컴파일 할 때 알고 있는 값에 사용하는 거다. 앱스토어에 앱을 올리기 전에 알고 있는 값이라는거다. 만약 앱스토어에 앱을 올리기 전에 값을 알고 있다면 const가 될 것이고 어떤 값인지 모르고, 그 값이 API로 부터 온다거나 사용자가 화면에서 입력해야 하는 값이라면 그건 final이나 var가 되어야 한다.
void main(){
const name = "tom"; // 컴파일 시점에 바뀌지 않는 값
final username = fetchAPI(); // 컴파일 시점에 바뀌는 값
}
const : 컴파일 시점에 바뀌지 않는 값(상수)
final : 컴파일 시점에 바뀌는 값(API에서 받아온 값, 사용자 입력값)
정리하자면
final : 값을 재할당하지 못하는 변수를 만든다.
dynamic type : 어떤 타입의 데이터가 들어올 지 모를 때 사용함
const : 컴파일 할 때 값을 알고 있는 변수
final : 런타임 중에 만들어질 수 있는 변수
late : final, var, String 같은 것들 앞에 써줄 수 있는 수식어로서 어떤 데이터가 올 지 모를 때 사용한다.
'다트(Dart)언어' 카테고리의 다른 글
다트(Dart) - FUNCTIONS (0) | 2023.09.11 |
---|---|
다트(Dart) - 데이터 타입(DATA TYPES) (0) | 2023.09.10 |
다트(Dart) 이해 및 개념 - IT (0) | 2023.09.07 |