728x90
https://dart-ko.dev/language/variables#final-const
✅ Dart의 final과 const 완전 정복!
Dart에서는 변수를 선언할 때 값이 변경되지 않음을 명시할 수 있는 두 가지 키워드가 있습니다: final과 const. 이를 적절히 사용하면 불변성(immutability)을 유지하며 안정적인 코드를 작성할 수 있어요. 💪
🔹 final 키워드
- 한 번만 값을 설정할 수 있는 변수입니다.
- 런타임에 값이 결정될 수 있습니다.
- 타입을 생략하거나 명시적으로 지정할 수 있어요.
final name = 'Bob'; // 타입 생략
final String nickname = 'Bobby'; // 타입 지정
값을 변경하려고 하면 오류가 발생합니다.
name = 'Alice'; // ❌ 에러! final 변수는 재할당 불가
📝 노트: 클래스의 인스턴스 변수로 final은 사용할 수 있지만, const는 사용할 수 없습니다.
🔹 const 키워드
- 컴파일 타임 상수를 선언할 때 사용합니다.
- final보다 더 엄격합니다.
- 내부적으로는 const 변수도 final입니다.
const bar = 1000000; // 압력 단위 (dynes/cm2)
const double atm = 1.01325 * bar; // 표준 대기압 계산
📌 클래스 레벨에서는 static const로 선언해야 합니다.
class Constants {
static const appName = 'MyApp';
}
🔹 const 생성자와 리터럴
const는 변수뿐만 아니라 리터럴 상수 값이나 상수 생성자에도 사용할 수 있어요.
var foo = const []; // const 리스트
final bar = const []; // final + const
const baz = []; // 완전 상수 리스트
baz는 컴파일 타임에 완전히 고정된 리스트입니다. 반면 foo는 이후 값 변경이 가능합니다.
foo = [1, 2, 3]; // ✅ 가능
baz = [42]; // ❌ 에러! const 변수는 변경 불가
🔹 const의 고급 사용법
Dart의 const는 아래와 같은 문법에서도 활용할 수 있습니다:
const Object i = 3;
const list = [i as int]; // 타입 캐스트
const map = {if (i is int) i: 'int'}; // 컬렉션 if
const set = {if (list is List<int>) ...list}; // 전개 연산자
🔸 final vs const 요약 비교
항목 | final | const |
선언 시점 | 런타임에 값 결정 가능 | 컴파일 타임에 값 결정 필요 |
재할당 가능 여부 | ❌ 불가 | ❌ 불가 |
객체의 필드 수정 | ✅ 가능 (객체가 mutable이면) | ❌ 불가 (객체와 필드 모두 불변) |
🚨 주의할 점
- final 변수는 객체 자체를 변경할 수 없지만, 객체의 속성(필드)은 바뀔 수 있습니다.
- const 객체는 자기 자신도, 필드도 완전히 불변입니다.
final list = [1, 2, 3];
list[0] = 99; // ✅ 가능 (리스트는 mutable)
const clist = [1, 2, 3];
clist[0] = 99; // ❌ 에러! const 객체는 완전 불변
🧠 마무리
- 변경되지 않을 값이라면 var보다 final 또는 const를 적극적으로 사용하세요.
- 컴파일 타임에 결정될 수 있는 값이라면 const를 사용해 최적화를 기대할 수 있어요.
- 코드 안정성과 가독성 향상에 큰 도움이 됩니다.
'Flutter + Dart > Flutter + Dart TIP' 카테고리의 다른 글
Container에서 테두리를 만드는 방법 (0) | 2025.05.13 |
---|---|
기타 (0) | 2025.05.13 |
jdk 환경설정 경로가 맞는데도 올류 날 때 (0) | 2025.05.09 |
Flutter Icon 모음 (0) | 2025.05.09 |
개발환경 (0) | 2025.05.07 |