흰오목눈이야 개발하자

[Flutter, Dart] const, final 차이점 본문

Flutter

[Flutter, Dart] const, final 차이점

흰오목눈이 2023. 3. 13. 21:26

자바를 공부하고 안드로이드에서 코딩할 때는 변할 수 없는 값(=재할당 할 수 없는 값)을 설정할 때 대체로 final을 사용했습니다.

다트라는 언어를 배우고 플러터 코딩을 할 때는 final만 있는 게 아니라 const도 있어서 둘 다 사용이 가능했는데 이 차이를 몰라 정리를 해보려 합니다.

 

변하지 않는 값을 지정할 때 아래와 같이 사용할 수 있습니다.

const String nameConst = "Shu";
final String nameFinal = "Shu";

공통점은 한 번 지정하면 값을 변경할 수 없습니다. (= 재할당 불가)

예)

const String nameConst = "Shu";
final String nameFinal = "Shu";

nameConst = "Shua"; // error발생
nameFinal = "Shua"; // error발생

 

const, final 차이점


final

- final 변수는 런타임시에(runtime) 초기화되며 한 번만 할당할 수 있습니다.

+) 런타임이란?
: 프로그램이 실행되고 있는 동안의 동작을 의미합니다.

Flutter(플러터)에서 런타임은 플러터 앱이 실행되는 기간을 나타냅니다. 앱이 실행될 때 시작되어 사용자 또는 운영 체제에 의해 앱이 닫히거나 종료될 때까지 계속됩니다.  

 - 플러터의 경우, state(상태)가 업데이트되면 build 메서드 안에 있는 모든 것들이 초기화됩니다. 이때, final을 포함한 모든 변수가 포함이 됩니다.

- 클래스, 함수 둘 다 정의가 가능합니다.

@override
Widget build(BuildContext context) {
  ...
}

const

- const는 컴파일할 때(complie time) 초기화되고 런타임에는 이미 할당이 됩니다.

+) 컴파일이란?  
: 기계어 코드로 변환되는 것을 의미합니다.
Flutter(플러터)에서 컴파일 타임은 Flutter 코드가 기기나 에뮬레이터에서 실행할 수 있는 기계어 코드로 바꾸는 시간을 의미합니다.

컴파일 타임 동안 Flutter 앱을 구성하는 Dart 코드는 대상 플랫폼에서 실행할 수 있는 기계 코드로 변환됩니다.

- 플러터의 경우, state(상태)가 업데이트되었을 때 build 메소드에서 모든 것이 초기화되지 않습니다.

- 클래스에서 정의할 수 없습니다. 하지만 함수에서는 정의가 가능합니다.

- const는 런타임중에는 변경할 수 없습니다.

 

언제 어떤 키워드를 사용해야하나요?


- final을 사용하는 경우 : 컴파일할 때 값이 무엇인지 모르는 경우, 예를 들면 API로부터 값을 받아와야 할 경우 사용됩니다.

- const를 사용하는 경우 : 코드를 실행할 때 값이 변경되지 않을 경우라고 확신하는 경우입니다. 예를 들어, 항상 동일하게 유지되는 단어/문장을 선언할 경우 사용됩니다.

 

 

 

참조) https://itnext.io/difference-between-const-and-final-in-dart-78c129d0c573

 

Difference between Const and Final in Dart

Let’s find out the difference between const and final keywords in Dart and Flutter

itnext.io