Equatable은 Dart에서 객체의 값 비교를 쉽게 처리할 수 있도록 도와주는 패키지입니다.
기본적으로, Dart에서는 객체를 비교할 때 메모리 주소(참조)를 기준으로 비교합니다. 그러나 Equatable을 사용하면 객체의 속성 값을 기준으로 비교할 수 있습니다.
값 기반 비교 지원
객체가 동일한지 판단할 때, 객체의 속성 값들을 기준으로 비교합니다.
예를 들어, 두 개의 Photo 객체가 동일한 id를 가진 경우, 두 객체는 동일하다고 간주됩니다.
편리한 비교 구현
== 연산자와 hashCode를 오버라이드할 필요 없이 Equatable을 사용하면 간단하게 값 비교를 처리할 수 있습니다.
Immutable 객체에 적합
Equatable은 변경 불가능한(immutable) 객체에 특히 유용하며, 불변 객체를 많이 사용하는 Flutter 프로젝트에서 자주 사용됩니다.
()
class Photo extends Equatable {
final int id;
final String tags;
(name: "previewURL")
final String previewUrl;
const Photo({
required this.id,
required this.tags,
required this.previewUrl,
});
factory Photo.fromJson(Map<String, dynamic> json) => _$PhotoFromJson(json);
Map<String, dynamic> toJson() => _$PhotoToJson(this);
List<Object?> get props => [id];
만약 Equatable을 사용하지 않았다면, 값 비교를 위해 == 연산자와 hashCode를 직접 구현해야 합니다:
bool operator ==(Object other) {
if (identical(this, other)) return true;
return other is Photo &&
other.id == id &&
other.tags == tags &&
other.previewUrl == previewUrl;
}
int get hashCode => id.hashCode ^ tags.hashCode ^ previewUrl.hashCode;
이처럼 Equatable은 Flutter/Dart 프로젝트에서 객체의 비교 작업을 간단하고 효율적으로 처리하는 도구입니다.