[flutter] 플러터에서 Inject와 Injectable을 사용하는 예제 애플리케이션 구현하기

이번 글에서는 Flutter 애플리케이션에서 의존성 주입(Dependency Injection)을 구현하는 두 가지 패키지인 injectinjectable을 사용하는 방법에 대해 알아보겠습니다.

의존성 주입은 코드의 유연성과 재사용성을 높이기 위해 사용되는 패턴으로, 애플리케이션의 의존성을 외부에서 주입하여 개발 과정을 단순화시키고 의존성 관리를 용이하게 합니다. 이를 통해 단위 테스트의 용이성과 모듈의 교체가 쉬워집니다.

1. inject 패키지 설치하기

먼저, inject 패키지를 설치해야 합니다. pubspec.yaml 파일에 아래와 같이 의존성을 추가합니다.

dependencies:
  inject: ^4.1.0

설치한 뒤, pub get 명령어를 실행하여 패키지를 가져옵니다.

2. Injectable 애노테이션 사용하기

의존성 주입을 구현하기 위해, injectable 패키지를 사용합니다. 먼저, injectable 패키지를 설치하기 위해 pubspec.yaml 파일에 아래와 같이 의존성을 추가합니다.

dependencies:
  injectable: ^1.1.0

설치한 뒤, pub get 명령어를 실행하여 패키지를 가져옵니다.

이제 의존성 주입을 사용할 클래스에 @injectable 애노테이션을 추가합니다.

import 'package:injectable/injectable.dart';

@injectable
class MyService {
  void doSomething() {
    print('MyService: Doing something...');
  }
}

@injectable 애노테이션을 사용하여 이 클래스를 의존성 주입이 가능한 클래스로 지정합니다.

3. 주입할 객체 등록하기

의존성 주입을 받을 객체를 등록하기 위해 @InjectableInit 애노테이션과 setupLocator 함수를 사용합니다. 이 함수는 앱의 시작점에서 호출되어 의존성 주입을 받을 모든 객체를 등록합니다.

import 'package:injectable/injectable.dart';

@injectableInit
void setupLocator() => $initGetIt();

@injectableInit 애노테이션을 사용하여 이 함수를 애플리케이션의 시작점에서 호출되도록 지정합니다.

4. 의존성 주입 받기

이제 등록한 의존성 주입 객체를 사용하는 방법에 대해 알아보겠습니다. 주입받을 객체를 사용할 클래스에서 @inject 애노테이션을 사용하고, 주입받을 객체의 타입을 파라미터로 지정합니다.

import 'package:injectable/injectable.dart';
import 'my_service.dart';

@injectable
class MyApp {
  final MyService myService;

  MyApp(@inject MyService myService)
      : this.myService = myService;

  void startApp() {
    myService.doSomething();
  }
}

@inject 애노테이션을 사용하여 MyService 클래스에 의존성 주입을 받습니다.

5. 테스트하기

테스트할 때는 setupLocator 함수를 호출하여 의존성 주입을 초기화한 뒤, 등록된 객체를 사용할 수 있습니다.

import 'my_app.dart';

void main() {
  setupLocator();

  final myApp = MyApp();
  myApp.startApp();
}

setupLocator 함수를 호출하여 의존성 주입을 초기화한 뒤, 등록된 객체를 사용하면 됩니다.

마치며

이렇게 Flutter 애플리케이션에서 Inject와 Injectable 패키지를 사용하여 의존성 주입을 구현하는 방법에 대해 알아보았습니다. 이 패턴을 사용하면 코드의 유연성과 재사용성을 높일 수 있습니다. 이를 통해 애플리케이션을 보다 쉽게 테스트하고 유지보수할 수 있습니다.