본문 바로가기
Flutter + Dart/Flutter + Dart TIP

dart 선언할 때 final과 const 차이

by GREEN나무 2025. 5. 7.
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