[Flutter] Equatable 라이브러리

Comely·2024년 11월 16일

Flutter

목록 보기
14/26

Equatable

Equatable은 Dart에서 객체의 값 비교를 쉽게 처리할 수 있도록 도와주는 패키지입니다.
기본적으로, Dart에서는 객체를 비교할 때 메모리 주소(참조)를 기준으로 비교합니다. 그러나 Equatable을 사용하면 객체의 속성 값을 기준으로 비교할 수 있습니다.

Equatable의 주요 특징

  1. 값 기반 비교 지원
    객체가 동일한지 판단할 때, 객체의 속성 값들을 기준으로 비교합니다.
    예를 들어, 두 개의 Photo 객체가 동일한 id를 가진 경우, 두 객체는 동일하다고 간주됩니다.

  2. 편리한 비교 구현
    == 연산자와 hashCode를 오버라이드할 필요 없이 Equatable을 사용하면 간단하게 값 비교를 처리할 수 있습니다.

  3. 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];
  • Photo 클래스는 Equatable을 상속받아 다음과 같이 정의됩니다
    props: Equatable의 핵심입니다.
    어떤 속성을 비교 대상으로 사용할지를 정의합니다.
    위 코드에서는 id만 비교 대상으로 지정되었습니다.
    즉, tags와 previewUrl 값이 달라도 id 값이 같으면 두 객체는 동일하다고 간주됩니다.

Equatable을 사용하지 않은 경우

만약 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을 사용하는 이유

  • 가독성 향상: props만 정의하면 비교 로직이 자동으로 처리됩니다.
  • 코드 중복 제거: 수동으로 ==와 hashCode를 오버라이드할 필요가 없습니다.
  • 유지 보수 용이: 속성이 추가되거나 변경될 때 props만 수정하면 됩니다.

이처럼 Equatable은 Flutter/Dart 프로젝트에서 객체의 비교 작업을 간단하고 효율적으로 처리하는 도구입니다.

profile
App, Web Developer

0개의 댓글