[flutter] Injectable을 사용하여 플러터 앱의 데이터 관리 효율화하기

플러터는 모바일 앱 개발을 위한 인기있는 프레임워크입니다. 플러터를 사용하면 여러 플랫폼에서 동작하는 앱을 개발할 수 있습니다. 그러나 많은 데이터를 관리하고 효율적으로 사용하기 위해서는 몇 가지 고려해야 할 사항이 있습니다. 이때 Injectable 라이브러리가 도움이 될 수 있습니다.

Injectable은 의존성 주입(Dependency Injection) 라이브러리로, 플러터 앱의 데이터 관리를 더 쉽게 만들어줍니다. 이 라이브러리를 사용하면 코드의 가독성과 유지 보수성을 향상시킬 수 있습니다.

설정하기

  1. 프로젝트에 injectableinjectable_generator를 추가하세요.
dependencies:
  ...
  injectable: ^1.2.0
dev_dependencies:
  ...
  injectable_generator: ^2.0.0
  1. main.dart 파일에 import 'package:injectable/injectable.dart'; 를 추가하세요.

  2. 앱을 시작하기 전에 configureInjection 함수를 호출하세요.

import 'package:flutter/material.dart';
import 'package:injectable/injectable.dart';

void main() {
  configureInjection(Environment.prod);
  runApp(MyApp());
}

의존성 주입 사용하기

의존성 주입을 적용하기 위해 다음 세 가지 단계를 따르세요.

  1. 의존성을 주입할 클래스에 @injectable 주석을 추가하세요.
@injectable
class DataManager {
  ...
}
  1. 의존성을 주입할 클래스의 생성자에 @injectable 주석을 추가하세요.
@injectable
class DataManager {
  DataManager(ApiClient apiClient, LocalStorage localStorage);
}
  1. 의존성을 주입할 때 @lazySingleton, @preResolve, @singleton, @factoryMethod 등의 주석을 사용하세요.
@injectable
class DataManager {
  DataManager(
    @Named("remote") @lazySingleton ApiClient apiClient,
    @Named("local") @singleton LocalStorage localStorage,
  );
}

의존성 주입 사용 예제

다음은 의존성 주입을 사용하여 데이터 관리를 효율적으로 하는 예제입니다.

@injectable
class DataManager {
  final ApiClient _apiClient;
  final LocalStorage _localStorage;

  DataManager(this._apiClient, this._localStorage);

  Future<User> loginUser(LoginData loginData) async {
    // API 클라이언트를 사용하여 로그인 요청을 보냄
    final response = await _apiClient.login(loginData);

    // 응답을 로컬 스토리지에 저장
    _localStorage.saveUserToken(response.token);

    // 응답에서 유저 정보 추출
    final user = response.user;

    return user;
  }
}

이 예제에서는 DataManager 클래스가 ApiClientLocalStorage에 의존합니다. @injectable 주석을 사용하여 해당 클래스들을 의존성 주입 가능하게 만들었습니다. 따라서 loginUser 함수에서는 ApiClient를 사용하여 로그인 요청을 보내고, 응답을 LocalStorage에 저장합니다.

Injectable을 사용하면 의존성을 주입하는 과정이 단순해지고 코드의 가독성이 향상됩니다. 또한, 테스트 가능한 코드를 작성하는 데 도움이 됩니다.

플러터 앱의 데이터 관리를 보다 효율적이고 유지 보수 가능한 코드로 만들기 위해 Injectable 라이브러리를 사용해보세요!


참고 문서