Dart Map 총정리

Dart Collection 중 하나인 'Map'에 대해 살펴보겠습니다.

 

Map 선언하기

'Map' 또는 타입 추론 자료형인 'var' 또는 'dynamic'으로 변수를 선언한 뒤
값으로 Map의 literal인 '{ }'를 할당해 주면 됩니다.
값을 여러 개 넣을 때는 (,)로 추가합니다.
Map의 key는 반드시 유니크해야 합니다.

Map map1 = {};
var map2 = {};
dynamic map3 = {};

// 데이터 삽입
map1 = {'key1': 'value1', 'key2': 2, 'key3': true};

Map에는 'Generic'이란 옵션이 있는데 해당 옵션을 지정하여

Map에 할당되는 값의 자료형을 제한할 수 있습니다. '<type, type>'를 사용해 Generic을 지정합니다.
Generic으로 지정된 자료형 외의 값을 추가하는 경우 오류 발생합니다.

Map<String, String> map1 = {"name": "Aiden"}; // String 타입의 key, value만 할당가능
Map<String, int> map2 = {"age": 3}; // key는 String, value는 int타입만 할당가능

 

Map 원소 다루기

Map에 할당된 key, value 페어 하나를 '원소'라고 합니다.

해당 '원소'를 조회, 입력, 삭제하는 법을 알아보겠습니다.

Map 원소 접근하기

Map[key]를 통해 Map내에 key에 해당하는 value를 가져올 수 있습니다.

Map map = {'name': 'Aiden', 'age': 20};

print(map['name']); // 'Aiden' 출력
print(map['age']); // 20 출력

Map 원소 추가하기

원소를 추가하는 두 가지 방법을 소개합니다.

  • 1. map[key] = value를 통하여 입력/수정할 수 있습니다.
    (해당 key에 해당하는 원소가 있다면 수정이 되고, 없다면 추가가 됩니다.)
  • 2. map1.addAll(map2)을 통하여 map2의 모든 원소를 map1에 추가합니다.
Map map = {'color': 'blue'};

map['width'] = 200; // map에 원소 > key:'width', value:200을 추가합니다.
print(map);
 // --> {'color': 'blue', 'width': 200}
 
map.addAll({'height': 100, 'grade': 'A'}); // map에 파라미터로 추가한 map의 모든 원소를 추가합니다.
print(map);
 // --> {'color': 'blue', 'width': 200, 'height': 100, 'grade': 'A'}

Map 원소 삭제하기

  • Map.remove(key) 함수를 사용하여 key에 해당하는 원소를 삭제할 수 있습니다.
  • Map.clear() 함수를 통해 map의 모든 원소를 삭제할 수 있습니다.
Map map = {'name': 'Adien', 'age': 20, 'height': 180};

map.remove('age'); // key:'age'인 원소 삭제됨
print(map);
 // --> {'name': 'Aiden', 'height': 180}
 
map.clear(); // 모든원소 삭제
print(map);
 // --> {}

 

Properties (속성)

Map에서 기본 제공하는 유용한 속성들을 소개합니다.

  • Map.length --> Map의 원소(key-value쌍) 개수를 반환합니다.
  • Map.keys --> Map의 key들을 이 트러블 객체로 반환합니다.
  • Map.values --> Map의 value들을 이터러블 객체로 반환합니다. 
  • Map.isEmpty --> Map이 비었는지 여부를 반환합니다. bool 타입 > true / false
  • Map.isNotEmpty --> Map이 안 비었는지 여부를 반환합니다. bool 타입 > true / false

 

기타 내장함수(Method) 들

  • Map.containsKey(param) --> param과 동일한 key를 가진원소가 있는지 여부 반환. bool 타입 > true / false
  • Map.containsValue(param) --> param과 동일한 value를 가진원소가 있는지 여부 반환. bool 타입 > true / false