Stacked - Service Locator

김례원·2025년 7월 6일

Flutter

목록 보기
6/12
post-thumbnail

🧭 Service Locator란?

Stacked에서는 get_it 패키지를 기반으로 한 서비스 로케이터를 사용하여, **앱 전체에서 공통적으로 사용하는 객체(서비스 등)**를 의존성 주입으로 관리할 수 있게 해줍니다.

즉, 전역에서 쉽게 접근 가능한 싱글톤 객체를 등록하고 호출할 수 있는 방식이에요.


✅ 왜 써야 하나요?

  • ViewModel 또는 Service 간 중복된 생성 없이 재사용
  • 테스트와 유지보수가 쉬움
  • 어디서든 동일한 인스턴스를 가져와 사용 가능

📦 사용 예시

1️⃣ 서비스 클래스 정의

class AuthenticationService {
  bool isUserLoggedIn = false;
}

2️⃣ setupLocator() 함수로 서비스 등록

import 'package:stacked/stacked.dart';

final locator = StackedLocator.instance;

void setupLocator() {
  locator.registerLazySingleton(() => AuthenticationService());
}
  • registerLazySingleton: 최초 요청 시 한 번만 인스턴스를 생성해서 재사용합니다.

3️⃣ 어디서든 사용하기 (예: ViewModel)

final _authService = locator<AuthenticationService>();

void checkLogin() {
  if (_authService.isUserLoggedIn) {
    // 로그인 상태
  }
}

🧰 기타 등록 방식

메서드설명
registerSingleton()앱 시작 시 즉시 인스턴스를 생성
registerLazySingleton()필요할 때 인스턴스를 생성 (권장)
registerFactory()호출할 때마다 새 인스턴스를 반환 (상태를 갖지 않는 객체에 적합)

🔄 의존성 제거 (reset)

필요한 경우, 등록된 모든 서비스 또는 특정 서비스만 제거할 수 있습니다.

locator.reset();                // 모든 서비스 제거
locator.unregister<SomeType>(); // 특정 타입만 제거

🧪 테스트를 위한 주입

테스트 환경에서 가짜(Mock) 서비스를 주입할 수 있습니다.

locator.registerSingleton<AuthenticationService>(FakeAuthService());

✅ 요약

기능설명
setupLocator()서비스 등록 함수
locator<T>()등록한 서비스 사용
registerLazySingleton()지연 생성 싱글톤 등록
registerFactory()호출 시마다 새 객체 생성
테스트 교체다른 구현체로 주입 가능

📌 핵심 요점

  • Stacked는 get_it 기반의 서비스 로케이터를 내장하고 있어, 의존성 주입이 매우 쉽습니다.
  • ViewModel에서 서비스 객체를 전역 접근으로 불러와 사용하며, 싱글톤 관리가 편리합니다.

알아보면 좋을 내용

  • setupLocator()를 어디서 호출해야 하는지
  • locatorget_it 차이점
  • 여러 개의 서비스 등록

출처 : Stacked 공식 문서 - Service Locator

profile
분야를 가리지 않는 개발자

0개의 댓글