[flutter] Injectable을 사용하여 플러터 앱의 데이터 흐름 관리하기

앱을 개발하다 보면 데이터 흐름을 효율적으로 관리하는 것은 매우 중요합니다. 플러터(Flutter) 앱에서 데이터 의존성을 관리하기 위해 injectable 라이브러리를 사용할 수 있습니다. injectable은 의존성 주입(Dependency Injection)을 쉽게 구현할 수 있는 도구입니다.

injectable이란?

injectable은 플러터 앱에서 의존성 주입을 간편하게 구현하기 위한 라이브러리입니다. 이를 통해 앱의 다양한 모듈과 클래스 간의 의존관계를 투명하게 관리할 수 있습니다. 이를 통해 개발자는 코드의 유연성과 재사용성을 향상시킬 수 있습니다.

injectable 사용하기

먼저, injectable 라이브러리를 프로젝트에 추가합니다. pubspec.yaml 파일에 다음과 같이 의존성을 추가합니다:

dependencies:
  injectable: ^1.0.0

그런 다음, main.dart 파일에서 injectable을 초기화합니다. 아래와 같이 코드를 작성합니다:

import 'package:injectable/injectable.dart';

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

이제 injectable을 사용하여 의존성을 정의할 수 있습니다. 의존성 주입을 사용하려는 클래스나 모듈 위에 @Injectable() 주석을 추가하고, 해당 클래스를 위한 의존성을 정의합니다. 아래는 예시입니다:

import 'package:injectable/injectable.dart';

@injectable
class UserRepository {
  // ...
}

@module
abstract class RepositoryModule {
  @lazySingleton
  UserRepository get userRepository;
}

위의 코드에서 UserRepository 클래스에 @injectable 주석을 추가하고, RepositoryModule@module 주석을 추가한 후, 해당 클래스의 인스턴스를 정의하였습니다.

이제 injectableUserRepository 클래스의 인스턴스를 생성하고 필요한 곳에 주입할 수 있습니다. 아래와 같이 의존성을 주입받고 사용할 수 있습니다:

import 'package:injectable/injectable.dart';

@injectable
class UserService {
  UserRepository _userRepository;

  UserService(this._userRepository);

  void getUser() {
    // 사용자 정보를 가져오는 로직
  }
}

위의 코드에서 UserService 클래스는 UserRepository 클래스를 인수로 받아와서 사용할 수 있습니다.


이와 같이 injectable을 사용하면 의존성 주입을 쉽게 구현할 수 있으며, 코드의 유연성과 재사용성을 높일 수 있습니다. injectable 라이브러리를 통해 플러터 앱의 데이터 흐름을 효율적으로 관리해보세요!

참고 자료: