[Dart] final vs const

최지원·2024년 5월 9일
0

[Flutter/Dart]

목록 보기
1/1
post-thumbnail

📌final과 const는 어떤 차이점이 있을까?

final과 const는 둘 다 값을 불변으로 만드는 용도로 자주 쓰곤한다.
그러나 막상 사용할 때 이게 무슨 차이점이 있고 어느용도로 쓰이는지 헷갈려 포스팅하게 되었다.

final

  • 런타임에 값이 결정된다. 즉, 동일한 값이더라도 각 인스턴스는 서로 다른 메모리 위치를 가질 수 있다.
  • 변수 자체는 불변이나, final 리스트의 경우는 요소를 변경할 수 있다.
  • 대표적인 사용 예시로 클래스 인스턴스 변수나 네트워크 요청 결과를 저장하는 상황에서 쓰일 수 있다.

클래스 인스턴스 변수

class User {
  final String name;
  final int age;

  User(this.name, this.age); // 인스턴스 생성 시 값 할당
}

// User 인스턴스를 생성하고 이후에 name과 age를 변경할 수 없습니다.
void main() {
  final user = User('Jiwon', 27);
  print(user.name); // Alice
}

네트워크 요청 결과 저장

void main() async {
  final response = await fetchData(); // 네트워크 요청
  print(response); // 결과 출력
}

const

  • 컴파일 시점에서 값이 결정된다. 상수 표현식만 허용된다.
  • 상수화 범위가 더 넓다. Final은 리스트 내 요소는 변경 가능하지만 const는 모든 값이 불변으로 변경이 불가능하다.
  • 컴파일 시점에 값이 결정되고 메모리에 할당되므로, 동일한 const객체가 여러 곳에서 사용되더라도 동일한 메모리 위치를 가리키는 캐싱 효과가 있다.
  • 대표적인 사용 예시로 flutter 위젯을 상수화함으로써 렌더링 및 재사용을 최적화할 수 있고, 변경 되어서는 안되는 상수를 만들어야 할 때 사용된다

위젯 상수화


Widget build(BuildContext context) {
  return const Text('Hello, World!'); // 상수 위젯
}

상수 표현식

const double pi = 3.14159265359; // 상수 표현식

요약

final은 런타임에 한 번만 값을 할당하는 의미이고, const는 상수 표현식이라는 부분에서 가장 큰 차이점을 두고있다. 불변이라는 부분은 같지만 위의 차이점을 이해하고 상황에 맞게 사용하여 코드의 안정성과 성능을 향상시킬 수 있다

profile
안드로이드, 플러터 주니어입니다

0개의 댓글