Equatable

하요·2024년 7월 1일
0
post-thumbnail

Flutter에서 객체 비교하기: Equatable

Equatable 패키지는 Flutter 애플리케이션에서 객체 비교를 간편하게 해주는 방법을 제공합니다. 이 패키지는 == 연산자와 hashCode를 자동으로 재정의하여 반복적인 코드를 줄이고, 비교를 보다 효율적으로 만들어 줍니다.

주요 특징

  1. 간단한 객체 비교:
    • Equatable은 객체 비교를 위해 필요한 ==hashCode를 자동으로 생성하여 코드를 단순화합니다.
  2. 코드 생성 필요 없음:
    • Equatable은 코드 생성 단계가 필요 없이 즉시 사용 가능합니다.
  3. 불변 객체 지원:
    • Equatable은 불변 객체에 최적화되어 있으며, 모든 멤버 변수를 final로 선언해야 합니다.

설치

pubspec.yaml 파일에 equatable을 종속성으로 추가합니다.

dependencies:
  flutter:
    sdk: flutter
  equatable: ^2.0.0

사용 방법

객체 비교를 위한 클래스 작성

Equatable을 사용하려면 클래스를 Equatable로 확장하고 props 리스트를 재정의합니다.

import 'package:equatable/equatable.dart';

class Person extends Equatable {
  const Person(this.name);

  final String name;

  
  List<Object> get props => [name];
}

JSON과 함께 사용

Equatable을 JSON과 함께 사용할 수 있습니다. fromJson 팩토리 메서드를 추가하여 JSON을 객체로 변환할 수 있습니다.

import 'package:equatable/equatable.dart';

class Person extends Equatable {
  const Person(this.name);

  final String name;

  
  List<Object> get props => [name];

  factory Person.fromJson(Map<String, dynamic> json) {
    return Person(json['name']);
  }
}

toString 구현

toString 메서드를 구현하여 객체의 문자열 표현을 개선할 수 있습니다. stringify 플래그를 true로 설정하면 됩니다.

import 'package:equatable/equatable.dart';

class Person extends Equatable {
  const Person(this.name);

  final String name;

  
  List<Object> get props => [name];

  
  bool get stringify => true;
}

주의사항 및 팁

  • 불변 객체: Equatable은 불변 객체에 최적화되어 있으므로, 모든 멤버 변수를 final로 선언해야 합니다.
  • EquatableMixin: Equatable을 상속할 수 없는 경우, EquatableMixin을 사용하여 다른 슈퍼클래스를 가진 클래스에서도 Equatable의 기능을 사용할 수 있습니다.
    class EquatableDateTime extends DateTime with EquatableMixin {
      EquatableDateTime(
        int year, [
        int month = 1,
        int day = 1,
        int hour = 0,
        int minute = 0,
        int second = 0,
        int millisecond = 0,
        int microsecond = 0,
      ]) : super(year, month, day, hour, minute, second, millisecond, microsecond);
    
      
      List<Object> get props {
        return [year, month, day, hour, minute, second, millisecond, microsecond];
      }
    }
    
  • 성능: Equatable은 객체 비교를 보다 효율적으로 만들어 주며, 성능에 미치는 영향은 미미합니다.

주요 활용도

  • 객체 비교: 두 객체가 동일한지 비교할 때 사용됩니다.
  • 코드 단순화: 반복적인 ==hashCode 재정의를 피할 수 있습니다.
  • 불변 객체: 불변 객체를 쉽게 비교할 수 있습니다.

관련 자료

profile
flutter 개발자(진)

0개의 댓글