본문 바로가기

Flutter

[Flutter] final 과 const

728x90

 

 

공통점

 

변수 값이 한 번 할당되면 변경할 수 없다.

 

void main() {
  final int myFinal = 20;
  const int myConst = 70;
  
  myFinal = 30; // 에러
  myConst = 50; // 에러
}

 

 

차이점

 

final

- run-time constant(런타임 시 상수화)

초기화 되는 시점이 앱이 실행되었을 때 또는 사용자가 특정 행동(버튼 클릭 또는 값 입력 등)을 함으로써 값이 할당됨을 의미한다.

 

- 값이 변경되어야 한다면 build() 내에서 rebuild 될 수 있다.

 

 

1. 변수 선언 시 초기화

 

void main() {
  final int myFinal = 20;
}

 

 

2. 객체 생성 시 외부 데이터를 받아서 생성자를 통해 초기화

 

class Person() {
  final int age;
  String name;
  
  // 생성자
  Person(this.age, this.name);
}

void main() {
  // 생성자를 통해 값을 초기화
  Person p1 = new Person(21, 'Tom');
  print(p1.age); // 출력 결과 : 21
}

 

 

 

const

- compile-time constant(컴파일 시에 상수화)

컴파일 시 값이 초기화 되어 있어야 하고 이후에는 절대 변하지 않는다.

즉, 선언과 동시에 값을 초기화를 해야한다.

 

 

void main() {
  // 에러 발생
  const time = DateTime.now();
}

 

따라서, 위와 같이 할당할 수 없다.

현재 시간은 호출될 때마다 매번 값이 변경되며 런타임 시에 값이 지정되기 때문에

컴파일 시에 상수값이 필요한 const 에는 할당될 수 없다.

이 때에는 final을 사용할 수 있다.

 

void main() {
  final time = DateTime.now();
}

 

 

컴파일부터 상수가 되어서 런타임 시에도 그 값이 반드시 유지되어야 하는 변수에는 const 변수를 사용한다.

const 를 사용해서 rebuild 될 필요 없는 위젯들의 rebuild 를 방지함으로써 앱의 성능을 향상 시킬 수 있다.

 

 

 

https://youtu.be/akc51-j84os

 

 

 

728x90