이미지09
Coding Story/FLUTTER

[Flutter] 다트(Dart) 기본 - 자료형, 컬렉션, 연산자

반응형

 

 

Flutter의 기본 언어는 Dart 이다.

 

Dart 의 기초 지식을 간단하게 잡아보도록 하자.

 

각 부분에서 간단하게 예제에 주석으로 설명을 덧붙였다.

 

 

 

 

자료형 ( Variable )

1 ) Dart 의 자료형 타입.

// 문자 타입
String strVal;

// 정수 타입
int intVal;

// 실수 타입
double dobVal;

// 참, 거짓 
bool boolVal;

 

2 ) var 와 dynamic 의 차이

var 는 자료형 타입이 고정되어 변경이 불가하지만 dynamic 은 자료형 타입이 고정되지 않아 변경이 가능하다.

// [불가] - 문자 타입의 var 에 1 을 집어넣지 못함
var userName = 'aeco';
userName = 1;

// [가능] - 문자 타입의 dynamic 에 1 을 넣어 숫자 타입으로 변경 됨
dynamic userName = 'aeco';
userName = 1;

 

3 ) 상수 변수

상수 변수는 값이 변경 되지 않는 변수이다.

final 변수와 const 변수가 있는데 final 은 런타임 때, const 는 컴파일 때 변수가 생성이 된다.

final String userName1 = 'aeco';
const String userName2 - 'aeco';

 

 

반응형

 

 

컬렉션 ( Collection )

1 ) List

List 는 Java 의 List 와 별 차이가 없다. 

List<String> strList = ['aeco1', 'aeco2', 'aeco3'];
print(strList);        // > [aeco1, aeco2, aeco3]
print(strList[0]);     // > aeco1
print(strList.length); // > 3

 

2 ) Map

Key 와 Value 형태의 컬렉션이다. 

Map<String, String> testMap = {};
testMap['userName'] = 'aeco'; // java의 map.put() 형태
testMap['userAge'] = '31';
print(testMap);               // > {userName: aeco, userAge: 31}
print(testMap.keys);          // > (userName, userAge)
print(testMap.values);        // > (aeco, 31)
print(testMap['userName']);   // > aeco

testMap.remove('userAge');    // remove()
print(testMap);               // > {userName: aeco}

testMap.clear();              // clear()
print(testMap);               // > {}

 

3 ) Set

Key 와 Value 형태로 이루어져 있어 Map 과 유사하지만 중복 값을 허용하지 않는다.

Set<String> testSet = {'aeco1', 'aeco2', 'aeco1'}; 
// aeco1는 중복되어 한번만 출력
print(testSet); // > {aeco1, aeco2} 

// 값이 있으면 true, 없으면 false 리턴
print(testSet.contains('aeco1')); // > true
    
// Set -> List
print(testSet.toList()); // > [aeco1,aeco2]

 

 

 

 

컬렉션 탐색 함수

1 ) where 함수

final whereVal = strList.where((val) => val == 'aeco1' || val == 'aeco2');
print(whereVal);          // > (aeco1, aeco2)
print(whereVal.toList()); // > [aeco1, aeco2]

 

2 ) map 함수

final mapVal = strList.map((data) => 'map $data');
print(mapVal); // > (map aeco1, map aeco2, map aeco3)

 

3 ) reduce 함수

// 순회할 때 마다 값이 쌓임 (return 되는 값이 다음 value로 들어감)
// ex ) 순회 순서 
// 1 ) value: aeco1             element: aeco2 => aeco1,aeco2
// 2 ) value: aeco1,aeco2       element: aeco3 => aeco1,aeco2,aeco3
final reduceVal = strList.reduce((value, element) => value + ',' + element);
print(reduceVal);

 

4 ) fold 함수

// reduce 함수와 순회하며 값이 쌓이는 건 같음
// => reduce와 차이점은 초기값을 설정가능하고, 초기값이 첫 순회때 value에 들어감.
// ex ) 순회 순서
// 1 ) value: @,           element: aeco1 => @aeco1
// 2 ) value: @aeco1,      element: aeco2 => @aeco1aeco2
// 3 ) value: @aeco1aeco2, element: aeco3 => @aeco1aeco2aeco3
final foldVal = strList.fold<String>("@", (value, element) => value + element);
print(foldVal);

 

 

 

 

물음표 연산자

Dart의 연산자는 Java의 연산자와 거의 대부분이 동일하다.

눈여겨 볼 것은 물음표 연산자가 있는데 이 연산자만 살펴보도록 하자.

 

자료형 타입 뒤에 ? 를 붙이면 해당 변수는 null 을 가질 수 있게 된다.

// 타입 뒤에 ?를 명시해서 null값을 가질 수 있음
double? number1 = null;

// 타입 뒤에 ?를 명시하지 않아 에러가 남
double number2 = null;

 

 

연산자에 물음표를 사용하게 되면 null 일 때만 값을 대입한다던지가 가능해진다.

double? number;   // 자동으로 null값 지정
print(number);

number ??= 3;   // ??를 사용하면 기존 값이 null일 때만 저장
print(number);

number ??= 4; // null이 아니기 때문에 기존 3이 그대로 유지
print(number);

 

 

 

반응형