[flutter] Injectable을 사용하여 플러터 앱의 확장성과 재사용성 높이기

플러터(Flutter)는 크로스 플랫폼 모바일 애플리케이션을 개발하기 위한 인기 있는 프레임워크입니다. 하지만 앱이 커지고 복잡해질수록 코드의 구조화와 의존성 관리는 어려워집니다. 이러한 문제를 해결하기 위해 Injectable 라이브러리를 사용해보는 것은 매우 유용합니다. Injectalbe은 의존성 주입(Dependency Injection)을 플러터 앱에서 쉽게 구현할 수 있게 도와주는 라이브러리입니다. 이를 통해 코드의 확장성과 재사용성을 높일 수 있습니다.

의존성 주입(Dependency Injection)이란?

의존성 주입은 객체 사이의 의존성을 외부에서 주입하는 디자인 패턴입니다. 일반적으로 클래스 내에서 필요한 객체를 직접 생성하는 것이 아니라, 외부의 주입기능을 활용하여 객체를 전달받는 방식입니다. 이를 통해 코드의 결합도를 낮추고, 유연성과 테스트 용이성을 높일 수 있습니다.

Injectable 소개

Injectable은 플러터 앱에서 의존성 주입을 쉽게 구현할 수 있도록 도와주는 라이브러리입니다. Injectable을 사용하면 의존성 주입을 위한 불필요한 코드 작성을 최소화할 수 있으며, 앱의 확장과 재사용성을 향상시킬 수 있습니다.

Injectable의 기능은 다음과 같습니다:

사용 방법

  1. injectable 패키지를 pubspec.yaml에 추가하고, 의존성 주입을 사용하려는 패키지를 추가합니다.
dependencies:
  injectable: ^1.4.0
  flutter:
    sdk: flutter
  1. main.dart 파일에 다음과 같이 injectable을 초기화합니다.
import 'package:injectable/injectable.dart';

void main() {
  configureInjection(Environment.prod);
  runApp(MyApp());
}
  1. 의존성 주입을 사용할 클래스에 @Injectable() 데코레이터를 추가합니다.
import 'package:injectable/injectable.dart';

@injectable
class MyService {
  void doSomething() {
    // do something...
  }
}
  1. 의존성 주입을 받을 클래스에서 생성자를 이용해 의존성을 주입받습니다.
class MyWidget extends StatelessWidget {
  final MyService myService;

  MyWidget(this.myService);

  // Widget 구현...
}
  1. 앱 실행시 의존성 주입을 받은 다음, 해당 클래스를 사용할 수 있습니다.
void main() {
  final myService = getIt<MyService>();
  myService.doSomething();
  runApp(MyApp());
}

결과

Injectable을 사용하면 플러터 앱의 의존성 주입을 쉽게 구현할 수 있습니다. 이를 통해 코드의 확장성과 재사용성이 향상되며, 앱의 유지보수가 용이해집니다.