Dart에서 코드를 실행시키려면, 해당 코드가 main 함수 안에서 작성되어야 한다.
main 함수가 Dart의 시작 포인트인 셈이다.
void main() {
print('Hello World!');
}
또한, 여기서 중요한 것은 항상 세미콜론(;
)을 붙여야 한다는 점이다.
void main() {
var name1 = 'John'; // 방법 1
String name2 = 'Alley'; // 방법 2
}
변수를 업데이트 할 때는, 같은 타입으로 업데이트해야 한다.
예를 들어, name1은 String 타입이므로1
,false
같은 값이 들어갈 수 없다.
여러가지 타입을 가질 수 있는 변수에 사용하는 키워드이다.
변수가 어떤 타입인지 알기 어려운 경우가 존재하기 때문이다.
명시적으로 dynamic 키워드를 붙이거나, 값을 할당하지 않으면 된다.
void main() {
dynamic name1;
var name2;
}
Null Safety
란, 개발자가 null 값을 참조할 수 없도록 하는 것을 의미한다.
bool isEmpty(String string) => string.length == 0;
main() {
isEmpty(null);
}
위의 코드는 null
을 isEmpty
의 string
으로 보내고 string
의 length
속성에 접근한다. 하지만, string
은 null
이고 null
은 length
속성을 가지고 있지 않기 때문에 에러가 발생한다.
위와 같은 상황 때문에 Null Safety
가 필요하다.
그렇다면, null이 될 수도 있다고 알려주고 싶다면 어떻게 할까?
변수의 타입 뒤에 ?
를 붙인다.
void main() {
String? name = 'Hi';
name = null;
if (name != null) { ... }
else { ... }
}
?
을 사용했을 때 유의해야 하는 것은, 항상 null
인지 아닌지를 체크해야 한다는 것이다.
기본적으로 모든 변수는
non-nullable
상태이다.
final
로 선언한 변수는 나중에 수정을 할 수 없다.
void main() {
final name = '홍길동';
name = '춘자'; // Error!! Can't Modified!
late
는 final
이나 var
앞에 붙일 수 있는 수식어이다.
late
는 초기 데이터 없이 변수를 선언할 수 있게 해준다.
+) late
로 선언된 변수는 값을 추가하기 전까지는 사용할 수가 없다.
API에서 데이터를 받아올 때 사용할 수 있다.
처음에는 값이 없지만, 데이터가 받아와졌을 때 초기화를 해야하는 경우에 late
를 사용하면 유용할 수 있다.
const
는 final
키워드와 동일한 역할을 수행하지만, compile-time constant를 만들어준다.
const
로 선언한 변수는 컴파일 할 때 알고 있는 값으로 초기화해야 한다.
e.g. API 요청 시 사용하는 API KEY
final
과const
는 동일한 역할을 하지만 다른점이 있다.
final
: 런타임 중에 만들어질 수 있는 변수
const
: 컴파일 할 때 값을 알고 있는 변수