[flutter] Injectable을 사용하여 플러터 앱의 데이터 구조 개선하기

소개

플러터(Flutter)는 구글에서 개발한 사용자 인터페이스(UI) 프레임워크로, 여러 플랫폼에서 동작하는 앱을 개발할 수 있습니다. 하지만 대규모 앱을 개발할 때, 데이터 구조의 관리가 복잡해질 수 있습니다. 이러한 문제를 해결하기 위해 injectable 패키지를 사용하여 플러터 앱의 데이터 구조를 개선해보겠습니다.

injectable 패키지란?

injectable은 플러터 앱에서 의존성 주입(Dependency Injection)을 보다 간편하게 구현할 수 있도록 도와주는 패키지입니다. 의존성 주입은 클래스 간의 의존 관계를 유연하게 관리하는 디자인 패턴으로, 앱 내의 객체들 간의 결합도를 낮추고 유지보수성을 높일 수 있습니다.

데이터 구조 개선을 위한 injectable 사용하기

  1. injectable 패키지 추가하기

    플러터 프로젝트의 pubspec.yaml 파일에 injectable 패키지를 추가해줍니다.

    dependencies:
      injectable: ^1.0.0
    
  2. injectable 초기화하기

    main.dart 파일에서 injectable을 초기화합니다. 이를 위해, setupLocator() 함수를 호출해줍니다.

    import 'package:injectable/injectable.dart';
    import 'package:your_project_name/injection.dart';
    
    void main() {
      configureInjection(Environment.prod);
      runApp(MyApp());
    }
    
  3. 의존성 주입을 위한 클래스 생성하기

    injectable을 사용하려는 클래스에는 @injectable 어노테이션을 추가해야합니다. 이를 통해 해당 클래스를 의존성 주입이 가능한 클래스로 만들어줍니다.

    @injectable
    class UserRepository {
      // ...
    }
    
  4. 의존성 주입하기

    의존성을 주입받고자 하는 클래스에서 @injectable 어노테이션 위에 @Singleton() 어노테이션을 추가해주고, 해당 클래스를 생성자로 주입받아 사용합니다.

    @injectable
    @Singleton()
    class UserService {
      final UserRepository _userRepository;
    
      UserService(this._userRepository);
    
      // ...
    }
    
  5. 의존성 주입된 객체 사용하기

    의존성 주입이 완료된 객체는 getIt을 통해 사용할 수 있습니다. 이를 위해 injection.dart 파일을 생성하고, 다음과 같이 getIt을 초기화해줍니다.

    final getIt = GetIt.instance;
    
    @injectableInit
    void configureInjection(String environment) {
      $initGetIt(getIt, environment: environment);
    }
    

    그 후에, 의존성 주입이 끝난 객체를 getIt을 통해 사용합니다.

    final userRepository = getIt<UserRepository>();
    final userService = getIt<UserService>();
    

결론

injectable 패키지를 사용하여 플러터 앱의 데이터 구조를 개선하면, 의존성 주입을 간편하게 구현할 수 있고, 앱의 유지보수성을 향상시킬 수 있습니다. injectable을 사용하여 플러터 앱을 개발할 때, 의존성 주입을 적절히 활용하여 효율적인 데이터 관리를 실현해보세요.


참고 문서: