Dart 언어에서의 타입 캐스팅(형변환) 방법에는 무엇이 있고, 어떤 차이가 있는지 알아보겠습니다.
우선 Dart에서는 자동 형변환이 되지 않습니다.
자동 형변환이란 작은 타입이 큰 타입으로 이동될 때 큰 타입에 맞게 자동적으로 형변환이 되는 것을 말합니다.
JAVA와 같은 언어에서는 자동 형변환이 가능하지만 Dart에서는 불가능합니다.
int a = 1;
double b = a;
int a = 1;
double b = a;
// 오류: A value of type 'int' can't be assigned to a variable of type 'double'.
이렇게 오류가 나타나기에 Dart에서 형변환을 하려면 특정 방법들을 사용해야 합니다.
어떤 방법들이 있는지 살펴보겠습니다.
앞에 to~가 붙는 메소드들을 활용할 수 있습니다.
대표적으로 toString(), toInt(), toDouble()가 있으며, to 뒤에 붙은 타입으로 변환할 수 있습니다.
int a = 10; // int형 a 선언
double b = a.toDouble(); // int형 a의 값을 double형 b에 저장
String c = b.toString(); // double형 b의 값을 String형 c에 저장
타입.parse('문자열') 형태로 사용할 수 있습니다.
int.parse(a), double.parse(a), Uri.parse(a)와 같이 사용 가능하며 parse의 인자로 문자열이 들어가야 하기 때문에 문자 데이터를 변환해야 할 때 유용합니다.
String value = '1234';
int number = int.parse(value); // String형 '1234'를 int형 1234로 저장
뒤에 as int, as double 과 같은 형식으로 붙여서 형변환이 가능합니다.
int a = 1;
double b = a as double;
그러나 as 연산자는 유의해야 할 부분이 있습니다.
String a = 'Hello World!';
double b = a as double;
// 런타임 오류, type 'String' is not a subtype of type 'double' in type cast
형변환에 맞지 않은 값을 넣어도 타입만 같으면 컴파일 에러가 발생하지 않습니다.
실행했을 때 String형 Hello World!를 double형으로 억지로 바꾸려니 런타임 에러가 발생합니다.
as 연산자는 이 점을 유의해서 코드를 작성해야 합니다.
자료 :
https://api.dart.dev/stable/3.3.0/dart-core/ArgumentError/toString.html
https://api.flutter.dev/flutter/dart-core/int/parse.html
https://dart.dev/language/operators#type-test-operators