콘텐츠로 이동

Service Locator

공통 서비스 접근을 중앙 레지스트리로 모아 호출부 결합을 줄이는 패턴입니다.

  • 오디오/저장/분석 서비스를 전역에서 참조할 때
  • 초기 단계에서 DI를 단순화할 때
  • Service Interface
  • Locator Registry
  • Bootstrap Registration

아래 코드는 위에서 설명한 대표 상황을 Unity 프로젝트 맥락으로 단순화한 예시입니다.

public interface IAudioService
{
void PlaySfx(string clipId);
}
public static class GameServices
{
public static IAudioService AudioService { get; private set; }
public static void RegisterAudioService(IAudioService audioService)
{
AudioService = audioService;
}
}
public sealed class DamageFeedbackSystem
{
public void OnHit()
{
GameServices.AudioService?.PlaySfx("Hit");
}
}
  • 공통 서비스를 한 지점에서 교체/주입할 수 있어 초기 개발 속도가 빠릅니다.
  • 호출부에서 생성 책임을 제거해 사용 코드가 단순해집니다.
  • 숨은 전역 의존성이 생겨 테스트 격리와 의존성 추적이 어려워집니다.
  • 초기화 순서가 꼬이면 런타임 Null 참조가 발생하기 쉽습니다.

클라이언트가 인터페이스 키로 서비스를 조회해 사용하는 흐름입니다.

Service Locator 흐름