1. Dependency Injection (의존성 주입)이란?
클래스 A가 어떤 작업을 수행하기 위해 클래스 B의 인스턴스에 의존해야 하는 경우,
B는 A의 디펜던시(의존성)이라고 한다.
Dependency Injection Pattern 줄여서, DI 패턴은 디펜던시를 따로 참조하지 않아도 주입해주는 기능을 한다.
// Case 1 (의존성이 있지만 스크립트 내에서 참조)
GameObject obj1;
void Awake() {
obj = GameObject.Find("Player");
}
// Case 2 (유니티 인스펙터에서 접근하여 의존성을 주입)
public GameObject obj1;
// Case 3 (유니티 인스펙터에서 접근하여 의존성을 주입)
[Serializefield]
GameObject obj1;
2. 장점
Reduced Dependencies
- 종속성이 감소한다.
- components의 종속성이 감소하면 변경에 민감하지 않다.
More Reusable Code
- 재사용성이 증가한다.
- 일부 인터페이스의 다른 구현이 필요한 경우, 코드를 변경할 필요없이 해당 구현을 사용하도록 components를 구성할 수 있다.
More Testable Code
- 더 많은 테스트 코드를 만들 수 있다.
- Mock 객체는 실제 구현의 테스트로 사용되는 객체
종속성을 components에 주입할 수 있는 경우 이러한 종속성의 Mock 구현을 주입할 수 있다.
예를 들어, Mock 객체가 올바른 객체를 반환할 때, null을 반환할 때, 예외가 발생할 때 모두 처리한다.
More Readable Code
- 코드를 읽기 쉬워진다.
- components의 종속성을 보다 쉽게 파악할 수 있으므로 코드를 쉽게 읽을 수 있다.
참조 :
[Design Pattern] DI란 (Dependency Injection) - Heee's Development Blog
Step by step goes a long way.
gmlwjd9405.github.io
3. Zenject
Extenject Dependency Injection IOC | 유틸리티 도구 | Unity Asset Store
Use the Extenject Dependency Injection IOC from Mathijs Bakker on your next project. Find this utility tool & more on the Unity Asset Store.
assetstore.unity.com
Zenject를 통해 유니티에서 DI를 쉽고 기능적으로 사용할 수 있다.
'C# > Unity3D' 카테고리의 다른 글
[Unity3D] Mono, IL2CPP, AOT, JIT (0) | 2022.09.26 |
---|---|
[Unity3D] Occlusion Culling (오클루전 컬링) (0) | 2022.06.28 |
[Unity3D] 싱글톤 패턴 (Singleton Pattern) (0) | 2022.02.07 |