본문 바로가기
Flutter/Dart

fromMap을 사용해 map데이터 쉽게 사용하기

by 복복씨 2024. 9. 19.

내가 쓰는 모델 중에 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과 같이 객체의 필드데이터에 접근할 수 있다.