본문 바로가기
개발/Unity 내일배움캠프 TIL

의존성 주입 (DI, Dependency Injection)

by 석시 2023. 11. 16.



오늘 공부를 하다가 아주 충격적인 것을 알아버렸다.

바로 의존성 주입에 대한 이야기이다.


문제 상황?

내가 작업하던 부분은 바로 이런 부분이었다.

MVC 패턴으로 작업을 하고 있는데, 이걸 클린 아키텍쳐로 구성하고 싶은 것이다.

https://blog.cleancoder.com/uncle-bob/2012/08/13/the-clean-architecture.html

이걸 위해서는 참조 방향이 다음과 같아야 하는 것이다.

View가 Controller를 참조하고, Controller가 Model을 참조해서

Controller가 Model의 값에 변경을 가해주면 View는 Model의 변경된 값을 Controller로부터 통지받아 변경된 값을 유저에게 보여주게 된다.

하지만, 문제가 있었다.

아무리 생각해도 유니티에서 View가 Controller를 참조하게 할 좋은 방법이 생각나지 않는 것이다!


의존성 주입이 없는 방식

그래서 다음과 같이 참조 방법을 바꿨다.

나름 합리적이지 않은가?

Controller 같은건 어차피 Player 같은 오브젝트에 직접 달려있을 테니까, Controller가 Awake() 같은 함수에 의해 초기화 될 때 UI를 생성해서 Controller가 그것을 직접 참조하게 만드는 것이다.

그리고 Model의 값을 변경할 때 View에 참조해 직접 View의 값을 수정해주는 방식이다.


의존성 주입 (Dependency Injection)

의존성 주입이라는 것은 의존 관계를 외부에서 결정하는 것이다.

인터페이스로 구현해줄 수도 있겠지만, 가장 간단한 방식은 다음처럼 생성자나 초기화 함수에서 의존관계를 만들어 줄 오브젝트를 직접 넘겨주는 것이다.

이렇게 한다면 View 입장에서 Controller를 참조하게 해줄 수 있는 것이다.

의존성 주입으로 클린 아키텍쳐를 만든 것이다.


Uploaded by N2T