민프

[Flutter] Equatable 라이브러리에 대해서 알아보자 본문

[Flutter]

[Flutter] Equatable 라이브러리에 대해서 알아보자

민프야 2023. 10. 20. 15:41

이번 포스팅에서는 Equatable 라이브러리에 대해서 알아보곘습니다. 

 

결론적으로

Equatable는 Dart에서 객체의 동일성을 쉽게 비교할 수 있게 해주는 패키지입니다. 

이를 확장하면 == 연산자와 hashCode 메서드를 자동으로 오버라이드할 수 있어, 

객체의 동일성 비교를 간편하게 수행할 수 있습니다.

 

아래 소스코드와 함께 설명을 해보곘습니다. 

import 'package:equatable/equatable.dart';

class Person {
  final String name;
  final int age;

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

}

void main() {
  final person1 = Person(name: 'Alice', age: 30);
  final person2 = Person(name: 'Alice', age: 30);

  print(person1.name == person2.name); // 출력: true
  print(person1 == person2); // 출력: false
}

person1.name == person2.name 의 출력은 값이 같으니 True 나오는거고,

person1 == person2 의 값이 False가 나오는건 메모리에서 저장되는 위치가 달라서 False가 나오게 되는데요

조금더 사람이 보기 편하게 만들 수 있는 방법이 있을까요?

 

Object Class는 기본적으로 operator, hashcode를 override해서 사용할 수 있다고 합니다.

코드는 아래와 같습니다.

 

import 'package:equatable/equatable.dart';

class Person  {
  final String name;
  final int age;

  Person({required this.name, required this.age});
  
  @override
  bool operator ==(Object other){
  	return other is Person &&
    	this.name == other.name &&
        this.age == other.age;
  }

  @override
  int get hashCode {
  return this.name.hashCode + this.age 

}

void main() {
  final person1 = Person(name: 'Alice', age: 30);
  final person2 = Person(name: 'Alice', age: 30);

  print(person1.name == person2.name); // 출력: true
  print(person1 == person2); // 출력: true
}

 

위 코드는 두 print다 True가 나오는 것을 확인할 수 있습니다.

즉, 내가 서버로부터 데이터를 받고, 객체에 대한 동일성을 정의를 할 수 있다는 것 입니다. 

 

근데 만약에 파라미터가 10개 이상이 된다면..?

귀찮고, 코드가 더러워질 수 있을 것 같습니다. 

 

그래서 이걸 자동화 해주는 Equatable 가 있습니다. 

아래 코드를 보시면

동일성을 체크해주는 걸 get props => [파라미터, 파라미터]를 넣어주면 끝입니다. 

import 'package:equatable/equatable.dart';

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

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

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

void main() {
  final person1 = Person(name: 'Alice', age: 30);
  final person2 = Person(name: 'Alice', age: 30);
  final person3 = Person(name: 'Bob', age: 35);

  print(person1 == person2); // 출력: true
  print(person1 == person3); // 출력: false
}

따라서 Equatable를 사용해서 객체에 대한 동일성 체크를 간편하게 할 수 있는 것을 확인하실수 있습니다. 


참고링크

https://pub.dev/packages/equatable

Comments