반응형
Final, Const
두 키워드 모두 변수를 변경할 수 없다.
- final : 한번만 set 되고 변경할 수 없다.
- const : 컴파일 시점에 set 되어있어야 한다.
var, final 변수들은 스택이나 힙에 저장된다.
const 변수들은 컴파일 타임에 다른 곳에 계산되어 저장된다.
이후 변수가 그 곳에 있는 값을 참조한다.
그래서 const로 생성된 같은 값의 인스턴스는 같은 객체이다.
class Point {
static const _initX = 0;
static const _initY = 0;
int _x;
int _y;
int get x => _x;
int get y => _y;
Point({
int x = _initX,
int y = _initY,
}) : _x = x,
_y = y;
}
Point를 초기화 할 때
named 파라미터의 default 값은 _initX다.
컴파일 시점에 정해진 값이어야하므로 컴파일러가 인식하도록
const를 사용한다. (final은 의도는 같지만 인식하지 못한다.)
final point = Point();
// const point = Point(); // compile Error
인스턴스 변수는 final은 가능하나 const가 될 수 없다.
const Point({
int x = _initX,
int y = _initY,
}) : _x = x,
_y = y;
const point = Point(); // OK
하지만 const 생성자가 되면 가능하다.
그렇다면
setter만 없으면 되는 것 같다.
모든 인스턴스 변수는 setter를 가진다.
초기화를 하지 않는 late final 도 setter가 생성된다.
고로 const 생성자가 가능한 조건
- 내부에 있는 값이 컴파일 시점에 예상되어야 한다.
- 모든 변수가 const, final로 설정되어야 한다.
Const 는 중복하지 않는다.
반응형
'Flutter > Dart' 카테고리의 다른 글
[Dart] 기본 - Object vs dynamic (0) | 2023.12.04 |
---|---|
[Dart] 기본 - Memory (0) | 2023.12.02 |
[Dart] 기본 - Record (1) | 2023.11.30 |
[Dart] 기본 - Classes, Abstract, Mixin (0) | 2023.11.29 |
[Dart] 기본 - extends, with, implements (0) | 2023.11.29 |