Dart final과 const의 차이에 대해 알아보자.

Posted by negabaro kim on Wednesday, April 28, 2021 Tags: flutter/dart   1 minute read

Dart에서 final과 const의 차이에 대해 알아보자.

공통점

한번 할당한 변수는 재할당이 불가능(var와의 차이)

차이점

※전제로 컴파일 타임런타임의 차이를 이해할 필요가 있음.

final

동적으로 메모리에 할당이라고 말한다.

컴파일 타임에는 변수할당을 하지 않고 런타임시에 변수할당을 한다.

덕분에 컴파일 타임에서 확인할 수 없는 값들을 변수에 할당할 수 가 있게된다.

컴파일 타임에서 확인할 수 없는 값(런타임시 확인가능한것)으로는 DateTime.now()가 있다.

void main(){
    final d = DateTime.now();
}

const

컴파일 타임에 변수선언이 이루어진다. 덕분에 런타임시 특별히 할것 없이 메모리에 할당되어 있는 값을 이용할 수 있어 효율적이다.

padding값과 같이 재사용을 많이 하는 케이스라면 const가 유용하다.

아래와 같이 런타임시에만 확인가능한 값을 const에 대입하면 const는 컴파일 타임에 변수할당을 하므로 에러가 발생한다.

void main(){
    const d = DateTime.now(); //error
}

전체에러

Error: Cannot invoke a non-'const' constructor where a const expression is expected.
Try using a constructor or factory that is 'const'.