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 에는 비교시 사용하고 싶은 속성을 배열로 반환해 주면 됩니다. 이렇게 하면 == 연산자로 값 비교를 할 수 있습니다.