[flutter] Injectable을 사용하여 플러터 앱의 확장성 향상하기

플러터 앱을 개발하면서 앱의 구조와 확장성을 고려하는 것이 중요합니다. 이러한 고려사항 중 하나는 의존성 관리입니다. 의존성 관리는 앱의 모듈화를 용이하게 하고 코드의 유지 보수성을 향상시킬 수 있는 중요한 요소입니다.

이번 블로그 포스트에서는 Injectable 패키지를 사용하여 플러터 앱의 의존성 관리를 향상시킬 수 있는 방법에 대해 알아보겠습니다.

1. Injectable 패키지란?

Injectable은 플러터 앱에서 의존성 주입을 구현하기 위한 패키지입니다. 이 패키지를 사용하면 의존성을 선언하고 주입하는 과정을 간단하게 처리할 수 있습니다. Injectable 패키지는 get_it 패키지의 기능을 확장하고 보다 편리하게 의존성 관리를 제공합니다.

2. 프로젝트에 Injectable 패키지 추가하기

먼저, pubspec.yaml 파일에 injectableget_it 패키지를 추가해야 합니다.

dependencies:
  injectable: ^1.0.6
  get_it: ^4.1.4

의존성을 추가한 후에는 pub get 명령어를 실행하여 패키지를 설치해야 합니다.

3. 의존성 주입 설정하기

injectable_generator를 사용하여 의존성 주입 설정을 생성해야 합니다. 의존성 주입 설정은 injectable 어노테이션을 사용하여 선언됩니다.

import 'package:injectable/injectable.dart';

@module
abstract class DependencyInjection {
  @Singleton()
  MySingleton get mySingleton;
  @preResolve
  Future<MyRepository> get myRepository;
}

위의 예시에서는 MySingletonMyRepository라는 두 개의 의존성을 선언하고 있습니다. @Singleton() 어노테이션은 싱글톤 객체로 만들어지는 의존성을 정의합니다. @preResolve 어노테이션은 비동기 초기화를 필요로 하는 의존성을 정의합니다.

4. 코드에서 의존성 주입 사용하기

의존성 주입 설정을 마쳤으면, 코드에서 해당 의존성을 사용할 수 있습니다. get_it 패키지를 사용하여 의존성을 가져올 수 있습니다.

import 'package:get_it/get_it.dart';

final GetIt getIt = GetIt.instance;

void setupDependencyInjection() {
  $initGetIt(getIt);
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    final mySingleton = getIt<MySingleton>();
    final myRepo = getIt<MyRepository>();
    
    // 의존성 사용
    // ...
    
    return Scaffold(
      // ...
    );
  }
}

위 코드에서 setupDependencyInjection() 함수는 앱이 실행될 때 get_it을 초기화하기 위해 호출됩니다. 그리고 MyHomePage 위젯에서 필요한 의존성을 getIt을 통해 가져오고 사용합니다.

5. 추가 기능 및 고급 설정

Injectable 패키지는 의존성 주입을 구현하는 몇 가지 추가 기능을 제공합니다. 다양한 주입 방식, 팩토리 메서드, 환경별 설정 등을 지원하며, 자세한 내용은 공식 문서를 참조하시기 바랍니다.

결론

Injectable 패키지를 사용하여 플러터 앱의 의존성 관리를 개선할 수 있습니다. 코드의 모듈화와 유지 보수성을 향상시킬 수 있으며, 추가 기능을 통해 유연한 의존성 주입을 구현할 수도 있습니다. 의존성 관리를 잘 활용하여 효율적이고 확장 가능한 플러터 앱을 개발해보세요!