### **VContainer Source Generator** VContainer는 기본적으로 리플렉션을 사용하여 의존성 주입을 수행합니다. 하지만 이는 런타임 성능에 영향을 미칠 수 있습니다. Source Generator는 이러한 리플렉션 과정을 컴파일 시점에 필요한 코드를 미리 생성하는 방식으로 대체하여 런타임 오버헤드를 줄이고 성능을 향상시킵니다. - **필요 요구 사항:** Unity 2021.3 이상 버전이 필요합니다. - **작동 원리:** - **Roslyn Source Generator:** VContainer는 .NET 컴파일러 플랫폼인 Roslyn의 Source Generator 기능을 활용합니다. Source Generator는 컴파일러 도구의 일부로, 개발자가 작성한 소스 코드를 오염시키지 않고 추가적인 소스 코드를 플러그인할 수 있게 해주는 기능입니다. - **컴파일 시점 코드 생성:** 런타임에 리플렉션으로 객체를 탐색하고 주입하는 대신, 컴파일 시점에 필요한 주입 로직을 담은 C# 코드를 자동으로 생성합니다. 이렇게 생성된 코드는 일반적인 C# 코드와 동일하게 컴파일되어 실행됩니다. - **이점:** - **성능 향상:** 런타임 리플렉션 오버헤드를 제거하여 객체 해결(Resolve) 및 주입 속도를 향상시킵니다. - **GC 할당 감소:** 런타임에 동적으로 생성되는 객체나 임시 객체 할당을 줄여 가비지 컬렉션(GC) 부담을 완화합니다. - **디버깅 및 유지보수 용이성:** 생성된 코드가 C#이기 때문에 IL 코드 생성이나 Expression Tree보다 디버깅 및 유지보수가 더 용이합니다. - **이전 버전과의 차이:** VContainer 1.13.0 이전 버전에서는 Mono.Cecil을 사용한 IL weaving 방식으로 이 기능을 제공했으나, 현재는 Roslyn Source Generator로 전환되었습니다. ### **VContainer Source Generator 활성화 방법** Source Generator를 사용하려면 다음 단계를 따라야 합니다. 1. **`VContainer.SourceGenerator.dll` 추가:** - VContainer 릴리스 페이지([https://github.com/hadashiA/VContainer/releases)에서](https://github.com/hadashiA/VContainer/releases)에서) `VContainer.SourceGenerator.dll` 파일을 다운로드합니다. - 다운로드한 파일을 Unity 프로젝트의 `Assets/` 폴더 아래 아무 곳에나 추가합니다. 2. **RoslynAnalyzer로 마크:** - Unity 프로젝트에서 `VContainer.SourceGenerator.dll` 파일을 선택합니다. - 인스펙터 창 하단에 있는 라벨 아이콘을 클릭하고, "RoslynAnalyzer"를 입력하여 해당 DLL을 Roslyn Analyzer로 지정합니다. **제한사항 (LIMITATIONS):** - **지원되지 않는 타입:** 현재 Source Generator는 다음 타입에는 지원되지 않습니다. - `abstract class` - `interface` - `enum` - `delegate` - `readonly struct` (Immutable injection) - 중첩 클래스 - 구조체 (`struct`) - **접근 수준:** 접근 수준이 `internal` 미만인 경우 (예: `private` 필드/프로퍼티/메서드에 `[Inject]`를 추가하더라도) Source Generator는 지원되지 않습니다. 즉, Source Generator가 주입 코드를 생성하려면 해당 멤버가 최소한 `internal` 또는 `public`이어야 합니다. **비고 (Remarks):** 문서에는 VContainer Source Generator가 `ClassA`와 같은 클래스에 대해 자동으로 생성하는 내부 IL 코드(예: `_GeneratedInjector` 클래스)의 예시가 포함되어 있습니다. 이 코드는 생성자 주입, 메서드 주입, 프로퍼티/필드 주입 등 다양한 주입 유형을 처리하기 위해 내부적으로 어떻게 동작하는지를 보여줍니다. 즉, `ClassA`의 의존성을 해결하고 주입하는 로직이 런타임 리플렉션 대신 미리 생성된 C# 코드로 대체되는 것입니다. ### 요약 VContainer의 핵심 최적화 기능인 Source Generator에 대해 다룹니다. 이는 Unity 2021.3+ 환경에서 런타임 리플렉션 대신 컴파일 시점 코드 생성을 통해 VContainer의 성능을 크게 향상시키고 GC 할당을 줄이는 방법을 제공합니다. 활성화 방법과 함께 지원되지 않는 타입 및 접근 수준에 대한 제한 사항도 명시하여 개발자가 이 기능을 효과적으로 활용할 수 있도록 안내합니다. --- 이전 : [[7.1 VContainer Diagnostics Window]] | 다음 : [[8.2 Async Container Build]]