플러터는 모바일 앱 개발을 위한 인기있는 프레임워크입니다. 플러터를 사용하면 여러 플랫폼에서 동작하는 앱을 개발할 수 있습니다. 그러나 많은 데이터를 관리하고 효율적으로 사용하기 위해서는 몇 가지 고려해야 할 사항이 있습니다. 이때 Injectable 라이브러리가 도움이 될 수 있습니다.
Injectable은 의존성 주입(Dependency Injection) 라이브러리로, 플러터 앱의 데이터 관리를 더 쉽게 만들어줍니다. 이 라이브러리를 사용하면 코드의 가독성과 유지 보수성을 향상시킬 수 있습니다.
설정하기
- 프로젝트에
injectable
및injectable_generator
를 추가하세요.
dependencies:
...
injectable: ^1.2.0
dev_dependencies:
...
injectable_generator: ^2.0.0
-
main.dart
파일에import 'package:injectable/injectable.dart';
를 추가하세요. -
앱을 시작하기 전에
configureInjection
함수를 호출하세요.
import 'package:flutter/material.dart';
import 'package:injectable/injectable.dart';
void main() {
configureInjection(Environment.prod);
runApp(MyApp());
}
의존성 주입 사용하기
의존성 주입을 적용하기 위해 다음 세 가지 단계를 따르세요.
- 의존성을 주입할 클래스에
@injectable
주석을 추가하세요.
@injectable
class DataManager {
...
}
- 의존성을 주입할 클래스의 생성자에
@injectable
주석을 추가하세요.
@injectable
class DataManager {
DataManager(ApiClient apiClient, LocalStorage localStorage);
}
- 의존성을 주입할 때
@lazySingleton
,@preResolve
,@singleton
,@factoryMethod
등의 주석을 사용하세요.
@injectable
class DataManager {
DataManager(
@Named("remote") @lazySingleton ApiClient apiClient,
@Named("local") @singleton LocalStorage localStorage,
);
}
의존성 주입 사용 예제
다음은 의존성 주입을 사용하여 데이터 관리를 효율적으로 하는 예제입니다.
@injectable
class DataManager {
final ApiClient _apiClient;
final LocalStorage _localStorage;
DataManager(this._apiClient, this._localStorage);
Future<User> loginUser(LoginData loginData) async {
// API 클라이언트를 사용하여 로그인 요청을 보냄
final response = await _apiClient.login(loginData);
// 응답을 로컬 스토리지에 저장
_localStorage.saveUserToken(response.token);
// 응답에서 유저 정보 추출
final user = response.user;
return user;
}
}
이 예제에서는 DataManager
클래스가 ApiClient
와 LocalStorage
에 의존합니다. @injectable
주석을 사용하여 해당 클래스들을 의존성 주입 가능하게 만들었습니다. 따라서 loginUser
함수에서는 ApiClient
를 사용하여 로그인 요청을 보내고, 응답을 LocalStorage
에 저장합니다.
Injectable을 사용하면 의존성을 주입하는 과정이 단순해지고 코드의 가독성이 향상됩니다. 또한, 테스트 가능한 코드를 작성하는 데 도움이 됩니다.
플러터 앱의 데이터 관리를 보다 효율적이고 유지 보수 가능한 코드로 만들기 위해 Injectable 라이브러리를 사용해보세요!
참고 문서
- Injectable Documentation
- Dependency Injection in Flutter with Injectable
- Smart Dependency Injection In Flutter Using Injectable