피드로 돌아가기
ServiceKit V2 — The Async Service Locator for Unity
Dev.toDev.to
Infrastructure

Atomic 3-state Resolution 기반 Unity 전용 Async Service Locator 구현

ServiceKit V2 — The Async Service Locator for Unity

Paul Stamp2026년 4월 18일4intermediate

Context

Unity 엔진의 객체 생명주기 제약으로 인해 전통적인 DI Framework 도입 시 과도한 Boilerplate와 프로젝트 구조 변경 강제 발생. 특히 초기화 순서에 따른 Service Null 참조 및 비동기 해소 시점의 Race Condition 해결이 필수적인 상황.

Technical Solution

  • Atomic 3-state Resolution Primitive 도입을 통해 Registration과 Readiness 체크를 단일 Lock 내부에서 처리하여 원자성 보장
  • Field Injection 방식에 InjectAsync와 CancellationToken을 결합하여 초기화 순서 의존성 제거 및 비동기 해소 구조 설계
  • [InjectService] Attribute와 Roslyn Analyzer(SK003, SK005)를 통한 의존성 가시성 확보 및 런타임 오류의 컴파일 타임 전이
  • Generic 기반 상속 구조를 Declarative Attribute 방식으로 변경하여 사용자 정의 제네릭 클래스와의 타입 충돌 방지
  • Interlocked Operation을 활용한 Double-Registration 방지 및 Type 기반 Circular-Dependency 탐지 로직 적용

- Unity와 같이 프레임워크가 객체 생성을 제어하는 환경에서는 무거운 DI보다 가벼운 Service Locator가 적합한지 검토 - 서비스 상태를 Ready/RegisteredNotReady/NotRegistered로 세분화하여 초기화 레이스 컨디션 방지 - 런타임에 빈번한 초기화 실수(예: base.Awake 누락)를 방지하기 위해 Custom Roslyn Analyzer 도입 고려

원문 읽기