[ 앱 개발자 도전기 : 크로스플랫폼_Flutter & Dart ]
Flutter 개발을 위한 Dart 문법 간단 정리. - [1] 변수
∇ Dart 문법 간단 정리 - 변수
목 차
1. 다트의 기본 변수 타입
2. 다트 변수 키워드
Ⅰ. 다트의 기본 변수 타입.
- 다트는 타입 언어입니다.
- 변수마다 타입을 지정해줘야 합니다.
- 기본적으로 null safety가 적용되어 있어서,
null을 사용하려면, 타입 키워드 뒤에 ?을 붙여주어야 합니다.
- C++템플릿과 마찬가지로, 다트에선 제네릭을 제공합니다.
- C++의 auto와 마찬가지로 타입 추론을 지원합니다.
- > var변수(기본적으로 컴파일러가 알아서 타입을 추론)
● num
: int 와 double 형 변수를 모두 나타냅니다.
num number1 = 10;
num number2 = 10.0;
● int
: integer 32비트 정수형입니다.
int number = 10
● double
: double 64 비트 정수형입니다.
double number = 10.0;
● String
: 문자열을 나타냅니다. C++의 std::string 과 같은 역할입니다.
다트에선 String, List 등과 같은 컨테이너는 앞 글자가 대문자임에 주의해야 합니다.
String str1 = "Hello world";
● bool
: 참(true) 과 거짓(false)를 나타내는 논리값입니다.
bool flag0 = true;
bool flag1 = false;
● dynamic
: 어떤 타입이든 받을 수 있습니다. C++의 std::any 와 비슷합니다.
또는 파이썬 * 자바스크립트와 같은 타입리스 형 언어들과 비슷한 역할입니다.
dynamic a = 1;
a = 'hello';
a = 1.1; a = true;
위 코드에서 dynamic으로 선언된 a에 대해 어떠한 타입이든 대입하는 것도 허용됩니다.
● List
: 리스트 양식입니다.
C++의 std :: list 처럼 더블 링크드 리스트의 '리스트'는 아니고,
C++의 std :: vector 와 같이 '배열 형태' 로 구현되어 있습니다.
위에서 말한 String 처럼 첫글자가 대문자임에 주의해야합니다.
var list1 = [1, 2, 3];
var list2 = [0, ...list1];
print(list2); // [0, 1, 2, 3]
List<String> list_str = ['a', 'b', 'c'];
List<int> list_int = [1, 2, 3]; List<num> list_num = [1, 2, 3, 3.14];
List<dynamic> list_dynamic = [1, 2, 3.14, 'a', 'b', true];
-> list2를 보면, ... 이란 연산자를 사용합니다.
이는 Spread Operator라 하며, " 한 리스트 안에 또 다른 리스트를 삽입할 때 " 사용합니다.
++ List에는 length 등의 편리한 메소드 함수들을 추가 제공합니다.
● Map
: C++의 std :: unordered_map과 같습니다.
-> key들이 정렬되지 않음을 주의해야합니다.
+ 대신, 해시맵과 마찬가지로 O(1)의 시간 안에 삽입 삭제가 이루어집니다.
var gifts = { // Key: Value 'first': 'partridge', 'second': 'turtledoves', 'fifth': 'golden rings' };
var nobleGases = {
2: 'helium',
10: 'neon',
18: 'argon',
};
- gifts의 타입은 Map<String, String>이고, nobleGases의 타입은 Map>int, String> 입니다.
++ Map constructor를 이용하기도 합니다.
var gifts = Map<String, String>();
gifts['first'] = 'partridge';
gifts['second'] = 'turtledoves';
gifts['fifth'] = 'golden rings';
var nobleGases = Map<int, String>();
nobleGases[2] = 'helium';
nobleGases[10] = 'neon';
nobleGases[18] = 'argon';
● Set
: C++의 std :: unrodered_set 과 같습니다.
집합의 느낌.
var halogens = {'fluorine', 'chlorine', 'bromine', 'iodine', 'astatine'};
Set<int> numbers = { 1, 3, 5, 7 };
* Set에는 {}를 사용하고, Map에는 [] 를 사용한다는 점을 기억!
Ⅱ. 다트의 기본 변수 키워드.
● const, final
- const는 컴파일 상수로, C++의 constexpr의 역할입니다.
- final은 상수화로, C++의 const와 같습니다.
- const, final은 사용할 수 있는 곳에 모두 사용하는 것이 좋습니다.
● Late variables
- 다트는 기본적으로 null safe 언어이기 때문에, 처음 변수를 선언하면 무조건 초기화를 해주어야 합니다.
- but, 초기화가 선언 이후에 되어야 하는 경우,
late 키워드를 붙여서 , 후에 값을 가질 것이라는 것을 컴파일러에게 인지시킬 수 있습니다.
late String description;
void main() {
description = 'Feijoada!';
print(description);
}
++late를 사용하는 시나리오는 두 가지 경우.
- 선언 이후에 초기화되는 non-nullable 한 변수를 만들 때
- 뒤늦게 초기화되는 변수.
● ? 키워드
- 다트는 기본적으로 null safe한 언어이기에 그냥 변수를 선언하면, 모두 non-nullable합니다.
- 그러나, 변수의 타입 뒤에 ?를 붙여준다면 nullable한 변수를 만들 수 있습니다.
int? lineCount;
print(lineCount); // null
assert(lineCount == null);