피드로 돌아가기
Dev.toInfrastructure
원문 읽기
Atomic 3-state Resolution 기반 Unity 전용 Async Service Locator 구현
ServiceKit V2 — The Async Service Locator for Unity
AI 요약
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 도입 고려