마이 플밍 블로그

[Unity] Zenject - DI개요(1) 본문

게임엔진/Unity

[Unity] Zenject - DI개요(1)

레옹 2021. 11. 17. 19:52

젠젝트란 무엇인가?

젠젝트는 유니티에서 DI 패턴을 쉽게 구현할 수 있게 해주는 프레임워크다.

 

DI?

DI(Defendency injection) 즉 의존성 주입이란 무엇인지부터 알아보자.

 

먼저 의존성이란게 뭔지 알아보자

class People {
    Car car;
    public People() {
        car = new Car();
    }
    public void RideCar() {
        car.Ride();
    }
}

class Car {
    public void Ride() { }
}

위 코드를 보면 People는 변수로 Car 클래스를 가지고 있고 Car를 생성자에서 직접 생성하여 사용을 하고 있다.

이는 People와 Car가 강하게 결합되어 있음을 의미한다.

이렇게 코드간의 의존성이 늘어난다면 코드의 재활용성이 떨어지고 유지보수 비용이 늘어난다.

만약 Car 클래스가 아니라 Car를 상속받는 ElectricCar일 경우 코드를 수정해줘야 할 것이다.

 

이런 의존성을 줄이기 위한 방법이 바로 의존성 주입이다.

다음코드를 확인 해보자

class People {
    Car car;
    public People(Car car) {
        this.car = car
    }
    public void RideCar() {
        car.Ride();
    }
}

이번에는 생성자를 통해 외부에서 Car를 받아서 사용한다.

이렇게 객체를 외부에서 주입받아서 사용하는 것이 DI이다.

이렇게 하면 한 클래스가 수정이 되어도 다른 클래스를 수정할 필요가 없어진다.

 

이렇게 DI를 구현하면 좋은 점이 여러개 있다.

1. 의존성이 줄어듬

2. 재사용성이 높아짐

3. 유닛 테스트 하기 쉬워짐

 

이렇게 간단하게 DI의 개요를 알아봤다.

DI의 예시로 클래스 객체 주입을 했는데 Interface로 주입하는 경우도 많으니 참고바란다.