본문 바로가기

Flutter

GetX를 배우며 의존성 주입(dependency injection)에 대해 생각해보았다

https://www.youtube.com/watch?v=9_lJrJ0yVbg

 코딩셰프님이 위 영상에서 3분 50초 쯤에 의존성 주입에 대해 얘기을 한다. "무슨 거창한 용어 같지만 단순히 Controller 클래스 내부에 있는 프로퍼티와 메소드 접근을 위해서 Controller 인스턴스를 생성하는 것이다."라고 하셨지만 나는 좀 더 깊게 이해하고 싶었다.

 

 

 

https://tecoble.techcourse.co.kr/post/2021-04-27-dependency-injection/

 

의존관계 주입(Dependency Injection) 쉽게 이해하기

이번 글에서는 DI(의존성 주입, 의존관계 주입)의 개념을 설명한다. DI란 용어가 주는 위압감과 부담감 때문에 이해를 미뤄뒀거나, 처음 접하는 분들이 쉽게 이해할 수 있도록 쉽게 설명하고자 한

tecoble.techcourse.co.kr

 그래서 조사를 해보았고 이 블로그 글이 간단하고 핵심을 이해할 수 있어서 좋았다. 읽고 의존성과 의존성 주입 그리고 의존성 주입을 사용함으로써 얻는 이점을 정리해보자.

 

 


강의에 나온 코드의 이상한 점

 위 build 함수를 보면 build 함수 첫줄에서 Controller를 생성하고, GetBuilder 위젯에서 controller의 x 프로퍼티를 사용하고 있는 것을 볼 수 있다.

 

 그런데 의존성 주입은 Controller를 클래스 외부에서 생성해서 받아와야 한다. 근데 저 코드는 클래스 내부에서 Controller를 생성하고 있다. 그래서 나중에 다른 컨트롤러를 사용하고 싶을 때, 예를 들면 ControllerAction이라는 컨트롤러를 사용하려면, 지금 보이는 VIEW코드를 Get.put(Controller()) =>  Get.put(ControllerAction()) 처럼 다 바꿔줘야만 한다.

 

 의존성 주입을 사용하면 업 캐스팅으로 인스턴스를 받아온 후, 다운 캐스팅하여 사용하기만 하면 된다.

 

 


https://medium.com/flutter-community/the-flutter-getx-ecosystem-dependency-injection-8e763d0ec6b9

 

The Flutter GetX Ecosystem ~ Dependency Injection

The ease and level of control offered by GetX Dependency Management system makes it something worth giving a shot.

medium.com

 2번째 강의를 들으면서 자료를 다시 찾아보니 위에서 한 내 추측이 틀렸다. Get.put(Controller())로 의존성 주입을 하는 것이였다! Get.put() 함수로 메모리에 의존성 주입을 하면 다른 페이지(클래스)에서는 Controller를 생성할 필요없이 사용할 수 있다. GetX 패키지 편리하네.