민프
[Flutter] Equatable 라이브러리에 대해서 알아보자 본문
이번 포스팅에서는 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를 사용해서 객체에 대한 동일성 체크를 간편하게 할 수 있는 것을 확인하실수 있습니다.
참고링크
'[Flutter]' 카테고리의 다른 글
[Flutter] stream_transform 라이브러리에 대해서 알아보자 (0) | 2023.10.20 |
---|---|
[Flutter] Bloc Concurrency 라이브러리에 대해서 알아보자 (0) | 2023.10.20 |
[Flutter] BLoC - 2. 카운터 앱에 간단하게 적용해보기 (with Cubit) (0) | 2023.10.20 |
[Flutter] BLoC - 1. BLoC (Business Logic Component)이란? (0) | 2023.10.19 |
[Flutter] FadeInImage를 이용하여 FadeIn 효과 + Placeholder Image 를 적용해보자 (0) | 2023.09.20 |
Comments