반응형
fial과 const의 기본 개념은 한번 선언된 값을 변경되지 못하게 해달라는 의미를 가진다.
//일반적으로 우리가 사용할땐, 문자열 변수를 선언 후
String name = '이름';
//이렇게 값을 변경(재할당)하여 사용할 수 있다.
name = '이름2';
//하지만 선언 후, 할당한 값을 변경하지 못하게 하고 싶을 떈, 앞에 final을 붙여서 사용한다.
final String name = '이름';
//const도 마찬가지로 값을 변경하지 못하는 final과 같은 의미를 가진다.
const String name = '이름';
그런데 여기서 둘다 값을 변경하지 못하지만 어떤 차이가 있는지가 중요하다.
const의 경우 컴파일타임에 저장된다는 점과, final은 런타임에 지정된다는 점이 차이가 있다.
프로그래밍 언어가 기계어로 번역되어 실행되는 과정을 컴파일이라 하고, 이 과정을 컴파일 타임이라한다.
이 컴파일된 프로그램이 실행되는 과정이 런타임이라 한다.
무슨 의미인지는 아래 예제를 보면서 확인해 보자.
//실행한 결과값을 보면, 첫번째 라인의 값과 두번쨰 라인의 값이 1초정도 차이가 나는것을 확인할 수 있다.
//const는 첫번째 print의 값이고, final은 두번째 print의 값으로 예제를 들수 있는데,
//프로그램이 만들어 지기 전 컴파일되는 과정에서 값이 지정되어 버리는것은 첫번째 print. 즉 const이며
//컴파일 완료 후, 프로그램이 만들어진 후 실행되자마자 값이 지정되는 것이 두번쨰 print. 즉 final이다.
DateTime now = DateTime.now();
print(now);
Future.delayed(
Duration(milliseconds : 1000),
(){
DateTime now2 = DateTime.now();
print(now2);
}
);
실제 final과 const를 넣어서 예제를 다시 살펴보자.
//첫번째 print와 두번째 print의 값이 위 예제와 동일하게 1초간의 딜레이가 발생한것을 확인할 수 있다.
//이는 당연히 컴파일이 완료된 후, 런타임(프로그램 시작!)시에 값이 할당되어 출력되기 때문이다.
final DateTime now = DateTime.now();
print(now);
Future.delayed(
Duration(milliseconds : 1000),
(){
final DateTime now2 = DateTime.now();
print(now2);
}
);
반대로 const로 변경하면, 라인 오류가 발생한다.
컴파일시에 DateTime.now()를 컴퓨터가 알수 없기 때문이다.
그래서 const 사용시엔 값을 반드시 지정해주어야 한다.
const DateTime now = DateTime.now();
print(now);
Future.delayed(
Duration(milliseconds : 1000),
(){
const DateTime now2 = DateTime.now();
print(now2);
}
);
보통은 코딩시엔 final을 많이 사용한다.
final과 const에 대해 이런 차이가 있다 정도만 알고있으면 된다.
오늘 스터디 끝.
반응형