[flutter] 플러터의 Inject와 Injectable의 사용 예시

이번 글에서는 플러터(Flutter)에서 의존성 주입(Dependency Injection)을 쉽게 구현할 수 있는 라이브러리인 InjectInjectable의 사용 예시에 대해 알아보겠습니다.

1. 의존성 주입이란?

의존성 주입은 애플리케이션에서 각 모듈이나 컴포넌트 간의 의존 관계를 분리하여 유연성과 테스트 용이성을 높이는 방법입니다. 의존성 주입을 사용하면 코드의 가독성과 재사용성을 향상시킬 수 있으며, 특히 프로젝트의 규모가 커질수록 유지보수가 용이해집니다.

2. Inject와 Injectable 소개

Inject는 플러터에서 의존성 주입을 구현하기 위한 라이브러리로, 코드의 복잡함을 낮추고 의존성 주입을 간단하게 정의할 수 있게 도와줍니다. InjectableInject과 함께 사용되어 의존성 주입할 클래스를 정의하는 어노테이션입니다.

3. 사용 예시

3.1. 의존성 주입 설정하기

먼저, get_it 라이브러리를 통해 의존성 주입을 관리할 수 있는 컨테이너를 설정해야 합니다. 다음 코드와 같이 di.dart 파일을 생성하고 필요한 패키지를 import 합니다.

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

final getIt = GetIt.instance;

@injectableInit
void configureDependencies() => $initGetIt(getIt);

injectableInit 어노테이션은 의존성 주입 설정 함수를 호출하기 위한 어노테이션입니다. 이제 main.dart에서 configureDependencies() 함수를 호출하여 의존성 주입을 설정할 수 있습니다.

3.2. 클래스 의존성 주입 설정하기

다음으로, 의존성 주입을 설정할 클래스에 @injectable 어노테이션을 사용합니다. 이 어노테이션은 해당 클래스를 의존성 주입할 수 있는 클래스로 지정합니다. 이후 해당 클래스의 생성자에 @inject 어노테이션을 사용하여 의존성 주입할 필요한 객체를 정의합니다.

import 'package:injectable/injectable.dart';

@injectable
class UserRepository {
  UserRepository();

  // 의존성 주입할 필요한 객체들
}

@injectable
class UserService {
  UserService(UserRepository userRepository);

  // 의존성 주입할 필요한 객체들
}

3.3. 의존성 주입 사용하기

이제 의존성 주입이 설정된 클래스를 사용할 수 있습니다. 다음과 같이 main.dart에서 필요한 의존성들을 주입받을 수 있습니다.

import 'package:flutter/material.dart';
import 'package:injectable_example/di.dart';
import 'package:injectable_example/user_service.dart';

void main() {
  configureDependencies();
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  final UserService userService = getIt<UserService>();

  @override
  Widget build(BuildContext context) {
    // userService를 사용한 코드 작성
  }
}

위 예제에서는 UserService 클래스를 사용하기 위해 getIt<UserService>()로 해당 클래스의 인스턴스를 생성하여 사용하고 있습니다.

4. 결론

이제 InjectInjectable을 사용하여 플러터에서 의존성 주입을 간단하게 구현하는 방법에 대해 알아보았습니다. 이를 사용하면 코드의 유연성과 테스트 용이성을 향상시킬 수 있으며, 프로젝트의 규모가 커질수록 유지보수가 용이해집니다. 의존성 주입을 적절하게 사용하여 더 나은 애플리케이션을 개발할 수 있도록 노력해보세요.