앱/Flutter

Dart에서 객체 다루기 - Map

사과먹는사람 2021. 10. 6. 09:31
728x90
728x90

 

다른 언어에서 '객체'로 불리는 것은 Dart에서 Map이라는 자료형으로 다루고 있다. Map은 쉽게 말해 key-value 쌍으로 이뤄진 객체이다. 키, 값은 각각 어떤 자료형이든지 상관없다. Map은 동적 컬렉션 자료형으로, 늘리고 줄일 수 있다. 또한 Map은 이터레이션 가능한 객체이다. 

 

 

1. Map 선언

제일 간단한 방법으로 중괄호 { }를 써서 선언하는 방법이 있다. 중괄호 안에 바로 키: 값을 넣어도 상관없고, 아래 예제 코드처럼 일단 빈 Map을 선언한 다음 값을 넣는 방법도 있다.

Map my_map = {};
my_map['name'] = 'my map';
print(my_map);	// {name: my map}

Map을 선언하는 또다른 방법은 new Map() 생성자를 사용하는 것이다. 다만 이 때는 일단 빈 Map을 생성한 다음 값을 초기화해줘야 한다.

Map my_map2 = new Map();
my_map2['name'] = 'my map 2';

이외에도 of, identity, from, fromEntries 등 다양한 생성자가 있는데 문서에서 확인하면 좋겠다.

 

 

2. 데이터 삽입

위에서 본 바와 같이 기존의 Map에 새로운 데이터를 삽입하고 싶다면, map[key] = value로 지정하면 된다. 이 때 주의할 점은, 보통 문자열을 key로 줄 텐데 이 때 문자열을 따옴표로 감싸줘야 한다는 점이다.

my_map['date'] = '20211006';
print(my_map);	//{name: my map, date: 20211006}

이건 단일 key=value 쌍을 넣은 것이고, 아예 Map 형식으로 된 것을 addAll 메소드로 다른 Map에 병합할 수도 있다. 다음 코드는 my_map3를 my_map에 병합한 예제이다.

Map my_map3 = {'type': 'tutorial'};
my_map.addAll(my_map3);
print(my_map);	//{name: your map, date: 20211006, type: tutorial}

 

3. 데이터 변경

key는 유지하되 key에 해당하는 value를 바꿔주고 싶다면 삽입과 방법은 똑같다. map[key] = value로 지정하면 되는데 다른 점은 데이터 변경 시에는 대괄호 안의 key가 이미 Map 안에 있다는 점이다. 이와 똑같은 기능을 하는 메소드로 update 메소드가 있는데, 이는 일반적으로 리터럴 값을 value로 주기보다는 함수 내에서 변하는 값을 value로 주기 위해 많이 쓰이는 듯하다. 

my_map['name'] = 'your map';
print(my_map);	// {name: your map, date: 20211006}

여러 데이터를 한 번에 변경하고 싶다면 updateAll을 쓸 수도 있다.

 

4. 맵 삭제

Map에서 어떤 key-value 쌍을 삭제하려면 remove() 메소드를 쓸 수 있다. remove 메소드 인자로는 key가 들어가야 한다. 이 메소드는 key에 해당하는 key-value 쌍을 제거하기 때문이다.

my_map.remove('name');
print(my_map);	//{date: 20211006, type: tutorial}

Map을 삭제하려면 clear() 메소드를 쓰면 된다. Map 안의 모든 엔트리가 사라진다.

my_map.clear();
print(my_map);	//{}

 

5. 맵 검색

맵이 어떤 key나 value를 갖고 있는지 확인하려면 containsKey, containsValue 메소드를 쓸 수 있다.

print(my_map.containsKey('name'));	// false
print(my_map.containsValue('20211006'));	// true

 

6. Map의 쓸만한 속성들

  • .keys : Map에 담긴 key들을 이터러블 객체로 모아 돌려준다.
  • .values : Map에 담긴 value들을 이터러블 객체로 모아 돌려준다.
  • .entries : Map에 담긴 key-value 쌍(엔트리)들을 이터러블 객체로 모아 돌려준다.
print(my_map.keys);	// (date, type)
print(my_map.values);	// (20211006, tutorial)
print(my_map.entries);	// (MapEntry(date: 20211006), MapEntry(type: tutorial))
  • .isEmpty : Map이 비었다면 true, 그렇지 않다면 false를 반환한다.
  • .isNotEmpty : Map에 뭔가 들어 있다면 true, 비었다면 false를 반환한다.
  • length : Map에 든 key-value 쌍이 몇 개인지 반환한다.

 

 

 

References

 

 

728x90
반응형