Flutter/Dart

[Dart] 기본 - Final, Const

코르피 2023. 12. 1. 15:50
반응형

 

 

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