Dart, Flutter

Dart 공부하기) late 키워드

DevOhwa 2023. 10. 24. 23:58
반응형

Dart는... 갑작스러운 강의사자 병이 도져서 사버린 강의를 들으면서 살짝씩 정리

 

 

Dart에서 late를 활용한다면 변수 선언과 동시에 초기화를 하지 않아도 됨.

Dart의 컴파일러에게 에러 뱉지마십쇼 하는것. 주의할점은 late키워드를 사용한 변수를 초기화 하지 않고 사용하면 런타임 에러가 발생함

 

 

late 키워드의 장점은 변수를 사용하지 않으면 초기화 되지 않는다는점. 초기화 지연이라 불리는 기능은 초기화 값이 비싼 연산을 사용하지 않는다면 실행하지 않는다는점. 

 

int initializeInt(){
	int sum = 0;
    for (var i = 0; i<1000000000000; i++){
    	sum += i;
    }
    return sum;
}

//만약 한번의 루프를 도는데 0.1초의 시간이 걸린다고 가정하면, 해당 함수가 실행되어 값을 리턴하는데까지
//많은 시간 소요. 이런경우 해당 변수를 사용하지 않는다면 굳이 값을 초기화할 필요가 없음

main() {
	//late키워드를 사용할 경우 해당 변수가 사용되지 않는다면 초기화 되지 않음.
	late int verylonglong = initializeInt();
}

 

 

final, const

해당 키워드는 상수를 선언할 경우에 사용됨

main() {
	final int finalInteger = 123123;
    final double PI = 3.14;
    const String ERROR_MSG = '변할수없는 VARIABLE';
    const NO_TYPE_ANNOTATION = 'NO_TYPE_ANNOTATION' //타입 애너테이션 없이 선언
}

 

final 사용시 상수를 선언과 동시에 초기화 하지 않아도됨.

main() {
	final hi;
    hi = 'hi';
    hi = 'hi2';
}

하지만 const는 선언과 동시에 초기화 해야한다. 

 

 

final은 런타임 상수 키워드이고, const는 컴파일 상수 키워드기 때문이다. 

☞ 상수화 되는 시점이 다른것

//첫번째 DATE_1 변수는 에러임. 컴파일 시점의 DateTime을 담을 수 없기 때문
//두번째 변수는 값이 잘 담긴다. 런타임시점에 해당 시간의 값을 잘 담기때문. 
main() {
	const DATE_1 = DateTime.now();
    final DATE_2 = DateTime.now();
}

 

 

여러번수 한번에 선언

//Dart는 여러가지 변수를 한번에 선언하고 초기화 가능하다. 
var (a, b) = ('left', 'right');

//변수에 할당된 값을 쉽게 swap 가능하다.
(b, a) = (a, b);