의존성 주입(Dependency Injection)은 소프트웨어 개발에서 중요한 개념입니다. 이를 통해 코드의 유연성과 재사용성을 높일 수 있으며, 유지보수 및 테스트도 훨씬 용이해집니다.
Flutter에서는 의존성 주입을 쉽게 구현하기 위해 injectable
패키지를 사용할 수 있습니다. injectable
패키지는 get_it
패키지를 내부적으로 활용하며, DI(Dependency Injection) 컨테이너를 통해 의존성을 주입할 수 있습니다.
1. injectable
패키지 설치
먼저, 프로젝트의 pubspec.yaml
파일에 injectable
패키지를 추가해야 합니다. 아래와 같이 dependencies
섹션에 injectable
패키지를 추가합니다.
dependencies:
injectable: ^1.2.0
변경사항을 저장한 후, flutter packages get
명령어를 통해 패키지를 설치합니다.
2. DI 컨테이너 설정
의존성 주입을 사용하려면 DI 컨테이너를 설정해야 합니다. 일반적으로 main
함수에서 컨테이너를 구성하는 것이 좋습니다.
import 'package:injectable/injectable.dart';
// ...
void main() {
configureInjection(Environment.prod);
runApp(MyApp());
}
여기서 configureInjection
함수는 injectable
패키지에서 제공하는 함수로, DI 컨테이너를 설정합니다. Environment.prod
는 환경을 나타내며, prod
는 서비스 환경을 의미합니다.
3. 의존성 주입 설정
의존성 주입은 @injectable
어노테이션을 통해 설정할 수 있습니다. 주입할 클래스에 @injectable
어노테이션을 추가하면 됩니다. 예를 들어, MyService
클래스를 주입하고 싶다면 아래와 같이 코드를 작성합니다.
@injectable
class MyService {
// ...
}
주입할 클래스에 생성자가 있는 경우, 해당 생성자에도 @injectable
어노테이션을 추가합니다.
@injectable
class MyService {
MyService(Database database) {
// ...
}
}
@injectable
class Database {
// ...
}
injectable
패키지는 주입할 클래스들을 자동으로 스캔하고 DI 컨테이너에 등록합니다. 따라서, 이제 MyService
를 주입할 수 있습니다.
4. DI 컨테이너를 통한 주입
이제 DI 컨테이너를 통해 주입할 수 있습니다. get_it
패키지의 GetIt
클래스를 사용하여 주입할 수 있습니다. 예를 들어, MyService
를 주입받아 사용하려면 아래와 같이 코드를 작성합니다.
import 'package:get_it/get_it.dart';
void main() {
configureInjection(Environment.prod);
final myService = GetIt.instance<MyService>();
// MyService를 사용하여 동작 수행...
runApp(MyApp());
}
여기서 GetIt.instance<MyService>()
를 통해 MyService
를 주입받을 수 있습니다. 이후에는 myService
객체를 사용하여 해당 클래스의 동작을 수행할 수 있습니다.
5. 주의사항
의존성 주입을 사용할 때, 몇 가지 주의할 점이 있습니다.
- 주입할 클래스에는 반드시
@injectable
어노테이션이 필요합니다. - 생성자의 모든 매개변수에는 주입할 클래스를 받을 수 있도록
@injectable
어노테이션을 추가해야 합니다. - 직접 생성한 클래스를 주입할 경우, 해당 클래스도
@injectable
어노테이션을 추가해야 합니다. - DI 컨테이너를 사용하기 전에
configureInjection
함수를 통해 컨테이너 설정을 해 주어야 합니다.
결론
injectable
패키지를 활용하여 플러터에서 의존성 주입 프로세스를 구현하는 방법에 대해 알아보았습니다. 이를 통해 코드의 유연성과 재사용성을 높일 수 있으며, 효율적인 소프트웨어 개발에 도움이 될 것입니다. 자세한 내용은 injectable
패키지의 공식 문서를 참고하시기 바랍니다.
injectable
패키지: https://pub.dev/packages/injectable