Post

Dart에서 final과 const의 차이점

Dart 언어를 사용하면서 final과 const의 차이를 이해하는 것은 중요합니다. 이 두 키워드는 모두 변수를 상수로 선언하는 데 사용되지만, 그 작동 방식에는 중요한 차이가 있습니다. 이 글에서는 Dart의 final과 const의 차이점에 대해 설명합니다.

1. final 키워드

final 키워드로 선언된 변수는 한번만 값이 할당될 수 있습니다. 즉, 변수가 초기화된 이후에는 값을 변경할 수 없습니다. final 변수는 런타임에 초기화됩니다.

1.1. final 예시

아래 코드는 final에 대한 간단한 예제 코드입니다

1
2
3
4
5
6
void main() {
  final String userName = "홍길동";
  // userName = "이순신"; // Error: Can't assign to the final variable 'userName'.
  
  print(userName); // 홍길동 출력
}

이 예제에서 userName 변수는 final로 선언되었기 때문에, 값을 다시 할당하려고 하면 오류가 발생합니다.

2. const 키워드

const 키워드는 컴파일 타임 상수를 정의하는 데 사용됩니다. const 변수는 컴파일 타임에 초기화되며, 초기화된 이후 절대 변경할 수 없습니다.

2.1. const 예시

아래 코드는 const에 대한 간단한 예제 코드입니다

1
2
3
4
5
6
void main() {
  const int maxUsers = 100;
  // maxUsers = 200; // Error: Can't assign to the const variable 'maxUsers'.
  
  print(maxUsers); // 100 출력
}

이 예제에서 maxUsers 변수는 const로 선언되어 컴파일 타임에 상수로 처리됩니다.

3. final과 const의 주요 차이점

그럼 finalconst은 동일하게 상수 역할을 하기 때문에 재할당이 불가능한데, 무슨 차이가 있는지 살펴봅시다.

3.1. 값 할당 시점

  • final: 런타임에 값이 할당됩니다. 즉, 코드가 실행되는 동안 값을 할당할 수 있습니다.
  • const: 컴파일 타임에 값이 할당됩니다. 즉, 컴파일 시에 값이 고정됩니다.

3.2. 적용 범위

  • final: 클래스 변수로 사용할 수 있으며, 런타임에 값이 할당됩니다.
  • const: 클래스의 인스턴스 변수로 사용할 수 없고, 컴파일 타임 상수로만 사용할 수 있습니다.

3.3. 메모리 할당

  • final: 프로그램이 실행될 때 메모리에 할당됩니다.
  • const: 컴파일 타임에 메모리에 할당되어 프로그램 실행 시 항상 동일한 메모리 주소를 가리킵니다.

4. 언제 final과 const를 사용할까?

4.1. final을 사용하는 경우

  • 값이 한 번만 설정되고 변경되지 않는 경우
  • 초기화 시점이 런타임인 경우

4.2. const를 사용하는 경우

  • 값이 프로그램 실행 동안 절대 변경되지 않음
  • 컴파일 타임에 미리 알 수 있는 값인 경우

5. 결론

Dart에서 finalconst는 모두 상수를 선언하는 데 사용되지만, 사용 시점과 적용 범위에서 차이가 있습니다. final은 런타임 상수를 선언하는 데 사용되며, const는 컴파일 타임 상수를 선언하는 데 사용됩니다.

This post is licensed under CC BY 4.0 by the author.