[Dart] final과 const

·2021년 3월 10일
3

Dart

목록 보기
3/4

프로그램을 작성하다 보면 설정값을 변경하지 못하도록 상수록 설정하는 경우를 쉽게 볼 수 있습니다.

그렇다면 Dart에서 finalconst 어떻게 차이가 있을까요?

finalconst차이는 언제 상수로 설정의 시점입니다.
final은 런타임 const는 컴파일 시점에 설정이 일어나게 됩니다.

final과 const 선언

변수 선언 동일합니다. 차이점은 맨 앞에 finalconst 추가해서 선언한다는 점입니다.

final int numF = 5;
const int numC = 7;

위에 선언된 numFnumC는 다른 값을 변경이 불가능합니다.

그렇다면 실제로 동작에 차이를 볼 수 있는 코드를 작성해보겠습니다.

final DateTime nowF = DateTime.now();
print(nowF);
.........
const DateTime nowC = DateTime.now();
print(nowC);

위 코드를 실행하면 어떻게 동작할까요? nowF의 경우는 정상적으로 실행 시간이 표시되고 nowC의 경우에는 에러가 출력됩니다.

이런 차이가 나는 이유는 맨 처음 설명처럼 각 설정되는 시점이 다르기 때문입니다.

설명

const DateTime nowC = DateTime.now();
print(nowC);

위 코드는 const는 컴파일 시에 설정이기 때문에 런타임에서 코드가 실행되어야 알 수 있는 DateTime.now()의 값을 알 수 없기 때문에 오류가 발생합니다.

final DateTime nowF = DateTime.now();
print(nowF);

반대로 final의 경우에는 런타임에서 설정이 진행됩니다.
런타임에서 설정이 발생하니 DateTime.now() 값을 가져올 수 있기 때문에 정상적으로 출력합니다.

해당 코드는 아래 DartPad를 통해 확인이 가능합니다.
https://dartpad.dev/ced5f6f1f687b88a2f0547cb76bf34b2?null_safety=true

profile
괴발개발 공부인생

0개의 댓글