카테고리 없음

Dart - const와 final의 차이는?

koldin 2023. 2. 12. 00:02

dart엔 const와 final이 있다.

흔히 js에서 보이는 상수 const, java에서 보이는 상수 final인데 다트에선 이걸 둘 다 쓰는 이유가 뭘까?

 

그걸 알기 위해선 일단 const와 final의 차이점을 알아야 한다.

const는 컴파일 단계의 상수

final은 런타임 단계의 상수

이다.

 

쉽게 말하자면 final은 api의 값을 할당한다든지 하는 런타임에서 가변적으로 들어오는 값을 상수로 할당할 수 있다.

const는 하드코딩을 할 때와 같이 코드 상에서 부터 값을 불변하게 적어 놓는 것을 상수로 할당할 수 있다.

ex) 


const a = 13; // 가능
const a; // 불가능

final b = 13; //가능
final b; // 일부 상황에서 가능

class Human {
	// 가능
	final age;
    final height;
    
    // 불가능
    const age;
    const height;
    
    const live = true; // 가능
    
    Human(this.age, this.height); // 생성자에서 final 필드에 값을 넣어줌
}

그럼 굳이 왜 저렇게 나눠 놨을까?

 

이유는 신기하게도 최적화 단계에서 나온다.

 

const와 final의 가장 큰 차이는 const는 변수로서 할당하지 않는다 라고 생각할 수 있을 것이다.

const로 할당된 상수의 특징은 보고 쓰기 편하게 할당한 변수이다. 가변적이지도 않다.

그럼 굳이 변수로서 할당할 필요가 없는 것이다.

 

변수로 할당 시 해당 변수만큼의 메모리도 필요로 하니 말이다.

 

const a = 15;
const b = 10;

final result = a + b;

// translate to

final result = 25;

위와 같이 최적화를 해버린다.

 

정리하자면 const와 final은 최적화를 위해 나눈 것이다.