본문 바로가기

Development/Flutter

[Flutter] get_it 으로 의존성 주입 관리하기 - 객체 등록

 

 

https://pub.dev/packages/get_it

 

객체 등록을 위한 주요 옵션

  1. registerSingleton
  2. registerLazySingleton
  3. registerFactory
  4. registerFactoryAsync
  5. registerSingletonAsync
  6. registerLazySingletonAsync

 

1. registerSingleton

  • 설명: 객체를 싱글턴으로 등록합니다. 등록 시 즉시 객체를 생성하여 모든 요청에서 동일한 인스턴스를 반환합니다.
  • 장점:
    • 객체가 즉시 생성되므로 초기화가 필요할 때 사용합니다.
    • 모든 요청에 대해 동일한 인스턴스를 반환하므로 상태를 공유할 수 있습니다.
  • 단점:
    • 초기화 비용이 큰 객체를 등록할 경우 애플리케이션 시작 시 성능에 영향을 줄 수 있습니다.
  • 사용예
getIt.registerSingleton<Repository>(DatabaseRepository());

 

 

2. registerLazySingleton

  • 설명: 객체를 싱글턴으로 등록하되, 첫 번째 요청 시에 객체를 생성합니다.
  • 장점:
    • 첫 번째 요청이 있을 때까지 객체가 생성되지 않으므로 초기화 비용이 큰 객체의 성능 영향을 줄입니다.
    • 모든 요청에 대해 동일한 인스턴스를 반환하여 상태를 공유할 수 있습니다.
  • 단점:
    • 객체의 생성이 지연되므로 첫 번째 요청 시 약간의 지연이 발생할 수 있습니다.
  • 사용 예:
getIt.registerLazySingleton<Repository>(() => DatabaseRepository());

 

 

3. registerFactoryAsync

  • 설명: 비동기적으로 새로운 객체 인스턴스를 생성하여 반환합니다.
  • 장점:
    • 객체 생성 시 비동기 작업이 필요한 경우에 사용됩니다.
  • 단점:
    • 객체를 매번 생성하므로 성능에 약간의 영향을 줄 수 있으며, 비동기 작업이 추가되므로 코드가 복잡해질 수 있습니다.
  • 사용 예:
getIt.registerFactoryAsync<Service>(async () => Service(await getIt.getAsync<Repository>()));

 

 

4. registerSingletonAsync

  • 설명: 비동기적으로 객체를 생성하여 싱글턴으로 등록합니다.
  • 장점:
    • 초기화에 시간이 걸리는 비동기 작업을 수행한 후 싱글턴 인스턴스를 제공합니다.
    • 모든 요청에 대해 동일한 인스턴스를 반환하여 상태를 공유할 수 있습니다.
  • 단점:
    • 초기화가 완료될 때까지 의존성을 사용할 수 없으므로 코드가 복잡해질 수 있습니다.
  • 사용 예:
getIt.registerSingletonAsync<Repository>(async () => DatabaseRepository());

 

 

5. registerLazySingletonAsync

  • 설명: 첫 번째 요청 시 비동기적으로 객체를 생성하여 싱글턴으로 등록합니다.
  • 장점:
    • 초기화 비용이 큰 비동기 작업을 첫 번째 요청 시에만 수행하므로 성능 최적화에 유리합니다.
    • 모든 요청에 대해 동일한 인스턴스를 반환하여 상태를 공유할 수 있습니다.
  • 단점:
    • 첫 번째 요청 시 비동기 작업이 수행되므로 약간의 지연이 발생할 수 있습니다.
  • 사용 예:
getIt.registerLazySingletonAsync<Repository>(async () => DatabaseRepository());