DI pattern
Object Dependencies - 객체 의존성
현재 객체가 다른 객체를 참조하고 있다면, 현재 객체는 다른 객체에 의존성을 가짐.
public class PetOwner
{
private AnimalType pet;
public PetOwner()
{
pet = new AnimalType(PetType.Dog);
}
}
해당 방식의 문제점 ?
- PetOwner가 AnimalType 객체의 생성을 제어
: AnimalType의 객체를 변경하면 PetOwner 또한 변경됨
>> 즉, 하나의 모듈이 변경되면 의존한 다른 모듈까지 변경되어야 함.
만약, AnimalType을 사용하고 있는 class가 늘어난다면 해당 클래스들 또한 전부 수정이 필요하게 되는 상황이 생김!
Dependency Injection - 의존성 주입
객체 자체가 아니라, Framework에 의해 객체의 의존성이 주입되는 설계 방식
위의 예시로 설명하자면,
PetOwner가 코드를 통해 new로 직접 Dog()를 생성하는 방식이 아니라
소스코드 내부가 아닌 DI Framework를 통해 외부에서 Dog()를 생성하여 PetOwner에가 넘겨주는 방식이다
public class PetOwner
{
private AnimalType pet;
public PetOwner(AnimalType _pet)
{
pet = _pet;
}
}
외부에서 생성된 객체를 인자로 전달받기 때문에 AnimalType의 생성에 어떠한 것이 필요한지
PetOwner는 알 필요가 없어짐.
개발자가 할 일은
- 주입할 것에 대한 class를 정의하기
- 각각 class들의 종속성 순서 정하기
즉 코드 상에서 클래스 변경에 따른 구현을 추가하거나 바꿀 일이 없다!
나는 Unity에서 Zenject라는 DI Framework를 사용하고 있는데,
[Zenject] Unity에서 DI Framework를 사용해보고 싶다면?
Zenject ? Unity에서 DI Pattern을 편리하게 사용하기 위해 제작된 오픈 소스 DI Framework Zenject Github 링크 GitHub - modesttree/Zenject: Dependency Injection Framework for Unity3D Dependency Injection Framework for Unity3D . Contribute
dev-oat.tistory.com
해당 프레임 워크에 대해 정리한 글을 링크 걸어본당