[Dart] Map 타입 사용법

Dart의 Map 타입이란?

Dart에서 Map은 키-값(key-value) 쌍을 저장하는 컬렉션(Collection) 타입입니다. 자바스크립트의 Object, Python의 Dictionary와 비슷한 개념으로, 데이터를 효율적으로 저장하고 조회할 수 있습니다.

Dart의 Map은 키(key)를 통해 특정 값을 빠르게 찾아볼 수 있으며, 키는 중복될 수 없지만 값(value)은 중복될 수 있습니다.

 

 

Dart의 Map 선언 및 초기화

Dart에서 Map을 선언하는 방법은 여러 가지가 있습니다.

 

1. 기본적인 Map 선언 방법

void main() {
  Map<String, int> ages = {
    'Alice': 25,
    'Bob': 30,
    'Charlie': 28,
  };

  print(ages); // {Alice: 25, Bob: 30, Charlie: 28}
}
  • String 타입의 키와 int 타입의 값을 가지는 Map을 선언했습니다.
  • JSON 데이터와 유사한 형태로 정의할 수 있습니다.

 

2. Map 생성자를 활용한 선언

void main() {
  Map<String, String> countries = Map();
  countries['KR'] = 'South Korea';
  countries['US'] = 'United States';
  countries['JP'] = 'Japan';

  print(countries); // {KR: South Korea, US: United States, JP: Japan}
}
  • 빈 Map을 생성하고 나중에 값을 추가하는 방식입니다.

 

3. Map.from()을 사용한 복사 생성

void main() {
  var original = {'one': 1, 'two': 2};
  var copy = Map.from(original);
  print(copy); // {one: 1, two: 2}
}
  • 기존 Map을 복사하여 새로운 Map을 생성할 수 있습니다.

 

 

Dart의 Map 주요 메서드

Map을 다룰 때 자주 사용하는 메서드를 정리합니다.

 

1. 값 추가 및 수정

void main() {
  var fruits = {'apple': 'red', 'banana': 'yellow'};
  fruits['grape'] = 'purple'; // 값 추가
  fruits['banana'] = 'green'; // 기존 값 수정
  
  print(fruits); // {apple: red, banana: green, grape: purple}
}
  • 키를 사용하여 새로운 값을 추가하거나 기존 값을 수정할 수 있습니다.

 

2. 값 삭제

void main() {
  var fruits = {'apple': 'red', 'banana': 'yellow'};
  fruits.remove('apple');
  
  print(fruits); // {banana: yellow}
}
  • remove(key)를 사용하면 특정 키를 삭제할 수 있습니다.

 

3. 특정 키 또는 값 존재 여부 확인

void main() {
  var fruits = {'apple': 'red', 'banana': 'yellow'};
  
  print(fruits.containsKey('apple')); // true
  print(fruits.containsValue('green')); // false
}
  • containsKey(key) : 특정 키가 존재하는지 확인
  • containsValue(value) : 특정 값이 존재하는지 확인

 

4. Map 반복문 활용

forEach()를 사용하면 키-값을 순회하며 출력할 수 있습니다.

void main() {
  var user = {'name': 'John', 'age': 30, 'city': 'Seoul'};
  
  user.forEach((key, value) {
    print('$key: $value');
  });
}

또는 for-in 문을 사용할 수도 있습니다.

void main() {
  var user = {'name': 'John', 'age': 30, 'city': 'Seoul'};
  
  for (var key in user.keys) {
    print('$key: ${user[key]}');
  }
}

출력 결과는 다음과 같습니다.

name: John
age: 30
city: Seoul

 

 

Map을 활용한 JSON 데이터 처리

Flutter 앱을 개발할 때 JSON 데이터를 처리하는 경우가 많습니다. Dart의 Map을 사용하면 JSON 데이터를 쉽게 다룰 수 있습니다.

 

1. JSON 문자열을 Map으로 변환

import 'dart:convert';

void main() {
  String jsonString = '{"name": "Alice", "age": 25}';
  Map<String, dynamic> user = jsonDecode(jsonString);
  
  print(user['name']); // Alice
  print(user['age']); // 25
}
  • jsonDecode()를 사용하면 JSON 문자열을 Map<String, dynamic> 형태로 변환할 수 있습니다.

 

2. Map을 JSON 문자열로 변환

import 'dart:convert';

void main() {
  Map<String, dynamic> user = {'name': 'Bob', 'age': 30};
  String jsonString = jsonEncode(user);
  
  print(jsonString); // {"name":"Bob","age":30}
}
  • jsonEncode()를 사용하면 Map을 JSON 문자열로 변환할 수 있습니다.

 

 

Map과 List 변환

Dart에서는 List와 Map을 상호 변환할 수도 있습니다.

 

1. List를 Map으로 변환

void main() {
  List<String> names = ['Alice', 'Bob', 'Charlie'];
  var nameMap = {for (var name in names) name: name.length};
  
  print(nameMap); // {Alice: 5, Bob: 3, Charlie: 7}
}
  • for 루프를 활용하여 List를 Map으로 변환할 수 있습니다.

 

2. Map을 List로 변환

void main() {
  Map<String, int> ages = {'Alice': 25, 'Bob': 30};
  var names = ages.keys.toList();
  var values = ages.values.toList();
  
  print(names); // [Alice, Bob]
  print(values); // [25, 30]
}
  • keys.toList()values.toList()를 사용하면 Map을 List로 변환할 수 있습니다.

 

 

마무리

Dart의 Map은 Flutter 앱 개발에서 데이터를 저장하고 관리하는 데 필수적인 자료구조입니다. 기본적인 선언부터 활용법, JSON 변환, List 변환까지 다양한 예제를 살펴보았습니다.

Dart의 Map을 활용하여 더욱 효율적인 Flutter 애플리케이션을 개발해보세요! 😊