[flutter] 플러터에서의 Equatable을 활용한 로컬 데이터베이스 연동 방법

플러터(Flutter)로 모바일 앱을 개발할 때, 로컬 데이터베이스를 사용하여 데이터를 저장하고 관리해야 하는 경우가 많습니다. 이때 Equatable 패키지를 활용하면 데이터 모델을 쉽게 비교하고, 데이터베이스 연동 작업을 보다 간편하게 처리할 수 있습니다.

Equatable이란?

Equatable은 Dart 언어에서 동등성(equality)을 비교하기 위한 패키지입니다. 이를 활용하면 데이터 모델 클래스를 상속받아 간단하게 객체 간의 동등성을 비교할 수 있습니다. Equatable을 사용하면 데이터 모델의 속성을 일일히 비교하는 번거로움을 줄일 수 있습니다.

Equatable 패키지 설치

먼저, pubspec.yaml 파일에 Equatable 패키지를 추가합니다.

dependencies:
  equatable: ^2.0.2

그런 다음 패키지를 설치합니다.

flutter pub get

Equatable을 활용한 데이터 모델 정의

Equatable을 사용하여 데이터 모델을 정의하려면 Equatable 클래스를 상속받아야 합니다. 그리고 props 메서드를 오버라이드하여 동등성 비교에 활용할 속성들을 지정합니다.

다음은 Equatable을 활용한 간단한 데이터 모델의 예시입니다.

import 'package:equatable/equatable.dart';

class User extends Equatable {
  final String id;
  final String name;

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

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

위의 예시에서 User 클래스는 Equatable을 상속받고, idname을 포함한 속성들을 props 메서드에 정의하고 있습니다.

Equatable을 활용한 데이터베이스 연동

로컬 데이터베이스와의 연동 시에는 Equatable을 활용하여 데이터의 동등성을 비교하면 매우 유용합니다. Equatable 패키지를 사용하면 데이터 모델 간의 변경 사항을 감지하여 보다 효율적인 데이터베이스 업데이트를 수행할 수 있습니다.

import 'package:equatable/equatable.dart';

class UserRepository {
  final List<User> users = [];

  Future<void> updateUser(User newUser) async {
    final index = users.indexWhere((user) => user.id == newUser.id);
    if (index != -1) {
      if (users[index] != newUser) {
        users[index] = newUser;
        // 데이터베이스 업데이트 로직 수행
      }
    } else {
      users.add(newUser);
      // 데이터베이스 추가 로직 수행
    }
  }
}

위의 코드에서 updateUser 메서드는 새로운 사용자 정보를 받아 기존의 사용자 목록과 비교하여 변경 사항을 감지한 후, 데이터베이스를 업데이트하고 있습니다.

Equatable을 활용하면 데이터 모델 간의 비교가 더욱 쉬워지며, 데이터베이스 연동 작업을 보다 효율적으로 처리할 수 있습니다.

로컬 데이터베이스를 플러터 앱에 효율적으로 연동하기 위해 Equatable을 활용해 보세요!

참고 자료