본문 바로가기
Flutter/개념

Dart 기본기 - final vs const 차이

by 윤숩 2025. 2. 3.
728x90
728x90

// final과 const는 값이 변경되지 않는(immutable) 변수를 선언할 때 사용됩니다.
// 하지만 작동 방식이 다르므로 상황에 맞게 선택해야 합니다.

 


1. final (런타임 상수)

 

  • 한 번만 할당 가능 (재할당 불가능).
  • 런타임(Runtime) 시점에 값이 결정됨.
  • 실행 중에 결정되는 값도 저장 가능.

final 예제

void main() {
  final int age = 25;
  print(age); // 출력: 25

  final now = DateTime.now(); // 런타임에 결정 가능
  print(now); // 현재 시간 출력 (예: 2024-02-03 12:34:56.789)
  
  // age = 30; // ❌ 오류! final 변수는 재할당 불가
}

 

 

특징

  • final 변수는 한 번만 할당 가능하지만 컴파일 시 값이 고정될 필요 없음.
  • DateTime.now() 같은 런타임 값 할당 가능.

2. const (컴파일 타임 상수)

  • 컴파일 타임(Constant) 시점에 값이 결정됨.
  • 완전히 불변(immutable) → 실행 중에 변경되지 않음.
  • const 변수는 런타임 값 할당 불가능.

const 예제

void main() {
  const double pi = 3.14159;
  print(pi); // 출력: 3.14159

  // const now = DateTime.now(); // ❌ 오류! const 변수는 런타임 값 할당 불가
}

 

특징

  • const 변수는 반드시 컴파일 시점에 값을 알 수 있어야 함.
  • DateTime.now()처럼 실행 중에 결정되는 값은 할당 불가능.

  final const
값 결정 시점 런타임(Runtime) 컴파일 타임(Compile-time)
재할당 가능 여부 ❌ 불가능 ❌ 불가능
런타임 값 할당 가능 여부 ✅ 가능 ❌ 불가능
메모리 사용 인스턴스마다 별도로 저장 프로그램 전체에서 공유

 

객체 선언 (final vs const)

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

void main() {
  final person1 = Person("Alice"); // ✅ 가능
  const person2 = Person("Bob"); // ❌ 오류! (const 객체는 상수값만 가능)
}

 

  • final 객체는 생성 시 값이 할당될 수 있음.
  • const 객체는 컴파일 타임에 값이 확정되어야 함.

 

 

728x90
728x90

댓글