[flutter] 플러터에서 Inject와 Injectable을 사용한 모듈간 의존성 관리 방법

의존성 관리는 모바일 앱 개발에서 매우 중요한 부분입니다. 플러터에서는 다양한 방법으로 의존성을 관리할 수 있지만, 이번에는 InjectInjectable을 사용한 의존성 관리 방법에 대해 알아보겠습니다.

1. Inject와 Injectable 라이브러리 소개

2. Inject와 Injectable 사용하기

2.1. 의존성 주입 설정하기

먼저, 의존성 주입을 사용하기 위해 injectable 패키지를 pubspec.yaml 파일에 추가해야 합니다. 하지만 Inject는 Dart의 코드 생성 기능을 이용하기 때문에, 추가적으로 build_runnerinject_generator 패키지도 설치해야 합니다.

dependencies:
  injectable:
  flutter:
    sdk: flutter

dev_dependencies:
  build_runner:
  inject_generator:

2.2. 모듈 생성과 의존성 등록하기

모듈은 의존성을 관리하기 위한 단위로 사용됩니다. 다음은 예시로써 data_module.dart 파일을 생성하고 모듈을 구성하는 방법을 보여줍니다.

import 'package:injectable/injectable.dart';

@module
abstract class DataModule {
  @singleton
  MyRepository get myRepository => MyRepository();
  
  // 다른 의존성 등록
}

위의 코드에서 @module은 해당 클래스가 모듈임을 알리는 애노테이션입니다. @singleton은 해당 의존성이 싱글톤으로 관리됨을 의미합니다.

2.3. 의존성 주입하기

이제 의존성을 주입받고 싶은 클래스에서 @injectable 애노테이션을 추가합니다. 다음은 예시로써 my_service.dart 파일을 보여줍니다.

import 'package:injectable/injectable.dart';

@injectable
class MyService {
  final MyRepository _myRepository;
  
  MyService(this._myRepository);
  
  // 기능 구현
}

위의 코드에서 @injectable 애노테이션은 의존성을 주입받을 수 있는 클래스임을 나타냅니다. 생성자에서 필요한 인자를 선언하여 의존성을 주입받을 수 있습니다.

2.4. 의존성 주입 사용하기

이제 의존성 주입이 완료되었으므로 해당 클래스에서 의존성을 사용할 수 있습니다. 예를 들어, main.dart 파일에서 MyService 클래스를 사용하는 방법은 다음과 같습니다.

void main() {
  configureDependencies(); // 의존성 주입 설정
  
  final MyService myService = getIt<MyService>();
  myService.doSomething(); // 의존성 사용
  
  runApp(MyApp());
}

위의 코드에서 configureDependencies()는 의존성 주입 설정을 초기화하는 역할을 합니다. getIt은 의존성 주입 컨테이너로 등록된 객체를 가져올 수 있는 메소드입니다.

3. 마무리

이와 같이 InjectInjectable을 사용하면 플러터에서 모듈간 의존성을 효과적으로 관리할 수 있습니다. 간편한 설정과 사용법을 통해 코드의 재사용성과 유지보수성을 높일 수 있습니다.

더 자세한 내용과 사용 예시는 아래의 참고 자료를 확인해주세요.

참고 자료