앱을 개발하다 보면 코드의 유연성이 매우 중요합니다. 변화하는 요구사항에 대응하기 위해서는 코드를 쉽게 수정하고 확장할 수 있어야 합니다. Flutter에서는 injectable
라이브러리를 사용하여 의존성 주입을 구현하는 것이 코드의 유연성을 향상시키는 좋은 방법입니다.
1. injectable
라이브러리 설치
프로젝트의 pubspec.yaml
파일에 다음의 의존성을 추가합니다:
dependencies:
injectable: ^any
그리고 다음 명령어를 사용하여 라이브러리를 설치합니다:
flutter pub get
2. injectable
설정
lib
폴더 내부에 injectable.dart
파일을 생성하고 아래의 내용을 추가합니다:
import 'package:injectable/injectable.dart';
import 'package:get_it/get_it.dart';
final GetIt getIt = GetIt.instance;
@InjectableInit()
void configureDependencies() => $initGetIt(getIt);
이 파일은 의존성 주입을 위한 설정을 담당합니다. configureDependencies
메소드를 호출하여 의존성 주입 컨테이너인 getIt
을 초기화합니다.
3. 의존성 주입 설정
의존성 주입을 원하는 클래스의 생성자에 @injectable
어노테이션을 추가합니다. 아래는 예시입니다:
import 'package:injectable/injectable.dart';
@injectable
class MyService {
MyService() {
// 생성자 작업
}
}
이렇게 하면 MyService
클래스의 인스턴스를 다른 클래스에서 주입할 수 있게 됩니다.
4. 의존성 주입 사용
의존성 주입을 사용하려면 getIt
컨테이너에서 해당 클래스의 인스턴스를 가져와야 합니다. 예를 들어 MyService
인스턴스를 가져오기 위해서는 다음과 같이 할 수 있습니다:
final myService = getIt.get<MyService>();
이제 myService
변수를 사용하여 MyService
의 기능을 호출할 수 있습니다.
5. 추가 기능: Singleton
@Singleton
어노테이션을 사용하여 특정 클래스의 인스턴스를 싱글톤으로 사용할 수 있습니다. 이렇게 되면 한 번 생성된 인스턴스를 계속해서 재사용하게 됩니다. 예를 들어:
import 'package:injectable/injectable.dart';
@injectable
@singleton
class MySingletonService {
MySingletonService() {
// 생성자 작업
}
}
이제 MySingletonService
의 인스턴스는 항상 동일한 객체로 유지됩니다.
마무리
injectable
을 사용하여 Flutter 앱의 코드에 유연성을 추가할 수 있습니다. 의존성 주입 패턴을 사용하면 코드의 수정과 확장이 용이해지며, 테스트 용이성도 향상됩니다. 간단하게 injectable
라이브러리를 설치하고 설정한 뒤, 클래스에 @injectable
어노테이션을 추가하는 것으로 의존성 주입을 구현할 수 있습니다.
더 자세한 내용은 injectable의 공식 문서에서 확인할 수 있습니다.