import 'dart:convert';
// 사람 관련 정보를 모델링하기 위한 'Person'이라는 데이터 클래스를 정의합니다.
class Person {
// Person 클래스의 속성들을 final로 선언합니다.
final String name;
final int age;
final int id;
final String email;
// 모든 속성이 초기화될 것을 요구하는 Person 클래스의 생성자입니다.
Person({
required this.name,
required this.age,
required this.id,
required this.email,
});
// copyWith 메서드: 기존 값으로 지정되지 않은 필드를 사용하여 새로운 Person 객체를 생성할 수 있게 합니다.
// 수정된 필드를 사용하여 새 Person 객체를 생성합니다.
Person copyWith({
String? name,
int? age,
int? id,
String? email,
}) {
return Person(
name: name ?? this.name,
age: age ?? this.age,
id: id ?? this.id,
email: email ?? this.email,
);
}
// toMap 메서드: Person 객체를 Map<String, dynamic>으로 변환합니다.
// 객체를 저장하거나 전송할 수 있는 형식으로 인코딩하는 데 유용합니다.
Map<String, dynamic> toMap() {
return {
'name': name,
'age': age,
'id': id,
'email': email,
};
}
// fromMap 팩토리 생성자: Map<String, dynamic>에서 Person 객체를 생성합니다.
// 맵 형식으로 받은 객체 데이터를 디코딩하는 데 유용합니다.
factory Person.fromMap(Map<String, dynamic> map) {
return Person(
name: map['name'] ?? '',
age: map['age']?.toInt() ?? 0,
id: map['id']?.toInt() ?? 0,
email: map['email'] ?? '',
);
}
// toJson 메서드: Person 객체를 JSON 문자열로 변환합니다.
String toJson() => json.encode(toMap());
// fromJson 팩토리 생성자: JSON 문자열에서 Person 객체를 생성합니다.
// JSON 형식으로 받은 데이터에서 객체를 재구성하는 데 도움을 줍니다.
factory Person.fromJson(String source) => Person.fromMap(json.decode(source));
// toString 메서드: Person 객체의 문자열 표현을 제공합니다.
// 디버깅 목적으로 유용합니다.
String toString() {
return 'Person(name: $name, age: $age, id: $id, email: $email)';
}
// 동등성 연산자를 오버라이드하여 Person 객체를 그들의 속성을 기반으로 비교합니다.
bool operator ==(Object other) {
if (identical(this, other)) return true;
return other is Person &&
other.name == name &&
other.age == age &&
other.id == id &&
other.email == email;
}
// 객체의 속성을 기반으로 해시 코드를 생성하기 위해 hashCode를 오버라이드합니다.
// 동등성 연산자와 일관성을 유지합니다.
int get hashCode {
return name.hashCode ^ age.hashCode ^ id.hashCode ^ email.hashCode;
}
}
제공된 Dart 코드는 Person
이라는 데이터 클래스를 정의합니다. 이 클래스는 사람에 대한 정보를 나타내며, name
(이름), age
(나이), id
(식별자), email
(이메일)과 같은 속성들을 포함합니다. 각 속성은 final
로 선언되어 있어서 인스턴스가 생성된 후에는 변경할 수 없습니다. 클래스의 주요 기능과 특징은 다음과 같습니다:
생성자: Person
객체를 생성할 때 모든 속성을 필수(required
)로 받습니다. 이는 객체가 일관된 상태를 유지하도록 보장합니다.
copyWith 메서드: 객체의 일부만을 변경하여 새로운 Person
객체를 생성할 수 있게 해줍니다. 변경하고자 하는 속성만 인자로 전달하며, 나머지 속성은 기존 객체의 값을 사용합니다.
toMap 메서드: Person
객체를 Map<String, dynamic>
으로 변환합니다. 이는 데이터를 NoSQL 데이터베이스에 저장하거나, JSON으로 직렬화하는 과정에서 유용하게 사용될 수 있습니다.
fromMap 팩토리 생성자: Map<String, dynamic>
을 받아 Person
객체를 생성합니다. 이는 데이터베이스로부터 데이터를 읽어온 후 객체로 변환할 때 사용됩니다.
toJson 메서드: 객체를 JSON 문자열로 직렬화합니다. toMap
메서드를 이용하여 먼저 Map
으로 변환한 뒤, JSON으로 인코딩합니다.
fromJson 팩토리 생성자: JSON 문자열을 받아 이를 디코딩하고, fromMap
을 통해 Person
객체를 생성합니다. 이는 네트워크 통신을 통해 받은 JSON 데이터를 객체로 변환할 때 사용됩니다.
toString 메서드: 객체를 문자열로 표현하는 메서드로, 객체의 상태를 쉽게 확인할 수 있게 해줍니다.
동등성 비교: ==
연산자를 오버라이드하여 Person
객체 간에 속성 값이 모두 같을 경우 true를 반환하도록 합니다. hashCode
도 오버라이드하여 객체의 동등성 비교 시에 일관된 동작을 보장합니다.
이 클래스는 Dart와 Flutter에서 모델 클래스를 작성할 때 일반적으로 사용되는 패턴을 잘 보여줍니다. 데이터 캡슐화, 객체 불변성, 그리고 JSON 직렬화 및 역직렬화 기능을 제공하여 애플리케이션에서 데이터를 효율적으로 관리할 수 있도록 돕습니다.