Flutter

[Flutter] Dart에서 const와 final의 차이점

burgerkim 2022. 4. 7. 14:21

const 와 final

둘은 값을 한 번 지정하게 되면 바꿀 수 없다는 공통적인 속성을 가지고 있다.

하지만 다른점이 존재하는데 가장 큰 차이점은 생성 시점이라고 볼 수 있다.

 

const

const로 위젯 생성

위의 코드와 같이 인스턴스를 생성하는 코드를 만났을 때 일반적인(const가 아닌) 인스턴스화 시 무조건 새로운 인스턴스를 생성한다.

하지만 const로 선언된 변수 또는 위젯의 경우 생성을 앱이 시작될 때 메모리에 같이 등록하여 해당 생성 시점에 실질적으로 새로 생성되는것이 아닌 기존에 메모리에 올라가있던 인스턴스를 매번 재사용하게 된다.

setState 등 상태 변경에서 새로운 인스턴스를 생성하고 기존의 인스턴스는 메모리에 남게 되어 일정 시점에서 GC에 의해 지워지는데 빈번한 생성은 메모리 효율을 저하시킬 수 있다. 하지만 const를 통한 재사용 시 이러한 사용하지 않는 인스턴스가 메모리에 남게되는 메모리 낭비를 효율적으로 관리할 수 있다.

 

final

final도 const와 마찬가지로 처음 선언한 값을 변경할 수 없다.

하지만 다른점은 const의경우 선언부에서 무조건 값을 부여해주어야하지만 final은 선언 시 값을 부여하지 않고 이후 최초 1번 값을 부여해줄 수 있다.

그래서 선언부의 코드만으로는 컴파일러가 해당 변수의 값을 알 수 없기 때문에 const처럼 앱 실행 시 메모리에 넣어 관리할 수 없다.