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
'Flutter > 개념' 카테고리의 다른 글
| Dart 기본기 - Dart 3.0 클래스 (1) | 2025.02.05 |
|---|---|
| Dart 기본기 - Stream, await, async, yield (2) | 2025.02.05 |
| Dart 기본기 - Future, await, async (3) | 2025.02.05 |
| Dart 기본기 - null 사용법 (2) | 2025.02.03 |
| Dart 기본기 - dynamic vs var 차이 (2) | 2025.02.03 |
댓글