Map

A tour of the Dart language 페이지를 공부하면서 정리한 내용입니다.

키(Key)값(Value)을 연결하는 객체입니다. 은 어떤 타입의 객체든 사용할 수 있습니다. 는 고유한 값으로 중복을 허용하지 않지만, 은 동일한 값이 중복으로 사용되는 것을 허용합니다. Dart에서는 Map 타입을 통해 을 지원하며 리터럴 표현식도 지원합니다.

void main() {
  // Map 리터럴 표현식으로 Map<String, String>으로 타입 추론됩니다.
  var gifts = {
    // 키: 값
    'first': 'partridge',
    'second': 'turtledoves',
    'fifth': 'golden rings'
  };

  // Map<int, String>으로 타입 추론됩니다.
  var nobleGases = {
    2: 'helium',
    10: 'neon',
    18: 'argon',
  };

  // Map 생성자를 이용해서 맵 객체를 생성합니다.
  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';
}

을 추가할때는 맵객체[키] = 값을 사용합니다. 맵객체[키]를 사용하여 을 조회할 수 있습니다. 에 조회 시 가 존재하지 않을 경우 null을 반환합니다. length 속성을 이용하여 의 항목 수를 조회할 수 있습니다.

void main() {
  var gifts = {'first': 'partridge'};

  // 키와 값을 추가합니다.
  gifts['fourth'] = 'calling birds';

  // 키로 값을 조회할 수 있습니다.
  assert(gifts['first'] == 'partridge');

  // Map에 키가 존재하지 않으면 null을 반환합니다.
  assert(gifts['fifth'] == null);

  // Map의 항목수를 조회합니다.
  assert(gifts.length == 2);
}

Map 리터럴 앞에 const 키워드를 붙이면 컴파일 타임 상수로 선언할 수 있습니다. Map 타입도 List 타입과 같이 전개 연산자collection if, for를 사용할 수 있습니다.

void main() {
  final constantMap = const {
    2: 'helium',
    10: 'neon',
    18: 'argon',
  };

  // Uncaught Error: Unsupported operation: Cannot modify unmodifiable Map
  // constantMap[2] = 'Helium';

  Map<int, String> map = {for (int i = 0; i < 5; i++) i: "#$i"};
  print(map);
}

Map 타입은 다양한 속성과 메서드를 제공하고 있습니다.

void main() {
  var map = {
    "KR": "KOREA",
    "US": "USA",
    "KP": "NORTH KOREA",
    "FR": "FRANCE",
    "FI": "FINLAND",
  };

  print("Map: $map");
  print("타입: ${map.runtimeType}, 항목수: ${map.length}");
  print("빈 Map 확인: ${map.isEmpty}, 아이템이 하나 이상 존재하는지 확인: ${map.isNotEmpty}");

  print("Map 줄단위 출력:");
  map.forEach((key, value) => print("{$key: $value}"));

  print("KR 키 존재 확인: ${map.containsKey("KR")}");
  print("KOREA 값 존재 확인: ${map.containsValue("KOREA")}");

  map.putIfAbsent("JP", () => "JAPAN");
  print("Map: $map");

  map.putIfAbsent("JP", () => "('-');");
  print("Map: $map");

  map.update("FR", (value) => "$value Kiss");
  print("Map: $map");

  map.remove("FI");
  print("Map: $map");

  map.removeWhere((key, value) => value.contains("KOREA"));
  print("Map: $map");

  map.clear();
  print("빈 Map 확인: ${map.isEmpty}, 아이템이 하나 이상 존재하는지 확인: ${map.isNotEmpty}");
}

Last updated