이번 포스팅에서 다룰 자료형은 Map입니다. List자료는 자료를 저장하면 자동으로 인덱스가 지정이 되었다면, Map은 key와 value를 이용해서 값을 저장합니다. 예시를 들어보겠습니다. 어떤 사람에 대한 정보를 Map으로 표현하자면 다음과 같이 표현할 수 있을 것입니다.
void main() {
Map<String, dynamic> HanSangWook = {
'name': 'HanSangWook',
'age': 24,
'job': 'student'
};
}
이 예시에서 자세히 들여보자면, key는 자료타입이 String으로 알 수 있지만, value는 다양한 자료형을 갖기 때문에 dynamic으로 제너릭값을 할당했습니다.
void main() {
Map HanSangWook = {
'name': 'HanSangWook',
'age': 24,
'job': 'student'};
print(HanSangWook['name']);
}
>> HanSangWook
value값은 dynamic의 자료형이기 때문에, 변수처럼 갱신이 가능합니다.
void main() {
Map HanSangWook = {
'name': 'HanSangWook',
'age': 24,
'job': 'student'};
print(HanSangWook['name']);
HanSangWook['name'] = '한상욱';
print(HanSangWook['name']);
}
>> HanSangWook
>> 한상욱
key값에 접근하려면 다음과 같이 수행하면 됩니다.
void main() {
Map<String, dynamic> HanSangWook = {
'name': 'HanSangWook',
'age': 24,
'job': 'student'
};
print(HanSangWook.keys);
}
>> (name, age, job)
value값도 비슷하게 접근할 수 있습니다.
void main() {
Map<String, dynamic> HanSangWook = {
'name': 'HanSangWook',
'age': 24,
'job': 'student'
};
print(HanSangWook.values);
}
>> (HanSangWook, 24, student)
전체적인 구성요소로 접근하기 위해선 entries를 이용합니다.
void main() {
Map HanSangWook = {
'name': 'HanSangWook',
'age': 24,
'job': 'student'};
print(HanSangWook.entries);
}
>> (MapEntry(name: HanSangWook), MapEntry(age: 24), MapEntry(job: student))
key, value, entries는 key와 반복문을 이용해서 접근할 수도 있습니다.
void main() {
Map HanSangWook = {
'name': 'HanSangWook',
'age': 24,
'job': 'student'};
for (var key in HanSangWook.keys) {
print(HanSangWook[key]);
}
}
>> HanSangWook
>> 24
>> student
다만, entries를 이용할때는 key와 value에 모두 접근할 수 있습니다.
void main() {
Map HanSangWook = {
'name': 'HanSangWook',
'age': 24,
'job': 'student'};
for (var entry in HanSangWook.entries) {
print('${entry.key}, ${entry.value}');
}
}
>> name, HanSangWook
>> age, 24
>> job, student