안녕하세요.
오늘도 색다른 주제를 가지고 와봤습니다.
이번 시간에는 const 라는 Keyword 를 배우고, 이를 Flutter 에 적용해야 할 때와 적용하지 말아야 할 때를 구분짓는 법에 대해서 알아보는 시간을 가지겠습니다.
흔히 JS, Dart (Flutter) 등에서 많이 쓰이는 예약어 중 하나입니다.
예약어란 Computer Programming 언어에 하나의 명령어로써 내장되어 있는 도구로, 그 예를 들자면 Primitive Type 인 int, float, char 와 같은 Type 도 하나의 예약어 중 하나이고, Object Type 인 Class 나 String 도 예약어의 종류 중 하나입니다.
그럼 const, var, let keyword 에 대해 알아보겠습니다.
const
const 는 constance 의 약자로 상수 라는 뜻입니다.
(6호선의 상수역이 아닙니다..ㅎㅎ)
그래서 한 번 정해지면 다시 수정할 수 없는 값들을 담기 위해서 const 를 사용합니다.
var
var 은 variable 의 약자로 변수 라는 뜻입니다.
우리가 흔히 프로그래밍을 할 때 사용하는 그 변수입니다.
또한 var 의 특징은 재정의를 할 수 있고, 변수 호이스팅도 같이 진행할 수 있습니다.
변수 호이스팅이란 중괄호( { } ) 로 이루어져 있는 Code Block 안에서 실행되고 있는 Code 가 그 중괄호 밖에서도 값을 호출하거나 재정의를 할 수 있는 기능을 말합니다.
자세한 내용은 하단의 변수 호이스팅에 관한 내용도 공유했으니, 참고 부탁드립니다.
https://poiemaweb.com/js-data-type-variable#23-%EB%B3%80%EC%88%98-%ED%98%B8%EC%9D%B4%EC%8A%A4%ED%8C%85variable-hoisting
let
let 도 var 와 같은 변수입니다.
하지만 var 과 달리 재정의는 단 한 번만 할 수 있습니다.
그렇지만 값은 재할당이 가능합니다. 단지, var 을 여러차례 재사용하는 것이 안되는 것이지, 값을 여러번 넣는 것은 허용됩니다.
그러나, 변수 호이스팅이 되지 않습니다.
그래서 만약 변수 호이스팅을 사용하고 싶다면 var 을 사용하시는 것을 추천드립니다.
왜 const 를 statefulWidget 에서 사용하지 말아야 하는가?
자, 이제 본론으로 돌아와봅시다.
const 는 위에서 말했다시피, 상수 값을 저장하는 예약어입니다.
제가 사이드 프로젝트 중인 코드 중인 일부분을 가지고 왔습니다.
여기서 보시면 textLocation 값을 가지고 올 때, widget 부분에서 Error 가 발생하는 것을 보실 수 있습니다.
이 Error 에 대한 설명을 자세하게 마우스를 Hover 시키면..
다음과 같이 Invalid constant value. 라는 Error 가 발생하는 것을 볼 수 있습니다.
그 이유 또한 한 번 저장하면 바꿀 수 없는 const 예약어를 사용했기 때문입니다.
StatefulWidget 은 자주 상태가 바뀌고, var 이나 let 과 같이 Widget 안에 들어가 있는 상태 값이 자주 바뀝니다.
그러나, const 는 이와 반대로, 상수 값 만을 저장하고 있기 때문에 사용이 불가합니다.
한 번 고쳐보겠습니다.
다음과 같이 const 를 지웠더니 멀쩡하게 에러가 출력되지 않는 것을 보실 수 있습니다.
정리를 간단하게 하자면..
1. StatefulWidget 은 상태가 자주 바뀌는 것을 감지 및 UI 에 적용하기 위해 사용하므로, 값이 자주 바뀌는 Widget 에 값을 적용할 때 const 를 사용하는 것을 반대합니다
2. var 과 let 은 변수와 같은 개념을 적용 받지만, const 는 한 번 값을 저장하면 다시 값이 바뀌지 않는 상수 개념을 적용받습니다.
이상 여기서 마치도록 하겠습니다.
감사합니다.