[flutter] Injectable을 사용하여 플러터 앱의 코드가독성 개선하기
개요
플러터 앱을 개발하는 동안 코드의 가독성은 매우 중요한 요소입니다. 코드의 가독성이 좋으면 유지보수가 쉬어지고, 협업할 때도 효율적으로 작업할 수 있습니다. 이번 글에서는 injectable
라이브러리를 사용하여 플러터 앱의 코드 가독성을 개선하는 방법을 알아보겠습니다.
injectable이란?
injectable
은 플러터에서 의존성 주입(Dependency Injection)을 사용하기 쉽게 만들어주는 라이브러리입니다. 의존성 주입은 객체 간의 의존 관계를 느슨하게 만들어 유연한 코드를 작성할 수 있게 도와줍니다. injectable
은 get_it
의존성 주입 컨테이너와 함께 사용할 수 있습니다.
사용 방법
pubspec.yaml
파일에injectable
과get_it
라이브러리를 추가합니다.
dependencies:
...
get_it: ^7.0.2
injectable: ^2.0.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());
}
- 의존성을 주입할 클래스를 작성합니다. (
@Injectable()
어노테이션을 사용해야 합니다)
import 'package:injectable/injectable.dart';
@Injectable()
class ApiService {
void fetchData() {
// 데이터를 가져오는 로직
}
}
- 사용할 곳에서 해당 클래스에 의존성을 주입합니다.
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
어노테이션을 사용하여 싱글톤 객체를 생성할 수 있습니다.
@singleton
class ExampleService {
//...
}
@lazySingleton
어노테이션을 사용하여 지연 초기화가 가능한 싱글톤 객체를 생성할 수 있습니다.
@lazySingleton
class ExampleService {
//...
}
@preResolve
어노테이션을 사용하여 객체를 미리 생성할 수 있습니다.
@preResolve
@singleton
class ExampleService {
//...
}
- 프로덕션과 개발 환경에 따라 의존성을 다르게 주입하고 싶다면
@Environment
어노테이션을 사용할 수 있습니다.
@Environment(Environment.prod)
class ExampleService {
//...
}
@Environment(Environment.dev)
class ExampleService {
//...
}
위와 같이 injectable
을 사용하면 코드가독성을 향상시킬 뿐만 아니라 의존성 주입의 편의성도 높일 수 있습니다. 개발을 진행하면서 코드의 가독성을 고려하고자 한다면 injectable
을 적극적으로 활용해보세요.