내가 쓰는 모델 중에 fromMap 이라는 코드가 있다. Map 데이터를 객체로 변환하는데, 이게 무슨말일까?
fromMap은 Map형식의 데이터를 객체로 바꿔주는 함수다. Map은 key와 value로 데이터를 저장하는 방식인데, fromMap은 이 데이터를 클래스에 맞게 변환해준다.
예를 들어, 서버에서 받은 아이의 정보가 아래처럼 있다면:
{ 'id': '123', 'name': '아이 이름', 'photoUrl': 'https://photo.com' }
fromMap을 사용해 이 데이터를 Child라는 객체로 변환하고, 그 후에는 child.name, child.id 로 접근해 데이터를 쉽게 사용할 수 있게 된다.
코드를 보며 사용해보자.
- models/child.dart
class Child {
final String id;
final String name;
final String photoUrl;
Child({
required this.id,
required this.name,
required this.photoUrl,
});
// fromMap: Map 데이터를 Child 객체로 변환
factory Child.fromMap(Map<String, dynamic> map) {
return Child(
id: map['id'] ?? '',
name: map['name'] ?? '',
photoUrl: map['photoUrl'] ?? '',
);
}
// toMap: Child 객체를 다시 Map으로 변환
Map<String, dynamic> toMap() {
return {
'id': id,
'name': name,
'photoUrl': photoUrl,
};
}
}
- fromMap은 Map 데이터를 클래스 객체로 변환하는 생성자다. 주로 데이터베이스나 서버에서 받은 데이터를 앱에서 사용하는 객체로 바꿀 때 쓰인다.
- 이 코드에서는 아이(Child) 정보가 Firestore나 API에서 Map 형태로 제공될 때, 이를 Child 객체로 변환하는 데 사용된다.
만약 서버에서 데이터를 이렇게 받았다면
{
'id': '123',
'name': '아이 이름',
'photoUrl': 'https://photo.com'
}
면 이런식으로 만들고
Map<String, dynamic> childData = {
'id': '123',
'name': '아이 이름',
'photoUrl': 'https://photo.com'
};
fromMap을 사용하여 이를 Child 객체로 바꾸면, 이렇게 된다:
Child child = Child.fromMap(childData);
이제 child.name, child.photoUrl과 같이 객체의 필드로 데이터에 접근할 수 있다.
'Flutter > Dart' 카테고리의 다른 글
static GetIt get instance => _instance; <-- 여기에 쓰인 문법을 모두 설명해보세요. (0) | 2024.10.14 |
---|---|
멤버 변수 vs 상태 (0) | 2024.10.14 |
Stream, Future 둘의 차이점은 뭐지? (2) | 2024.08.12 |
Enum이 뭐고, Enhanced Enum은 왜 쓸까? (0) | 2024.08.12 |
Call by Reference, Call by Value, 깊은 복사, 얕은 복사 in Dart (1) | 2024.08.07 |