[Flutter/Dart] 두 객체의 값 비교하기 - Equatable 패키지 활용

Dart에서는 값을 비교할 때 == 연산자를 사용합니다. 하지만 Dart의 == 연산자는 기본적으로  객체의 참조(메모리 주소)를 비교하기 때문에, 같은 값을 가진 두 객체도 서로 다르다고 판단될 수 있습니다.

이 문제를 해결하기 위해 Equatable 패키지를 활용하면 보다 쉽게 값 비교가 가능합니다. 이번 글에서는 Equatable 패키지를 사용하는 방법을 설명합니다.

 

 

1. Equatable 패키지란?

Equatable 패키지는 Dart에서 객체의 값 비교 간편하게 도와주는 패키지입니다. 이를 활용하면 hashCode 및 == 연산자를 직접 오버라이딩할 필요 없이 간단하게 값 비교가 가능합니다.

 

 

2. Equatable 패키지 설치하기

다음 명령어를 실행하여 패키지를 설치합니다. 

Dart :

 $ dart pub add equatable

Flutter :

 $ flutter pub add equatable

Equatable 패키지에 대한 상세한 정보는 equatable | Dart package 에서 확인할 수 있습니다.

 

 

3. Equatable 사용법

다음은 기본적인 사용 예제입니다.

 

일반 클래스에서의 값 비교 문제

class Person {
  final String name;
  final int age;

  Person(this.name, this.age);
}

void main() {
  final person1 = Person('Alice', 25);
  final person2 = Person('Alice', 25);

  print(person1 == person2); // false (메모리 주소가 다름)
}

위 코드에서 person1과 person2는 같은 값을 가지지만, == 연산자로 비교하면 false가 반환됩니다. 이는 Dart에서 기본적으로 == 연산자가 객체의 참조(메모리 주소)를 비교하기 때문입니다.

 

Equatable을 활용한 값 비교

이제 Equatable을 사용하여 값을 비교할 수 있도록 수정해보겠습니다.

import 'package:equatable/equatable.dart';

class Person extends Equatable {
  final String name;
  final int age;

  Person(this.name, this.age);

  @override
  List<Object?> get props => [name, age];
}

void main() {
  final person1 = Person('Alice', 25);
  final person2 = Person('Alice', 25);

  print(person1 == person2); // true (값이 동일하면 동등하다고 판단)
}

위 코드에서는 Equatable을 상속받고 props 에는 비교시 사용하고 싶은 속성을 배열로 반환해 주면 됩니다. 이렇게 하면 == 연산자로 값 비교를 할 수 있습니다.