[flutter] Injectable을 사용하여 의존성 주입을 처리하는 플러터 앱 아키텍처

의존성 주입은 앱 개발에서 중요한 부분입니다. 이를 효과적으로 처리하기 위해서는 관리하기 쉬운 코드 구조와 의존성 주입을 자동으로 처리하는 메커니즘이 필요합니다. Flutter에서는 이를 위해 Injectabe 패키지를 사용할 수 있습니다.

1. Injectable 패키지 추가하기

먼저, 프로젝트에 injectable 패키지를 추가해야 합니다. pubspec.yaml 파일에 다음과 같이 injectable 패키지를 추가합니다:

dependencies:
  injectable: ^1.1.0

그리고 패키지를 업데이트합니다:

$ flutter packages get

2. Injectable 설정하기

다음으로, injectable 패키지를 사용하기 위해 앱의 주 시작 파일인 main.dart에 다음과 같이 설정합니다:

import 'package:injectable/injectable.dart';
import 'injection.dart' as di;

void main() {
  configureInjection(di.injectableModule);
  runApp(MyApp());
}

위 코드에서는 injection.dart 파일에 정의된 injectableModule을 사용하여 주입을 설정합니다.

3. 의존성 주입 정의하기

injection.dart 파일을 생성하고 의존성 주입을 정의합니다. 예를 들어, 다음과 같이 @injectable 어노테이션을 사용하여 의존성을 주입할 수 있습니다:

import 'package:injectable/injectable.dart';

@module
abstract class InjectableModule {
  @lazySingleton
  UserRepository get userRepository => UserRepositoryImpl();
}

위 코드에서는 UserRepositoryUserRepositoryImpl로 주입합니다. @lazySingleton 어노테이션은 의존성을 한 번만 생성하고 재사용한다는 의미입니다.

4. 의존성 주입 사용하기

이제 의존성 주입을 사용할 수 있습니다. 예를 들어, 위에서 정의한 UserRepository를 사용하는 UserBloc을 만들어 보겠습니다:

import 'package:injectable/injectable.dart';

@injectable
class UserBloc {
  final UserRepository _userRepository;

  UserBloc(this._userRepository);

  // ...
}

위 코드에서는 @injectable 어노테이션을 사용하여 UserBloc가 의존성 주입을 받을 것임을 명시합니다. _userRepository는 의존성 주입으로 자동으로 주입됩니다.

이렇게 설정하면 UserBloc을 사용하는 모든 곳에서 자동으로 의존성 주입이 처리됩니다.

마무리

Flutter에서 injectable 패키지를 사용하여 의존성 주입을 처리하는 방법을 알아보았습니다. 이를 사용하면 코드를 더욱 관리하기 쉽고 재사용성이 높은 앱을 개발할 수 있습니다. 자세한 내용은 injectable의 공식 문서를 참고하시기 바랍니다.