final과 const
final
- final은 한 번 값을 대입하면 변경할 수 없다.
const
- const는 한 번 값을 대입하면 변경할 수 없다.
final과 const의 차이점
- final은 실행중에 값이 결정됩니다.
- final은 이 파일이 실행될 때 해당 위치에서 값이 결정됩니다.
- const는 컴파일시에 값이 결정됩니다.
- const는 이 파일을 컴파일할 때 기계어로 번역될 때 값이 결정됩니다.
예시 1
- 일반 String은 언제든지 바꿀 수 있음
- final은 여행을 가기 전에 정하는게 아니라, 여행 중에 결정할 수 있음. 단 결정하고 나서는 변경 불가
- const는 먹을 것을 여행을 가기 전에 미리 정한 것, 가서 딴거 먹을래라고 물어보면 안됨
예시 2
- 어떤 프로그램이 실행될 때 시간에 대한 로그를 남기고 싶을 때는 DateTime.now()를 사용
-- var log1 = DateTime.now();
- 실행 시에 시간이 결정되므로 사용 가능
-- final log2 = DateTime.now();
- 컴파일 시의 시간을 담을 수 없으므로 사용 불가. 실행은 지금이 아니라 내일도 할 수 있음
-- const log3 = DateTime.now();
실습
// 어떤 프로그램이 실행될 때 시간에 대한 로그를 남기고 싶을 때는 DateTime.now()를 사용
var log1 = DateTime.now();
// final은 실행 시에 시간이 결정되므로 사용 가능
final log2 = DateTime.now();
// const는 컴파일 시의 시간을 담을 수 없으므로 사용 불가. 실행은 지금이 아니라 내일도 할 수 있음
// const log3 = DateTime.now();
// 일반적인 변수
String choose1 = "짜장면";
// final은 한 번 값을 대입하면 변경할 수 없다.
final String choose2 = "볶음밥";
// const는 한 번 값을 대입하면 변경할 수 없다.
const String choose3 = "깐풍기";
main(){
print("log1 = ${log1}");
print("log2 = ${log2}");
print("choose1 = ${choose1}");
choose1 = "짬뽕";
print("choose1 = ${choose1}");
print("choose2 = ${choose2}");
// choose2 = "탕수육"; // 에러 발생
print("choose3 = ${choose3}");
// choose3 = "동파육"; // 에러 발생
}