[flutter] Injectable을 사용하여 플러터 앱의 코드가독성 개선하기

개요

플러터 앱을 개발하는 동안 코드의 가독성은 매우 중요한 요소입니다. 코드의 가독성이 좋으면 유지보수가 쉬어지고, 협업할 때도 효율적으로 작업할 수 있습니다. 이번 글에서는 injectable 라이브러리를 사용하여 플러터 앱의 코드 가독성을 개선하는 방법을 알아보겠습니다.

injectable이란?

injectable은 플러터에서 의존성 주입(Dependency Injection)을 사용하기 쉽게 만들어주는 라이브러리입니다. 의존성 주입은 객체 간의 의존 관계를 느슨하게 만들어 유연한 코드를 작성할 수 있게 도와줍니다. injectableget_it 의존성 주입 컨테이너와 함께 사용할 수 있습니다.

사용 방법

  1. pubspec.yaml 파일에 injectableget_it 라이브러리를 추가합니다.
dependencies:
  ...
  get_it: ^7.0.2
  injectable: ^2.0.1
  1. main.dart 파일에 injectable을 초기화합니다.
import 'package:injectable/injectable.dart';
import 'package:get_it/get_it.dart';

Future<void> main() async {
  await configureInjection(Environment.prod); // 또는 Environment.dev
  runApp(MyApp());
}
  1. 의존성을 주입할 클래스를 작성합니다. (@Injectable() 어노테이션을 사용해야 합니다)
import 'package:injectable/injectable.dart';

@Injectable()
class ApiService {
  void fetchData() {
    // 데이터를 가져오는 로직
  }
}
  1. 사용할 곳에서 해당 클래스에 의존성을 주입합니다.
import 'package:get_it/get_it.dart';
import 'package:injectable/injectable.dart';

final getIt = GetIt.instance;

@Injectable()
class ExampleService {
  final ApiService apiService = getIt<ApiService>(); // 의존성 주입

  void fetchData() {
    apiService.fetchData();
  }
}

추가 기능

injectable은 다양한 기능을 제공합니다. 몇 가지 예시를 살펴보겠습니다.

@singleton
class ExampleService {
  //...
}
@lazySingleton
class ExampleService {
  //...
}
@preResolve
@singleton
class ExampleService {
  //...
}
@Environment(Environment.prod)
class ExampleService {
  //...
}

@Environment(Environment.dev)
class ExampleService {
  //...
}

위와 같이 injectable을 사용하면 코드가독성을 향상시킬 뿐만 아니라 의존성 주입의 편의성도 높일 수 있습니다. 개발을 진행하면서 코드의 가독성을 고려하고자 한다면 injectable을 적극적으로 활용해보세요.

참고 자료