Dart의 변수 선언시 키워드에 대해 설명한다.
지역변수는 var를 사용한다. 초기화 당시 넣은 값의 type을 따른다
var name = 'hello';
print(name);
String name2 = 'hello2';
print(name2);
class안의 멤버 변수, property는 타입을 명시해준다.
String name2 = 'hello2';
print(name2);
어떤 자료형이든 될 수 있는 변수는 dynamic 키워드로 선언한다. var를 초기화없이 선언해도 dynamic과 같다. 남용하지 않도록 조심한다.
dynamic name3;
name3 = 'hello3';
if (name3 is String) {
print(name3);
}
name3 = 3;
if (name3 is int) {
print('hello$name3');
}
Dart는 기본적으로 변수들이 null값을 가질 수 없다. 런타임 에러를 방지할 Null safety를 위한 정책이다. 그래서 null값을 가질 수 있는 변수들은 타입 뒤에 ?를 붙인다.
String? name4 = 'hello4';
name4 = null;
if (name4 == null) {
// name4.length; 같은 수식을 쓸 수 없어진다!
print('hello4');
}
// name4는 null인데도 런타임 오류는 나지 않는다!
print(name4?.length);
위와 같이 변수가 null값이면 메소드나 멤버 변수를 불러오지 않고 싶을 때 ?를 붙이며 사용하면 된다. 참고로 맨 아래 명령의 결과는 'null'이다.
반대로 변수에 무조건 null이 아니라는 의미를 부여하고 싶은 경우 이름 뒤에 !를 붙여 사용한다.
값이 바뀌지 않는 변수는 final 키워드를 사용한다. type 명시가 가능하지만 안 써도 된다.
final String name5 = 'hello5';
print(name5);
선언만 하고 나중에 값을 넣고 싶은 변수에는 late 키워드를 사용한다. 역시 null 값을 방지할 수 있는 기능이다.
late final String name6;
name6 = 'hello6';
print(name6);
컴파일 전에도 변하지 않을 변수는 const 키워드로 명시하자. final은 런타임 중에 결정될 값에 사용하지만 const는 컴파일 전에 결정된 값에 사용한다.
const name7 = 'hello7';
print(name7);