[flutter] 플러터에서의 Equatable과 Hashable의 관계

플러터(Flutter) 앱을 개발하다 보면 객체 간의 동등성(equality) 및 해시(hash) 관련 작업이 필요한 경우가 있습니다. Equatable과 Hashable은 이러한 작업을 간편하게 처리할 수 있는 도구입니다. 이 두 가지의 관계에 대해 알아보겠습니다.

Equatable

Equatable은 동일성(Equality)을 비교하기 위한 인터페이스입니다. 이를 사용하면 객체의 속성 값을 기반으로하여 동등성을 비교할 수 있습니다. 이를 위해 Equatable 믹스인(mixin)을 사용하여 객체 클래스에 == 연산자 오버로딩을 구현할 수 있습니다. Equatable을 사용하면 객체 간의 값 비교가 간단해지며, 테스트 코드 작성이 용이해집니다.

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

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

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

위의 예시에서 props 메서드는 Equatable 믹스인으로부터 상속된 메서드로, 객체의 속성을 반환합니다. Equatable을 통해 props 메서드를 구현하면 해당 속성을 기반으로 객체가 동등한지 비교할 때 사용됩니다.

Hashable

Hashable은 해시 충돌을 최소화하기 위해 객체의 해시 값을 가져오기 위한 프로토콜입니다. Equatable과 마찬가지로, Hashable을 사용하여 객체의 속성을 기반으로하여 해시 값을 쉽게 생성할 수 있습니다.

class Person with Equatable implements Hashable {
  final String name;
  final int age;

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

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

  @override
  int get hashCode => hashList(props);
}

위의 예시에서 hashList 함수를 사용하여 props 메서드에서 반환된 속성들을 이용하여 해시 값을 생성하고 있습니다.

이처럼 Equatable과 Hashable은 객체 간의 동등성 및 해시 관련 작업을 쉽게 처리할 수 있도록 도와줍니다. 플러터 앱을 개발하는 과정에서 이를 적극적으로 활용하여 효율적인 코드를 작성할 수 있습니다.

이상으로, 플러터에서의 Equatable과 Hashable의 관계에 대해 살펴보았습니다.

Equatable 문서 Hashable 문서