목차
소개
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 클래스를 만들기 위한 기본적인 세팅이 완료되었습니다. 의존성 주입을 통해 코드의 유지보수성과 테스트 용이성을 향상시킬 수 있습니다.