DI(Depencency Injection) 란?
"하나의 객체가 다른 객체의 의존성을 제공하는 테크닉."
"프로그램 디자인이 결합도를 느슨하게 되도록 하고 의존관계 역전 원칙과 단일 책임 원칙을 따르도록 클라이언트의 생성에 대한 의존성을 클라이언트의 행위로부터 분리하는 것"
https://ko.wikipedia.org/wiki/%EC%9D%98%EC%A1%B4%EC%84%B1_%EC%A3%BC%EC%9E%85
의존성 주입 - 위키백과, 우리 모두의 백과사전
위키백과, 우리 모두의 백과사전. 소프트웨어 엔지니어링에서 의존성 주입(dependency injection)은 하나의 객체가 다른 객체의 의존성을 제공하는 테크닉이다. "의존성"은 예를 들어 서비스로 사용할
ko.wikipedia.org
유지보수에 용이하다
객체지향 5가지 원칙 중 단일 책임 원칙, 의존관계 역전 원칙을 따르도록 하여 유지보수에 용이합니다.
단일 책임 원칙은 개념적으로 다들 알고 있지만 생각보다 지켜지지 않는 상황이 많은데, DI를 사용하여 의존관계를 강제로 느슨하게 만들면 어쩔 수 없이 원칙에 가까워질 수밖에 없습니다.
https://ko.wikipedia.org/wiki/%EB%8B%A8%EC%9D%BC_%EC%B1%85%EC%9E%84_%EC%9B%90%EC%B9%99
단일 책임 원칙 - 위키백과, 우리 모두의 백과사전
위키백과, 우리 모두의 백과사전. 객체 지향 프로그래밍에서 단일 책임 원칙(single responsibility principle)이란 모든 클래스는 하나의 책임만 가지며, 클래스는 그 책임을 완전히 캡슐화해야 함을 일
ko.wikipedia.org
의존관계 역전 원칙 - 위키백과, 우리 모두의 백과사전
위키백과, 우리 모두의 백과사전. 객체 지향 프로그래밍에서 의존관계 역전 원칙은 소프트웨어 모듈들을 분리하는 특정 형식을 지칭한다. 이 원칙을 따르면, 상위 계층(정책 결정)이 하위 계층(
ko.wikipedia.org
Singleton 패턴과 코드 비교
//Sigleton 패턴 사용
public class UIInventoryPresenter : MonoBehaviour
{
private void Start()
{
var items = InventoryManager.Instance.GetItems();
}
}
//VContainer 사용
public class UIInventoryPresenter : MonoBehaviour
{
[Inject] private InventoryManager m_InvenMgr;
private void Start()
{
var items = m_InvenMgr.GetItems();
}
}
Unity 프로젝트에서 Singleton 패턴과 비교해 보면 Instance로 직접 참조하지 않고 외부에서 객체를 생성할 때 객체를 주입해 줍니다.
사용 주의사항
객체를 생성할 때마다 의존성을 주입 필요
private void OpenInventoryUI()
{
var obj = GameObject.Instantiate(prefab);
var uiInventory = obj.AddComponent<UIInventoryPresenter>();
ObjectResolver.Inject(uiInventory);
}
시스템화하면 크게 어려울 부분은 아니지만, 설계 단계에서 고려되지 않았다면 조금 골치 아픕니다.
계층별로 구분하지 않으면 Singleton과 큰 차이가 없음
VContainer의 경우 LifetimeScope로 관리되는데 계층을 나누지 않으면 객체 간 상호참조를 하더라도 이상 없이 동작하기 때문에, 계층을 나누어 부모가 자식의 객체를 참조하지 못하도록 설정해줘야 합니다.
'Unity VContainer' 카테고리의 다른 글
VContainer #2 - 의존성 주입 방법 (0) | 2024.08.04 |
---|---|
VContainer #1 - 설치 및 실행 (0) | 2024.08.04 |