변수 선언
var
var name = 'Jake Seo';
- 타입 추론 (Type Inference): 변수에 들어가는 초기 값을 기준으로 변수의 타입이 추론되어 결정된다.
- 불변성 (Immutability): 컴파일 될 때, 추론된 타입으로 var 가 치환된다.
- 이 말은 var 로 선언한 변수의 타입이 일단 추론되면, 컴파일 시에 실제 타입으로 변경됐으니 더이상 타입을 변경할 수 없다는 것이다.
dynamic
dynamic name = 'Jake Seo';
name = 1
- 동적 선언: 변수의 타입이 고정되지 않아 계속 다른 타입의 값을 저장할 수 있다.
직접 타입 명시하기
String name = 'Jake Seo';
int age = 50;
double weight = 101.11;
bool isMale = true;
- 타입을 직접 명시해주면 코드가 더욱 직관적이어서 알아보기 쉽다.
별 일 없는 한 이 방식을 제일 많이 쓰게 될 것 같다.
상수 선언
final
final String name = 'final name.';
name = 'I can not change final name.'; // ERROR
final
로 선언된 것은 상수이기 때문에 변경할 수 없다.
const
const String name = 'const name.';
name = 'I can not change const name.'; // ERROR
const
로 선언된 것은 상수이기 때문에 변경할 수 없다.
final
(런타임) 과 const
(빌드 타임) 비교
DateTime.now()
는 런타임에 순간의 날짜/시간을 제공해야 하기 때문에 런타임에 값이 생성된다.final
과const
는 각각 런타임에 생성되는 값을 넣을 수 있냐 없냐로 갈린다.
final DateTime now = DateTime.now();
final
은 런타임에 알 수 있는 값을 넣을 수 있다.final
에 들어갈 값은 빌드 타임에 값을 알 수 없어도 된다.
const DateTime now = DateTime.now(); // ERROR
const
는 런타임에 알 수 있는 값을 넣을 수 없다.const
에 들어갈 값은 빌드 타임에 값을 알 수 있어야 한다.
나라면 일단
const
를 최대한 활용하고 안되는 곳에 마지못해final
을 쓸 것 같다.
반응형
'Dart' 카테고리의 다른 글
다트 (Dart) 언어의 생성자 (Constructors) 정리 (0) | 2023.10.13 |
---|---|
다트(Dart) 언어의 클래스(Class) 정리 (0) | 2023.10.12 |
다트(Dart) 언어의 클래스 제어자 (Class modifier) 정리 (0) | 2023.10.12 |
다트(Dart) 언어의 확장 메서드 (Extension methods) 정리 (0) | 2023.10.10 |
다트의 오류 처리 방식 (1) | 2023.10.08 |