Get it 라이브러리란?
- Dart 언어에서 의존성 주입을 위해 사용하는 도구이다.
- 스프링의 IoC 컨테이너와 다르게 서비스 로케이터로 구현되었다고 한다.
- 닷넷의 서비스 로케이터 스플랫을 Dart 로 포팅한 것이라고 한다.
서비스 로케이터 패턴이란?
- 서비스나 의존성을
get_it
에 수동으로 등록하고 필요할 때 코드의 어느 위치에서나 검색할 수 있다. - 인스턴스를 쉽게 등록하고 사용할 수 있다.
등록 유형
- Factory: 요청될 때마다 새 인스턴스가 생성되도록 등록한다.
- Singleton: 매번 1개의 동일한 인스턴스를 반환한다.
- Lazy Singleton: Singleton 과 유사하지만, 처음 호출 때 인스턴스를 생성한다.
특징
- 비동기 지원: 비동기 팩토리 함수를 지원하여 인스턴스를 생성하는 동안 비동기 작업이 필요한 인스턴스를 사용할 수 있다.
- 범위 지정 인스턴스:
get_it
내에서 범위를 생성하여 개체의 다양한 수명을 관리할 수 있어 복잡한 애플리케이션에 유리하다. - Flutter 와의 통합이 유리하다.
- 앱 아키텍처에서 비즈니스 로직과 UI 컴포넌트의 분리가 필요한 시나리오에서 유용하다.
- 디버깅 친화적: 서비스가 이미 등록되어 있는지 확인하는 등 디버깅에 유용한 기능을 제공한다.
레퍼런스
코드 예제
세팅
GetIt
을 이용해 여러가지 모델과 서비스를 등록한다.
import 'package:get_it/get_it.dart';
// This is your service locator
final getIt = GetIt.instance;
void setupLocator() {
// Register services
getIt.registerSingleton<AppModel>(AppModel());
getIt.registerLazySingleton<DatabaseService>(() => DatabaseServiceImpl());
getIt.registerFactory<HomeViewModel>(() => HomeViewModel());
}
class AppModel {
// Some app-wide logic or data
}
abstract class DatabaseService {
// Abstract database service
}
class DatabaseServiceImpl extends DatabaseService {
// Implementation of the database service
}
class HomeViewModel {
// A ViewModel for a home page or screen
}
이용하기
GetIt
에 등록한 모델과 서비스는 어디서든 사용할 수 있다.- 타입으로 찾기 때문에 인터페이스를 통해 구체적인 구현에 액세스할 수 있다.
void main() {
setupLocator(); // Setting up the locator
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
// Accessing the singleton instance of AppModel
var appModel = getIt<AppModel>();
return MaterialApp(
home: HomePage(),
);
}
}
class HomePage extends StatelessWidget {
@override
Widget build(BuildContext context) {
// Accessing a new instance of HomeViewModel
var homeViewModel = getIt<HomeViewModel>();
return Scaffold(
appBar: AppBar(title: Text("Home")),
body: Container(/* ... */),
);
}
}
반응형
'플러터' 카테고리의 다른 글
플러터(Flutter) 프로바이더(Provider) 라이브러리란? (0) | 2023.12.17 |
---|---|
플러터(Flutter) 의 글로벌 키(GlobalKey) 클래스란? (0) | 2023.12.06 |
플러터의 Drift 라이브러리(플러그인) 이란? (0) | 2023.12.03 |
플러터 (Flutter) 의 initializeDateFormatting() 메서드의 역할과 사용법 (0) | 2023.12.03 |
플러터(Flutter) 의 WidgetsFlutterBinding.ensureInitializing() 이란? (0) | 2023.12.02 |