Dart의 기본 문법인 자료형과 변수 선언에 대한 포스팅입니다.
자료형
정수형 - int
1, 2, 3, -999, -765... 등 정수 형태의 데이터를 의미합니다. 'int' 명령어로 해당 자료형의 변수 선언합니다.
실수형 - double
0.01, 1.02, 2.34, -3.54... 등 실수 형태의 데이터를 의미합니다. 'double' 명령어로 해당 자료형의 변수 선언합니다.
숫자 - num
정수와 실수 모두 포함하는 숫자 자료형입니다. 'num' 명령어로 해당 자료형의 변수 선언합니다.
문자열 - String
문자열 데이터 자료형입니다. 'String' 명령어로 해당 자료형의 변수 선언합니다.
참, 거짓 - bool
참(true), 거짓(false) 값을 가지는 자료형입니다. 'bool' 명령어로 해당 자료형의 변수 선언합니다.
동적 자료형 - dynamic
할당되는 값에 따로 자료형이 동적으로 바뀌는 자료형입니다. 'dynamic' 명령어로 해당 자료형의 변수 선언합니다.
변수 선언하기
타입(자료형) 지정하여 변수 선언하기
변수를 선언하는 단계에서부터 자료형을 지정하여 변수를 선언할 수 있습니다.
// 문법 --> 자료형 변수이름;
int intVariable; // 정수(int)형 변수 선언.
double doubleVariable; // 실수(double)형 변수 선언.
num numVariable; // 숫자(num)형 변수 선언.
String stringVariable; // 문자(String)열 변수 선언.
bool boolVariable; // 참,거짓(bool) 변수 선언.
dynamic dynamicVariable; // 동적자료형 변수 선언.
해당 변수는 지정된 자료형의 데이터만 할당될 수 있습니다.
int intVariable = 20; // --> 정수형 변수에 정수형 데이터 할당, 문제 없음
intVariable = 30.5; // --> !!!Error 정수형 변수에 실수형 데이터를 할당하려 하기에 에러발생.
num numVariable = 20;
numVariable = 30.5; // --> num 자료형은 정수, 실수 모두 포함함으로 문제없음.
String stringVariable = 10; // --> !!!Error 문자열 변수에 정수형 데이터를 할당하려 하기에 에러발생.
Nullable, NonNullable
기본적으로 int, String처럼 타입을 지정한 변수는 non-nullable (null이 될 수 없는) 변수입니다.
하지만 해당 변수들도 자료형 뒤에 '?'를 붙이게 되면 nullable (null이 될 수 있는) 변수가 됩니다.
String stringVariable = null // !!!Error 발생
String? stringVariable = null // 정상작동
추가적으로 nullable변수 뒤에 '!'를 붙이게 되면 해당 변수는 현재 null이 아니라는 의미를 가집니다.
String? stringVariable = null;
print(stringVariable!); // !!!Error 발생 null이아니라고 명시했는데 null값이 들어있음
String? stringVariable = 'value';
print(stringVariable!); // 정상작동
타입 추론 변수 선언
'var', 'dynamic' 명령어를 사용하면 타입(자료형)을 명시하지 않고 변수를 선언할 수 있습니다.
타입 추론이라고 하는데 값이 할당되면 할당된 값에 따라 자료형이 정해집니다.
var varVariable = 20;
dynamic dynamicVariable = 30;
print(varVariable.runtimeType); // int
print(dynamicVariable.runtimeType); // int
'var'는 초기화(처음 값을 설정) 때 타입(자료형)으로 고정되며,
'dynamic'은 값을 설정할 때마다 해당 값의 자료형으로 타입이 바뀝니다.
var varVariable = 20;
print(varVariable.runtimeType); // int
varVariable = 20.0; // !!! 정수타입변수에 실수데이터 할당으로 Error 발생
dynamic dynamicVariable = 30;
print(dynamicVariable.runtimeType); // int
dynamicVariable = 30.5;
print(dynamicVariable.runtimeType); // double
상수 선언하기
상수는 변수와 다른 개념으로 변하지 않는 값을 의미합니다.
'final', 'const' 명령어를 앞에 붙여 선언하며, 선언과 동시에 초기화(값을 할당)를 꼭 해주어야 합니다.
상수는 변하지 않는 값이기 때문에 초기화(처음 값을 설정) 이후 값을 수정할 수 없습니다.
// 문법 --> final/const 자료형 상수이름 = 값;
final String stringVariable = 'Hello';
final int intVariable = 20;
const double doubleVariable = 30.1;
const dynamic dynamicVariable = 20;
stringVariable = 'World'; // !!! 초기화이후 값 수정 불가 Error 발생
💡 'final/const' 뒤에 'var'는 사용할 수 없습니다. 'var'는 자료형이 아니기 때문입니다.
다만 'final/const' 뒤에 아무 타입도 입력하지 않는 경우 즉 생략할 수 있는데
이때 'var'를 쓴 것처럼 초기화 데이터의 타입으로 자동 세팅됩니다.
'dynamic'은 동적 자료형 즉, 자료형임으로 사용할 수 있습니다.
💡 'final', 'const'의 차이점
'const'는 빌드 타임에 값을 알 수 없는 경우 사용할 수 없고
'final'은 빌드 타임에 값을 몰라도 사용할 수 있다.
예) const DateTime now = DateTime.now()
위 코드에서 DateTime.now()는 코드가 실행될 때 값이 나오는 구조입니다.
즉, 빌드 타임에서는 값을 알 수 없기에 'const'로 선언 불가능합니다.