dart 에서 변수를 선언하는 키워드는 var 를 사용한다.
var 는 특별한 타입이 없다. 다만 var 로 선언된 변수에 할당되는 변수의 타입으로
해당 변수의 타입을 유추한다.
var name = 'John'; // name 은 String 타입으로 선언된다.
만약 변수의 타입을 선언과 동시에 설정하고 싶다면 var 대신 해당 타입을 키워드로 사용한다.
String name = 'John';
Dart 의 기본 타입은 아래와 같다.
String name = 'John';
int age = 20;
double height = 175.5;
bool isMale = true;
당연한 이야기지만 한번 설정된 타입에 다른 타입의 값을 할당할 수 없다.
만약 타입이 가변적일 때는 Object 키워드를 사용한다.
String name = 'John';
name = 20; // error 가 발생한다.
Object obj = 'This is Object type';
obj = 1000; // 가능
Null safety
Dart 는 Null safety 를 강력하게 강제한다.
Null safety 란 런타임 환경에서 변수가 null 일 때 발생할 수 있는 예상치 못한 에러를
컴파일 단계에서 발견해준다.
이를 통해 런타임환경에서 발생할 수 있는 잠재적인 에러 가능성을 차단해서
시스템을 안정적이고 완성도 있게 만들 수 있다.
만약 꼭 null 을 사용해야 하는 경우가 있다면 타입 선언뒤에 ? 를 붙여주어
Nullable 타입으로 만들어 사용할 수 있다.
String name1 // Non-nullable type. 변수에 값을 할당하지 않으면 에러가 발생한다.
String? name2 // Nullable type. 변수에 값을 할당하지 않으면 null 값이 세팅된다.
dart 언어에서는 변수 선언이후 사용전에 무조건 값이 세팅되어야 한다.
Nullable 한 변수의 경우 세팅되지 않는다면 default 값으로 Null 이란 값이 세팅되어진다.
하지만 Non-nullable 한 변수의 경우 아무 값이 세팅되지 않고, dart 는 이를 감지해서
개발자에게 알려준다.
그렇기 때문에 dart 에서는 선언과 동시에 Default 값을 세팅하는 것을 권고한다.
Late variables
변수 선언시 late 키워드를 사용해서 초기화를 지연시킬 수 있다.
변수 초기화를 지연시키는 것은 종종 유용할 때가 있습니다.
- 변수가 당장에 필요하지 않지만, 변수 초기화 비용이 많이 들 때
- 변수를 초기화 할 때 this 에 대한 접근이 필요할 때
// temperature를 사용하지 않는다면 불필요하게 readThermometer() 를 호출하지 않는다.
late String temperature = readThermometer();
Final and const
dart 에서 상수의 선언은 final 이나 const 를 사용한다.
final 과 const 의 차이점은 final 은 런타임시 선언된 값이 설정되며, const 의 경우 컴파일시 값이 저장됨
final name = 'John';
name = 'Alice'; // error 발생
final time1 = DateTime.now(); // 이 코드가 실행되는 순간 날짜 세팅
const time2 = DateTiem.now(); // 컴파일 시점의 날짜 세팅
const 의 경우 상수 값을 선언하는데 사용되기도 한다.
var fruits = const ['apple', 'banana'];
fruits = ['orange', 'melon']; // fruits 라는 변수에 새로운 값이 세팅
final animals = const ['dog', 'cat'];
animals = ['cow', 'horse']; // error 발생. animals 라는 상수에 다른 값을 세팅할 수 없다.
'Flutter' 카테고리의 다른 글
[Dart] function, Positional parameter, Named parameter (0) | 2024.09.13 |
---|---|
[Flutter] Flutter 개발, 운영 설정 분리하기 (flavor, build scheme) (0) | 2023.08.31 |