[flutter] Equatable과 일반적인 비교 연산자의 차이점

Flutter 앱을 개발하다 보면 객체 간의 동등성 비교가 필요한 때가 있습니다. 일반적으로 == 연산자를 사용하여 객체를 비교할 수 있지만, Equatable을 사용함으로써 더 효과적인 비교가 가능합니다.

일반적인 비교 연산자

일반적으로 Dart에서는 == 연산자를 오버라이드하여 동등성 비교를 구현합니다. 하지만 이 방법은 객체가 변경될 때 모든 필드를 수동으로 비교해야 하므로 번거로울 수 있습니다.

class Person {
  final String name;
  final int age;

  Person(this.name, this.age);

  @override
  bool operator ==(Object other) =>
      identical(this, other) ||
      other is Person && runtimeType == other.runtimeType && name == other.name && age == other.age;

  @override
  int get hashCode => name.hashCode ^ age.hashCode;
}

Equatable 사용하기

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];
}

위의 예제에서 Equatable 클래스를 상속하고, get props 메서드를 오버라이드하여 비교할 속성을 정의합니다. 그러면 Equatable이 동등성 비교와 해시코드 생성을 자동으로 처리해줍니다.

결론

Equatable을 사용하면 객체의 동등성 비교를 보다 간편하게 처리할 수 있습니다. 수동으로 모든 필드를 비교하고 해시코드를 생성하는 번거로움을 줄여줄 뿐만 아니라, 코드를 더 간결하고 읽기 쉽게 만들어줍니다.

더 많은 정보는 Equatable 라이브러리 문서를 확인해보시기 바랍니다.