플러터(Flutter)는 구글에서 개발한 모바일 애플리케이션 개발 프레임워크로, 하나의 코드베이스로 iOS와 Android 앱을 개발할 수 있습니다. 하지만 프로젝트가 커지면서 코드를 모듈화하고 의존성을 관리하는 것이 중요해집니다.
이때 Injectable이라는 라이브러리를 사용하면 효과적으로 코드를 모듈화할 수 있습니다. Injectable은 플러터 애플리케이션에서 의존성 주입을 쉽게 구현할 수 있도록 도와주는 라이브러리입니다.
Injectable 라이브러리 설치
플러터 프로젝트에서 Injectable 라이브러리를 사용하기 위해 먼저 아래와 같이 injectable
패키지를 pubspec.yaml
파일에 추가해야 합니다.
dependencies:
injectable: ^1.0.0
다음으로 pub get
명령을 실행하여 의존성을 업데이트합니다.
Injectable 모듈 생성
Injectable을 사용하기 위해 모듈을 생성해야 합니다. 모듈은 특정 클래스들의 의존성을 정의하고 관리하는 역할을 합니다.
우선, app_module.dart
과 같은 파일을 생성한 후, 아래와 같이 코드를 작성합니다.
import 'package:injectable/injectable.dart';
@module
abstract class AppModule {
// 예시: UserRepository 의존성 주입
@lazySingleton
UserRepository get userRepository => UserRepository();
}
위 예시에서는 UserRepository
라는 클래스를 싱글톤으로 주입하도록 정의하였습니다. 싱글톤으로 주입되므로 애플리케이션 전체에서 동일한 인스턴스를 사용할 수 있습니다.
추가로, 다른 의존성을 정의하려면 @lazySingleton
, @singleton
, @preResolve
등의 어노테이션을 사용할 수 있습니다.
의존성 주입
Injectable 모듈을 생성한 후, 해당 모듈을 사용하여 의존성을 주입할 수 있습니다. 아래와 같이 Injectable을 사용할 클래스에서 @injectable
어노테이션을 추가합니다.
import 'package:injectable/injectable.dart';
@injectable
class UserRepository {
// ...
}
이렇게 어노테이션이 추가된 클래스는 필요한 곳에서 주입을 받을 수 있습니다. 예를 들어, main.dart
파일에서 UserRepository
를 사용하려면 아래와 같이 코드를 작성합니다.
import 'package:flutter/material.dart';
import 'package:injectable/injectable.dart';
import 'app_module.dart';
void main() {
configureInjection(AppModule());
runApp(MyApp());
}
@injectable
class MyApp extends StatelessWidget {
final UserRepository userRepository;
MyApp({required this.userRepository});
@override
Widget build(BuildContext context) {
// ...
}
}
위 예시에서는 AppModule
을 사용하여 configureInjection()
함수를 호출하고, MyApp
클래스에서 UserRepository
를 주입받아 사용하고 있습니다.
결론
플러터에서 Injectable 라이브러리를 사용하여 코드를 모듈화하고 의존성을 관리하는 방법을 알아보았습니다. Injectable을 이용하면 플러터 프로젝트의 복잡성을 줄이고 유지 보수를 쉽게 할 수 있습니다.
더 자세한 내용은 Injectable 공식 문서를 참고해주세요.