다트의 final과 const의 차이는 무엇인가요?
_____- `final`은 변수에 최초 할당된 값이 변경 불가능함을 의미합니다. 즉, 한 번 값이 할당되면 이후 수정할 수 없습니다.
- `const`는 컴파일 타임에 값이 완전히 결정된 변수를 의미하며, 선언과 동시에 반드시 초기화해야 합니다.
Q2: `final`과 `const`의 주요 차이점은 무엇인가요?
- `final` 변수는 런타임에 한 번만 할당할 수 있고, 객체 인스턴스는 런타임에 생성됩니다.
- `const` 변수는 컴파일 타임에 값을 완전히 결정해야 하며, 상수 객체로 메모리에 고정됩니다. 따라서 `const`는 컴파일 시간 상수입니다.
Q3: 언제 `final`을 사용하고 언제 `const`를 사용해야 하나요?
- `final`은 값이 런타임에 정해지지만 변경되지 않아야 할 경우 사용합니다. 예를 들어, API 호출 결과를 한 번만 할당하고 싶을 때.
- `const`는 값을 컴파일 타임에 알고 있고 변경되지 않는 상수를 만들고 싶을 때 사용합니다. 예: 수학 상수, UI 상수 등.
Q4: `const`로 선언된 변수의 제약은 무엇인가요?
- `const` 변수는 반드시 선언 시점에 초기화해야 하며, 초기화 값 또한 컴파일 타임 상수여야 합니다.
- 클래스에서는 `const` 생성자를 통해 불변 객체를 만들 수 있습니다.
Q5: `final`과 `const`는 객체를 다룰 때 어떻게 다른가요?
- `final` 객체는 한 번 할당된 인스턴스를 가리키지만, 그 내부 상태는 변경 가능할 수 있습니다 (객체가 불변이면 변경 불가).
- `const` 객체는 완전히 불변이며 동일한 `const` 객체는 인스턴스가 공유됩니다 (canonicalized).
Q6: `final`과 `const`의 메모리 차이는?
Q7: 코드 예제
```dart
final timeNow = DateTime.now(); // 런타임에 할당, 변경 불가
const pi = 3.14159; // 컴파일 타임 상수
class Circle {
final double radius;
const Circle(this.radius); // const 생성자
double get area => pi * radius * radius;
}
void main() {
final c1 = Circle(2); // 런타임 인스턴스
const c2 = Circle(2); // 컴파일 타임 상수 객체
}
```
요약하면, `final`은 런타임에 한 번만 값이 할당되고 변경 불가한 변수이며, `const`는 컴파일 타임에 완전히 결정된 상수로 프로그램 전체에서 공유되는 불변 객체를 나타냅니다.
이 두 키워드는 불변성을 제공하지만, 각각의 상황에 따라 다르게 작동합니다.
아래에서 이 두 키워드의 차이점을 자세히 설명하겠습니다.
1. `final` - 정의 : `final` 키워드는 변수를 한 번만 할당할 수 있도록 제한합니다.
즉, `final`로 선언된 변수는 초기화된 후에는 다시 값을 변경할 수 없습니다.
- 초기화 시점 : `final` 변수는 런타임에 초기화될 수 있습니다.
이는 프로그램 실행 중에 값을 결정할 수 있다는 것을 의미합니다.
- 예시 : ```dart final currentTime = DateTime.now(); // 런타임에 현재 시간으로 초기화 final name = 'Alice'; // 문자열 리터럴 ``` - 사용 사례 : `final`은 주로 런타임에 결정되는 값이나 객체를 저장할 때 유용합니다.
예를 들어, API 호출 결과나 사용자 입력 등을 저장할 때 사용할 수 있습니다.
2. `const` - 정의 : `const` 키워드는 컴파일 타임에 상수로 평가되는 변수를 선언합니다.
즉, `const`로 선언된 변수는 프로그램이 컴파일될 때 그 값이 결정되며, 이후에는 변경할 수 없습니다.
- 초기화 시점 : `const` 변수는 반드시 컴파일 타임에 초기화되어야 하며, 이는 상수 표현식으로만 초기화할 수 있음을 의미합니다.
- 예시 : ```dart const pi =
3.14; // 컴파일 타임에 결정된 상수 const daysInWeek = 7; // 상수 ``` - 사용 사례 : `const`는 변하지 않는 값이나 객체를 정의할 때 사용됩니다.
예를 들어, 수학 상수, 설정 값, 또는 불변의 리스트와 맵을 정의할 때 유용합니다.
3. 주요 차이점 요약 - 초기화 시점 : - `final`은 런타임에 초기화될 수 있지만, `const`는 컴파일 타임에 초기화되어야 합니다.
- 변경 가능성 : - `final` 변수는 한 번만 값을 할당할 수 있지만, 그 값은 런타임에 결정될 수 있습니다.
반면, `const` 변수는 컴파일 타임에 결정된 상수로, 그 값은 절대 변경할 수 없습니다.
- 메모리 사용 : - `const`로 선언된 객체는 동일한 값의 객체가 여러 번 사용될 때 메모리에서 단일 인스턴스를 공유합니다.
반면, `final`로 선언된 객체는 각기 다른 인스턴스를 가질 수 있습니다.
4. 예시를 통한 이해 ```dart void main() { final currentDate = DateTime.now(); // 런타임에 현재 날짜로 초기화 const daysInWeek = 7; // 컴파일 타임에 결정된 상수 print(currentDate); // 현재 날짜 출력 print(daysInWeek); // 7 출력 // currentDate = DateTime.now(); // 오류: final 변수는 재할당할 수 없음 // daysInWeek = 8; // 오류: const 변수는 재할당할 수 없음 } ``` 결론 Dart에서 `final`과 `const`는 모두 불변성을 제공하지만, 그 사용 방식과 초기화 시점에서 차이가 있습니다.
`final`은 런타임에 결정되는 값에 적합하고, `const`는 컴파일 타임에 결정되는 상수에 적합합니다.
이 두 키워드를 적절히 활용하면 코드의 가독성과 안정성을 높일 수 있습니다.
작성자:
정민지 [비회원]
| 작성일자: 1년 전
2024-09-19 01:52:37
조회수: 165 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
조회수: 165 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
내용이 부정확하다면 싫어요를 클릭해주세요.