guricode

잘 모르면 애매한 Dart 간단 정리 - final, const, late, null 본문

앱/Flutter&Dart

잘 모르면 애매한 Dart 간단 정리 - final, const, late, null

agentrakugaki 2025. 6. 23. 17:42
값을 변경할 수 없는 상수에는
inal과 const가 있음
dart final [타입] [변수이름] = [값]; // 타입 생략 가능
const [타입] [변수이름] = [값]; // 타입 생략 가능

둘 다 상수이기 때문에 똑같다고 생각할 수 있지만

 차이점

  • final
    : 프로그램 실행 중에 초기화가 된다.
    → 실행 중에 값이 결정되는 경우에 사용 (예: 현재 시간)
  • const
    : 컴파일 시점에 초기화된다 (컴파일 타임 상수)
    → 실행 전이든 후든 항상 고정된 값 (예: 원주율)

 late 변수

선언 후에 초기화되는 Non-Nullable 변수
→ 변수가 사용되는 시점에 초기화됨 (지연 초기화)

 
late String name; // 타입 생략 불가능

언제 사용하지?

변수 선언할 때 값을 정하기 어려운 경우

 
late String description;

void main() {
  description = '설명입니다.';
  print(description); // 설명입니다.
}

null을 써도 되지만 컴퓨터는 null을 싫어하기 때문에
가능한 late로 처리하는 게 좋음


 초기화 비용이 큰 변수일 경우

지금 당장 안 쓰는 변수는 late로 지연 초기화

int getTemperature(int temperature) {
  print(temperature);
  return temperature;
}

void main() {
  late int temperature = getTemperature(35);
}

 

temperature가 실제로 사용되기 전까진 실행되지 않음


✅ null은 언제 사용할까?

값이 없는 값이라는 걸 컴퓨터에게 알려주기 위해 사용
→ 타입 뒤에 ? 붙이면 Nullable 변수

int? nullableInt;
print(nullableInt); // null

nullableInt = 1;
print(nullableInt); // 1

✅ null 안전하게 쓰는 법

컴퓨터가 싫어하든 말든 null을 안전하게 쓰고 싶다면
→ ?. 연산자를 사용!!

String? name;
print(name?.length); // null

name = 'Bob';
print(name?.length); // 3

?. 연산자가 붙은 표현식은 해당 변수가 null이면 전체가 null이 됨