[flutter] 플러터에서 Injectable을 활용한 의존성 주입 프로세스 개요

의존성 주입(Dependency Injection)은 소프트웨어 개발에서 중요한 개념입니다. 이를 통해 코드의 유연성과 재사용성을 높일 수 있으며, 유지보수 및 테스트도 훨씬 용이해집니다.

Flutter에서는 의존성 주입을 쉽게 구현하기 위해 injectable 패키지를 사용할 수 있습니다. injectable 패키지는 get_it 패키지를 내부적으로 활용하며, DI(Dependency Injection) 컨테이너를 통해 의존성을 주입할 수 있습니다.

1. injectable 패키지 설치

먼저, 프로젝트의 pubspec.yaml 파일에 injectable 패키지를 추가해야 합니다. 아래와 같이 dependencies 섹션에 injectable 패키지를 추가합니다.

dependencies:
  injectable: ^1.2.0

변경사항을 저장한 후, flutter packages get 명령어를 통해 패키지를 설치합니다.

2. DI 컨테이너 설정

의존성 주입을 사용하려면 DI 컨테이너를 설정해야 합니다. 일반적으로 main 함수에서 컨테이너를 구성하는 것이 좋습니다.

import 'package:injectable/injectable.dart';

// ...

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

여기서 configureInjection 함수는 injectable 패키지에서 제공하는 함수로, DI 컨테이너를 설정합니다. Environment.prod는 환경을 나타내며, prod는 서비스 환경을 의미합니다.

3. 의존성 주입 설정

의존성 주입은 @injectable 어노테이션을 통해 설정할 수 있습니다. 주입할 클래스에 @injectable 어노테이션을 추가하면 됩니다. 예를 들어, MyService 클래스를 주입하고 싶다면 아래와 같이 코드를 작성합니다.

@injectable
class MyService {
  // ...
}

주입할 클래스에 생성자가 있는 경우, 해당 생성자에도 @injectable 어노테이션을 추가합니다.

@injectable
class MyService {
  MyService(Database database) {
    // ...
  }
}

@injectable
class Database {
  // ...
}

injectable 패키지는 주입할 클래스들을 자동으로 스캔하고 DI 컨테이너에 등록합니다. 따라서, 이제 MyService를 주입할 수 있습니다.

4. DI 컨테이너를 통한 주입

이제 DI 컨테이너를 통해 주입할 수 있습니다. get_it 패키지의 GetIt 클래스를 사용하여 주입할 수 있습니다. 예를 들어, MyService를 주입받아 사용하려면 아래와 같이 코드를 작성합니다.

import 'package:get_it/get_it.dart';

void main() {
  configureInjection(Environment.prod);
  
  final myService = GetIt.instance<MyService>();
  // MyService를 사용하여 동작 수행...

  runApp(MyApp());
}

여기서 GetIt.instance<MyService>()를 통해 MyService를 주입받을 수 있습니다. 이후에는 myService 객체를 사용하여 해당 클래스의 동작을 수행할 수 있습니다.

5. 주의사항

의존성 주입을 사용할 때, 몇 가지 주의할 점이 있습니다.

  1. 주입할 클래스에는 반드시 @injectable 어노테이션이 필요합니다.
  2. 생성자의 모든 매개변수에는 주입할 클래스를 받을 수 있도록 @injectable 어노테이션을 추가해야 합니다.
  3. 직접 생성한 클래스를 주입할 경우, 해당 클래스도 @injectable 어노테이션을 추가해야 합니다.
  4. DI 컨테이너를 사용하기 전에 configureInjection 함수를 통해 컨테이너 설정을 해 주어야 합니다.

결론

injectable 패키지를 활용하여 플러터에서 의존성 주입 프로세스를 구현하는 방법에 대해 알아보았습니다. 이를 통해 코드의 유연성과 재사용성을 높일 수 있으며, 효율적인 소프트웨어 개발에 도움이 될 것입니다. 자세한 내용은 injectable 패키지의 공식 문서를 참고하시기 바랍니다.