### **VContainer Diagnostics 윈도우**
VContainer Diagnostics 윈도우는 현재 활성화된 `LifetimeScope`와 각 스코프에 등록된 서비스(객체)들의 목록, 라이프타임, 그리고 인스턴스 정보 등을 보여줍니다.
- **주요 기능:**
- **현재 `LifetimeScope` 및 등록된 객체 목록 표시:** 애플리케이션에 존재하는 모든 `LifetimeScope`를 트리 형태로 보여주고, 각 스코프에 어떤 타입의 객체들이 등록되어 있는지 목록으로 표시합니다.
- **라이프타임 정보:** 각 등록된 객체가 `Singleton`, `Transient`, `Scoped` 중 어떤 라이프타임을 가지는지 명확히 보여줍니다.
- **인스턴스 정보:** 등록된 객체의 실제 인스턴스(객체)가 존재하는 경우, 해당 인스턴스의 `ToString()` 결과나 기타 디버깅 정보를 제공합니다.
### **Diagnostics 윈도우 활성화 방법**
Diagnostics 윈도우를 사용하려면 다음 단계를 따라야 합니다.
1. **`VContainerSettings` 에셋 생성:** Unity 에디터 메뉴에서 `Assets` -> `Create` -> `VContainer` -> `VContainer Settings`를 선택하여 `VContainerSettings` 에셋을 생성합니다.
- **주의 (INFO):** 이 방법으로 `VContainerSettings`를 생성하면, Unity의 'Preloaded Assets'에 자동으로 등록됩니다. 만약 런타임에 진단 정보가 제대로 로드되지 않는다면, `Project Settings` -> `Player` 설정에서 'Preloaded Assets' 목록에 `VContainerSettings`가 포함되어 있는지 확인해야 합니다.
2. **`Enable Diagnostics` 옵션 활성화:** 생성된 `VContainerSettings` 에셋을 인스펙터에서 선택하고, `Enable Diagnostics` 체크박스를 활성화합니다.
3. **Diagnostics 윈도우 열기:** Unity 에디터 메뉴에서 `Window` -> `VContainer Diagnostics`를 선택하여 진단 윈도우를 엽니다.
### **성능 경고 (WARNING)**
- **"Enable Diagnostics" 기능은 성능에 상당한 영향을 미치며, GC(Garbage Collection) 할당을 크게 증가시킬 수 있습니다.**
- **따라서 이 기능은 개발 중에만 활성화하고, 실제 빌드(Release Build)에서는 반드시 비활성화할 것을 강력히 권장합니다.**
### **`DiagnosticsInfo` 접근**
`"Enable Diagnostics"` 옵션이 활성화되면, VContainer는 내부적으로 디버깅 정보를 수집합니다. 이 정보는 코드를 통해서도 접근할 수 있습니다.
- **모든 컨테이너의 진단 정보 가져오기:** `DiagnosticsContext.GetDiagnosticsInfos()` 메서드를 호출하여 등록된 모든 인스턴스에 대한 디버그 정보 목록을 얻을 수 있습니다.
- **특정 컨테이너의 진단 정보 가져오기:** `IObjectResolver.Diagnostics?.GetDiagnosticsInfos()` 메서드를 사용하여 특정 컨테이너에 대한 정보 목록을 얻을 수 있습니다. `IObjectResolver`는 컨테이너 자체를 의미하며, 의존성 주입을 통해 얻을 수 있습니다.
### 요약
VContainer의 강력한 디버깅 도구인 Diagnostics 윈도우와 그 활성화 방법을 설명합니다. 이 윈도우는 복잡한 DI 의존성 그래프를 시각적으로 이해하고, 런타임에 객체들의 생명주기와 관계를 추적하는 데 큰 도움을 줍니다. 하지만 성능 오버헤드가 크므로 개발 단계에서만 사용하는 것이 중요하며, 코드적으로도 진단 정보에 접근할 수 있는 API를 제공하여 더욱 세밀한 디버깅이 가능하게 합니다.
---
이전 : [[6.4 Project root LifetimeScope]] | 다음 : [[8.1 Source Generator]]