[Flutter] Equatable 패키지 알아보기

도톨이·2025년 3월 31일
0

앱 개발-flutter

목록 보기
30/34

강의를 보며 공부하던 중 domain layer 에 엔티티를 정의할 때 Equatable 클래스를 상속받고 있어서 알아보고자 한다.

코드는 다음과 같다.


import 'package:equatable/equatable.dart';

class User extends Equatable {
  final int id;
  final String createdAt;
  final String name;
  final String avatar;

  const User({
    required this.id,
    required this.createdAt,
    required this.name,
    required this.avatar,
  });

  
  List<Object?> get props => [id];
}

equatable 패키지는 다음 사이트에서 설치방법을 보며 따라하면 설치할 수 있다.

https://pub.dev/packages/equatable/install

Equatable 는 객체 비교를 더 쉽게 해주는 도구라고 생각하면된다.

Equatable 을 사용하지 않은 기본 클래스에서 아래처럼 객체를 생성하고 비교하면 false 가 나온다! 그 이유는 Dart 의 기본 = =연산이 두 객체의 참조가 같은지를 비교하기 때문에 주소가 다르면 같이 같더라도 false 로 나온다.

void main() {
  final user1 = User(id: 1, createdAt: '2021-07-01', avatar: '', name: 'Yongju');
  final user2 = User(id: 1, createdAt: '2021-07-01', avatar: '', name: 'Yongju');

  print(user1 == user2); // false!
}

그러나 Equatable 을 사용한 클래스에서는 props에 들어간 값들끼리 비교해서 같으면 ==도 true가 나올 수 있게 된다!

왜 사용할까? 🧐

공부하다보니 이런 클래스를 굳이 왜 사용하는지 궁금해졌다.
앱의 도메인 레이어에서 정의한 Entity 클래스는 앱의 핵심 비즈니스 로직을 담당하는 중요한 요소이다. 비즈니스 로직의 핵심 데이터 모델은 값 자체가 중요하지 객체가 어느 메모리에 있는가는 중요하지 않다.

유저 객체를 비교할 때 "같은 유저인가?"라는 질문에 대한 답은 이름과 id가 같냐지, 같은 인스턴스냐가 아니기 때문이다. 그래서 값이 같으면 같은 Entity로 취급하기 위해 Equatable을 사용한다.

그리고 Equatable 을 사용하면 테스트할 때도 유리하다. 예를 들어 기대하는 유저 객체가 있고, 결과로 받는 유저 객체가 있을때 아래 테스트 코드로 비교를 하게 된다. 그런데 만약 Equatable 이 없다면 값이 같더라도 테스트 실패가 뜬다. 그래서 Entity 을 테스트 가능한 구조로 만들기 위해서도 Equatable 이 도움이 된다.

expect(resultUser, expectedUser);
profile
Kotlin, Flutter, AI | Computer Science

0개의 댓글

Powered by GraphCDN, the GraphQL CDN