[flutter] 플러터에서 Injectable을 사용하여 의존성 주입 변경하기

의존성 주입(Dependency Injection)은 애플리케이션에서 객체 간의 의존성을 해결하는 방법입니다. 플러터에서는 여러 가지 의존성 주입 패턴 중 하나인 Injectable을 사용하여 의존성 주입을 쉽게 변경할 수 있습니다.

Injectable 패키지 설치

먼저, 프로젝트에 injectable 패키지를 설치해야 합니다. pubspec.yaml 파일에 아래의 의존성을 추가하세요.

dependencies:
  injectable: ^1.3.0

의존성을 추가한 후, 패키지를 가져오기 위해 터미널에서 flutter pub get 명령을 실행하세요.

의존성 주입 설정하기

  1. main.dart 파일에 setupInjection() 함수를 추가해주세요.
import 'package:injectable/injectable.dart';

void main() {
  configureInjection(Environment.prod);
  runApp(MyApp());
}
  1. 프로젝트의 루트 디렉터리에 injection.dart 파일을 생성해주세요. 이 파일은 의존성 주입을 설정하는 곳입니다.
import 'package:injectable/injectable.dart';

@module
abstract class InjectableModule {
  // 여기에 주입할 의존성을 정의하세요.
}
  1. 의존성 주입할 클래스에 @injectable 어노테이션을 추가하세요.
@injectable
class UserRepository {
  // ...
}

의존성 주입 사용하기

  1. 사용할 클래스에서 의존성을 주입받을 변수를 선언합니다.
@injectable
class UserService {
  UserRepository _userRepository;

  UserService(this._userRepository);
}
  1. 사용할 클래스를 @Injectable() 어노테이션으로 주입받아 사용합니다.
@injectable
class MyApp extends StatelessWidget {
  final UserService _userService;

  const MyApp(this._userService, {Key? key}) : super(key: key);

  // ...
}

의존성 주입 변경하기

  1. injection.dart 파일에서 의존성을 변경하고 싶다면, 해당 클래스의 구현체를 수정하거나 새로운 클래스를 추가하세요.
@injectable
class MockUserRepository implements UserRepository {
  // ...
}
  1. injection.dart 파일에서 의존성을 변경해주세요.
import 'package:injectable/injectable.dart';

@module
abstract class InjectableModule {
  // 주입할 의존성을 변경하세요.
  @lazySingleton
  UserRepository get userRepository => MockUserRepository();
}

이제 플러터에서 Injectable 패키지를 사용하여 의존성 주입을 쉽게 변경할 수 있습니다. 의존성 주입을 효율적으로 관리하여 코드의 유지 보수성과 테스트 가능성을 높이세요.


참고 자료