[flutter] 플러터에서 Injectable을 사용한 의존성 주입 프로세스 전략

의존성 주입(Dependency Injection)은 애플리케이션의 구성 요소 간의 의존성을 외부에서 주입하는 프로세스입니다. 이를 통해 코드의 재사용성, 테스트 용이성, 모듈 간의 결합도를 낮추는 등의 장점을 제공합니다.

플러터(Flutter)는 구글에서 개발한 UI 프레임워크로, 의존성 주입에 대한 다양한 라이브러리와 패키지를 제공합니다. 그 중에서도 Injectable은 플러터에서 의존성 주입을 쉽게 구현할 수 있는 패키지입니다.

단계 1: 의존성 주입 라이브러리 추가하기

플러터 프로젝트에 Injectable을 사용하기 위해서는 pubspec.yaml 파일에서 해당 패키지를 추가해야 합니다.

dependencies:
  injectable: ^1.4.1

위와 같이 injectable 패키지를 의존성으로 추가한 후, flutter packages get 명령어를 사용하여 패키지를 설치합니다.

단계 2: 코드에 의존성 주입 어노테이션 추가하기

의존성 주입을 구현하려는 클래스나 함수에 @Injectable() 어노테이션을 추가합니다. 이 어노테이션은 해당 클래스나 함수를 의존성 주입 가능한 컴포넌트로 표시합니다.

예를 들어, 다음은 UserService 클래스에 의존성 주입 어노테이션을 추가한 예시입니다.

@Injectable()
class UserService {
  // ...
}

단계 3: 의존성 주입 설정하기

의존성 주입 설정은 @module 어노테이션과 @injectable 어노테이션을 사용하여 수행됩니다.

@injectable 어노테이션은 의존성 주입이 가능한 클래스를 식별하고, @module 어노테이션은 모든 의존성 주입 설정을 담당하는 클래스를 나타냅니다.

다음은 AppModule 클래스를 생성하여 의존성 주입 설정을 하는 예시입니다.

// app_module.dart
import 'package:injectable/injectable.dart';

@InjectableInit()
class AppModule {
  @injectable
  void configureDependencies() {
    // 의존성 주입 설정
  }
}

단계 4: 의존성 주입 사용하기

의존성 주입이 설정되고 코드에 적용되면, 해당 의존성을 사용할 수 있습니다.

UserService에 다른 클래스에 대한 의존성을 주입하려면, @lazySingleton, @singleton, @preResolve 등의 어노테이션을 사용하여 의존성의 생명주기와 범위를 설정할 수 있습니다.

@lazySingleton
class UserRepository {
  // ...
}

@Injectable(env: Environment.prod)
class UserService {
  final UserRepository _userRepository;

  UserService(this._userRepository);
}

위와 같이 UserRepository 클래스를 UserService에 주입하여 사용할 수 있습니다.

결론

플러터에서 Injectable을 사용하면 의존성 주입 프로세스를 쉽게 구현할 수 있습니다. 이를 통해 애플리케이션의 유연성과 테스트 용이성을 향상시킬 수 있습니다. Injectalbe의 자세한 사용법은 공식 문서를 참조하시기 바랍니다.

참고 문서: Injectable GitHub