플루터

Flutter chapter-05-03 BMI 계산 final, const 설명 및 쓰는 이유

코징 2022. 2. 10. 19:45

일단 final과 const를 설명하기 위해서는 '컴파일러'와 '인터프리터'를 알아야 된다.

 

컴파일러와 인터프리터는 사람이 사용하는 언어를 컴퓨터가 이해하는 언어로 변경하는 것으로 동일하지만, 어떻게 번역을 하느냐에 따라 두 가지 기능으로 분리가 되는 것이다.

 

1. 컴파일러

컴파일러 같은 경우 전체 코드를 한 번에 번역해서 컴퓨터에게 전달해준다.

때문에 컴파일러 같은 경우에 처음 번역하는데(실행파일을 만드는데) 오랜 시간이 걸리지만, 실행 파일이 생성돼서 다음에 실행할 때 기존에 생성되었던 실행 파일을 실행하기 때문에 실행 시간이 빠르다.

 

2. 인터프리터

인터프리터 같은 경우 한 줄씩 번역을 진행하기 때문에 컴파일러보다 번역 시간은 빠른 편이다. 하지만 실행파일을 만들지 않기 때문에 실행할 때마다 위에서부터 다시 진행되기 때문에 실행 속도가 느리다.

 

그렇다면 타트는 무슨 언어일까? Flutter의 타트 언어는 컴파일 언어이다.

컴파일 언어는 컴파일 타임과 런타임이 존재한다. 

컴파일은 사람의 언어를 컴퓨터의 언어로 번역한다고 했다. 그렇다면 런타임은 번역한 컴퓨터의 언어를 프로그램 사용자에 의해서 실행되어지는 때를 의미한다.

 

const은 컴파일 때 지정된 변수를 고정적으로 사용한다.

final은 런타임 시간 때 지정된 변수를 고정적으로 사용한다.

 

예를 들면

void main() {
	const DateTime nowTime = DateTime.now(); 
    //error 발생 const는 컴파일 될 때 지정되어 있는 고정 값을 사용
    //DateTime.now()는 실행되는 시간의 값을 가져오기 때문에 런타임때 작동한다.
    
    final DateTime nowTime = DateTime.now(); 
    //final은 런타임때 작동 되는 값도 고정으로 넣을 수 있기때문에 실행 가능하다.
}

 

그렇다면 왜? const와 final을 사용하는 것일까?

- 변수의 값을 방어를 해 준다. 중요한 값을 임의의 함수에서 변경하지 못하게 함으로써,

프로그램을 좀 더 명확하게 해준다.

- 컴파일 시점에 상수가 이미 되어있어서 런타임 때 처리할 데이터들을 줄여준다.

이는 사용자 입장에서 프로그램 속도를 올리는 측면으로 작용한다.

 

정리하자면

final과 const는 변수의 값을 방어를 해주는 것에는 모두 같지만, 속도적인 측면에서 컴파일 시점에 고정적으로 두고자 하는 것은 const, 런타임 시점에서 고정적으로 두고 싶은 것은 final을 쓰면 되겠다.