APP/Dart & Flutter
[Flutter] Dart에서 불변의 상수 값을 지정하는 final & const
JOKUN
2023. 4. 6. 22:14
final과 const의 공통점
한 번 설정한 값은 변경할 수 없다. 다른 값으로 변경하려고 시도하면 컴파일 오류가 발생한다.
또한 변수 타입을 따로 설정하지 않아도 오류가 나지 않는다.
final test1 = '쿤이의 개발일기';
const test2 = '쿤이의 개발일기';
final과 const의 차이점
const의 경우 빌드 타임을 알아야 선언할 수 있다. (final은 빌드타임의 값을 알지 못해도 선언할 수 있음.)
예를들면 DateTime.now()의 경우 런타임에서 호출 될 때마다 결과 값이 다르기 때문에
DateTime.now()의 변수는 const로 설정할 수 없다. 결국 const로 설정 하는 값의 대부분은 리터럴이 될 것이다.
DateTime now = DateTime.now();
final DateTime now = DateTime.now(); // 가능
const DateTime now = DateTime.now(); // 불가능
const를 사용하는 경우
const는 app의 lifecycle에서 절대 변치 않음을 의미하기 때문에 색상, 글자 크기 등이 고정일 때 그 변수의 앞에 const를 붙여주어야 flutter 의 build method가 그 부분을 rebuild 하지 않게 되어 app의 속도가 빨라진다.
final은 widget이 생성되는 시점마다는 변경될 수 있지만 한 번 생성된 위젯 내에서의 const 상수는 변경할 수 없음을 의미한다.
Stateless Widget이 그 대표적인 예이며, 이 위젯은 자체적으로 상태를 가지지 않기 때문에 다른 속성을 가지는 StatelessWidget 으로 바꾸려면 생성자(constructor)에 새로운 property 값을 전달하면서 새로운 위젯을 만들어야 한다.
이때 사용되는 것이 const variable이다. StatelessWidget의 모든 property는 const variable 이다.