Flutter

Const, Final 언제 사용하는 걸까?

플러터 UI 그리는걸 따라해보고 있자니 const를 써야할때와 안써야할때가 궁금해서 찾아봤다

공통점

한번 할당한 변수는 재할당이 불가능하다

차이점

전제로 컴파일 타임과 런타임의 차이를 이해할 필요가 있다

final(런타임에 정하고 변화 x)

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

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

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

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

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

const( 컴파일 타임에 한번 정하고 변화 x )

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

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'.