Stacked에서는 get_it 패키지를 기반으로 한 서비스 로케이터를 사용하여, **앱 전체에서 공통적으로 사용하는 객체(서비스 등)**를 의존성 주입으로 관리할 수 있게 해줍니다.
즉, 전역에서 쉽게 접근 가능한 싱글톤 객체를 등록하고 호출할 수 있는 방식이에요.
class AuthenticationService {
bool isUserLoggedIn = false;
}
setupLocator() 함수로 서비스 등록import 'package:stacked/stacked.dart';
final locator = StackedLocator.instance;
void setupLocator() {
locator.registerLazySingleton(() => AuthenticationService());
}
registerLazySingleton: 최초 요청 시 한 번만 인스턴스를 생성해서 재사용합니다.final _authService = locator<AuthenticationService>();
void checkLogin() {
if (_authService.isUserLoggedIn) {
// 로그인 상태
}
}
| 메서드 | 설명 |
|---|---|
registerSingleton() | 앱 시작 시 즉시 인스턴스를 생성 |
registerLazySingleton() | 필요할 때 인스턴스를 생성 (권장) |
registerFactory() | 호출할 때마다 새 인스턴스를 반환 (상태를 갖지 않는 객체에 적합) |
필요한 경우, 등록된 모든 서비스 또는 특정 서비스만 제거할 수 있습니다.
locator.reset(); // 모든 서비스 제거
locator.unregister<SomeType>(); // 특정 타입만 제거
테스트 환경에서 가짜(Mock) 서비스를 주입할 수 있습니다.
locator.registerSingleton<AuthenticationService>(FakeAuthService());
| 기능 | 설명 |
|---|---|
setupLocator() | 서비스 등록 함수 |
locator<T>() | 등록한 서비스 사용 |
registerLazySingleton() | 지연 생성 싱글톤 등록 |
registerFactory() | 호출 시마다 새 객체 생성 |
| 테스트 교체 | 다른 구현체로 주입 가능 |
get_it 기반의 서비스 로케이터를 내장하고 있어, 의존성 주입이 매우 쉽습니다.setupLocator()를 어디서 호출해야 하는지locator와 get_it 차이점