[flutter] Injectable 클래스를 만들기 위한 기본적인 세팅

목차

소개

Flutter 애플리케이션을 개발할 때 의존성 주입(Dependency Injection)은 코드의 유지보수성과 테스트 용이성을 높이기 위해 중요한 요소입니다. Injectable 클래스는 의존성 주입을 쉽게 할 수 있도록 도와주는 패키지입니다. 이 글에서는 Injectable 클래스를 만들기 위한 기본적인 세팅을 알아보겠습니다.

Injectable 패키지 설치하기

Dart 패키지 관리자인 pub을 사용하여 Injectable 패키지를 설치할 수 있습니다. 프로젝트 루트 디렉토리에서 다음 명령어를 실행합니다:

pub add injectable

Injectable 설정하기

프로젝트 루트의 pubspec.yaml 파일을 열고 아래 내용을 추가합니다:

injectable:
  config:
    enabled: true
  imports:
    - 'lib/injectable_module.dart'

위의 설정은 lib/injectable_module.dart 파일을 포함하도록 지정하고, Injectable을 활성화합니다.

Injectable 클래스 만들기

lib 디렉토리에 injectable_module.dart 파일을 생성하고, 다음과 같이 코드를 작성합니다:

import 'package:injectable/injectable.dart';

@module
abstract class InjectableModule {
  // 의존성 주입을 원하는 클래스나 팩토리를 등록합니다.
  @lazySingleton
  ApiService get apiService => ApiService();

  @preResolve
  Future<SharedPreferences> get sharedPreferences async =>
      await SharedPreferences.getInstance();
}

위 코드에서 @module 어노테이션은 이 클래스를 Injectable 모듈로 정의한다는 의미입니다. @lazySingleton 어노테이션은 ApiService 인스턴스가 처음 사용될 때 생성되도록 지정합니다. @preResolve 어노테이션은 sharedPreferences를 미리 해결하여 비동기 비용을 줄일 수 있도록 합니다.

의존성 주입 사용하기

의존성 주입을 사용하려면 해당 인스턴스를 가져올 클래스에서 @injectable 어노테이션을 추가해줍니다. 예를 들어, 아래와 같이 사용할 수 있습니다:

import 'package:injectable/injectable.dart';

@injectable
class ExampleClass {
  final ApiService _apiService;

  ExampleClass(this._apiService);

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

위의 코드에서 @injectable 어노테이션은 ExampleClass가 의존성 주입을 받을 수 있도록 지정합니다. ApiService 인스턴스는 ExampleClass의 생성자를 통해 주입됩니다.

이제 Injectable 클래스를 만들기 위한 기본적인 세팅이 완료되었습니다. 의존성 주입을 통해 코드의 유지보수성과 테스트 용이성을 향상시킬 수 있습니다.

참고 자료