const
와 final
설명 및 사용 시점const
와 final
의 개념const
란?const
로 선언된 객체는 변경 불가능.final
이란?const
와 final
의 공통점변수 재할당 방지 기능:
final a = 1;
a = 2; // 불가능
const b = 1;
b = 2; // 불가능
const
와 final
의 차이점용도 차이:
final
: 변수의 참조 재할당을 방지하는 역할.const
: 컴파일 타임에 계산될 수 있는 상수를 선언하는 역할.late 키워드 사용 가능 여부:
final
: late
키워드 사용 가능.const
: late
키워드 사용 불가능 (컴파일 타임에 선언되므로 나중이 없음).값 변경 여부:
final
: 값을 변경할 수 있습니다.const
: 값을 변경할 수 없습니다.객체 생성과 관련된 차이점:
final
은 변수 재할당 방지만 담당할 뿐, 객체 생성과 관련이 없기 때문에 각기 다른 배열을 만듭니다.const
는 값이 동일하기 때문에 배열을 하나만 만든 뒤 참조를 공유합니다.final a1 = [];
final a2 = [];
final a3 = [];
final a4 = [];
const b1 = [];
const b2 = [];
const b3 = [];
const b4 = [];
const
를 사용해야 할까?값이 미리 결정되어야 할 때:
const double pi = 3.141592653589793;
const String greeting = 'Hello, World!';
변경되지 않는 불변 리스트를 만들 때:
const List<int> numbers = [1, 2, 3, 4, 5];
프로그램 전체에서 사용할 상수를 만들 때:
const int maxConnections = 100;
final
을 사용해야 할까?값이 실행 중에 결정될 때:
final DateTime now = DateTime.now();
final String userInput = getUserInput();
한 번만 설정되고 이후 변하지 않아야 할 때:
final int result;
if (condition) {
result = 10;
} else {
result = 20;
}
클래스 속성으로, 생성자에서 설정되고 이후 변하지 않도록 할 때:
class Person {
final String name;
final int age;
Person(this.name, this.age);
}
const
: 값이 컴파일 시점에 결정되고 절대 변하지 않을 때 사용.
final
: 값이 런타임 시점에 결정되지만 한 번만 할당될 때 사용.
const
:
final
:
// const 예제
const double pi = 3.141592653589793; // 항상 변하지 않는 수학 상수
const String greeting = 'Hello, World!'; // 변하지 않는 문자열
const List<int> numbers = [1, 2, 3, 4, 5]; // 불변 리스트
// final 예제
void main() {
final DateTime now = DateTime.now(); // 프로그램 실행 중에 결정되는 값
final String userInput = getUserInput(); // 사용자 입력 값
print('현재 시간: $now');
print('사용자 입력: $userInput');
}
// 사용자 입력을 받는 함수 (예제용)
String getUserInput() {
return 'Hello, Dart!';
}
// late 키워드와 final 예제
late final int lateValue;
void setLateValue() {
lateValue = 42;
}
// const와 final의 객체 생성 차이점
void main() {
final a1 = [];
final a2 = [];
final a3 = [];
final a4 = [];
const b1 = [];
const b2 = [];
const b3 = [];
const b4 = [];
print(identical(a1, a2)); // false
print(identical(b1, b2)); // true
}