프로그램을 작성하다 보면 설정값을 변경하지 못하도록 상수록 설정하는 경우를 쉽게 볼 수 있습니다.
그렇다면 Dart에서 final
과 const
어떻게 차이가 있을까요?
final
과 const
차이는 언제 상수로 설정의 시점입니다.
final
은 런타임 const
는 컴파일 시점에 설정이 일어나게 됩니다.
변수 선언 동일합니다. 차이점은 맨 앞에 final
과 const
추가해서 선언한다는 점입니다.
final int numF = 5;
const int numC = 7;
위에 선언된 numF
와 numC
는 다른 값을 변경이 불가능합니다.
그렇다면 실제로 동작에 차이를 볼 수 있는 코드를 작성해보겠습니다.
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