[Unity] 의존성 주입
의존성 주입(Dependency Injection)이란
클래스가 자신이 필요로 하는 객체(의존성)를 직접 생성하지 않고 외부에서 전달받는 설계 방식이다.
Before (직접 생성)
public class Player
{
private WeaponSystem weapon;
public Player()
{
weapon = new WeaponSystem(); // 직접 생성 — 강하게 결합됨
}
}
After (의존성 주입)
public class Player
{
private WeaponSystem weapon;
public Player(WeaponSystem weapon) // 외부에서 주입받음
{
this.weapon = weapon;
}
}
사용 이유
- 결합도 감소: Player가 WeaponSystem을 어떻게 만드는지 몰라도 되며 WeaponSystem이 바뀌어도 Player 코드는 그대로임
- 테스트 용이성: 테스트할 때 가짜(mock) WeaponSystem을 넣어서 Player만 따로 검증 가능.
- 교체 용이성: WeaponSystem 대신 TestWeaponSystem, UpgradedWeaponSystem 등으로 갈아끼우기 쉬움.
주입 방식 3가지
- 생성자 주입 (Constructor Injection) — 위 예시처럼 생성자로 받는 방식, 가장 흔함
- 필드/프로퍼티 주입 — [Inject] 어트리뷰트로 필드에 직접 주입 (VContainer도 지원)
- 메서드 주입 — 특정 메서드 호출 시 파라미터로 주입
Unity에서 DI가 특히 필요한 이유
Unity는 MonoBehaviour를 new로 직접 생성할 수 없고, 반드시 씬에 배치해야 한다. 그래서 전통적인 DI 패턴을 그대로 적용하기는 까다롭다. VContainer 같은 프레임워크는 LifetimeScope를 통해 이 문제를 해결해준다.


![[Unity] PC 세이브 데이터 Android로 옮기기](https://data.develog.develrocket.com/upload/develog/muchan/1792206352286-hd4xz4/_____2026-10-17_114953.png)
![[Unity] 제네릭 박싱 예방](https://data.develog.develrocket.com/upload/develog/gmumdev/1792123312021-bhxx2i/_____.png)