Android 공부/Android 아키텍처

의존성 주입이란? (1) - 앱 안정성 및 확장성 강화를 위한 Android 아키텍처(11)

Machine_웅 2022. 8. 27. 16:16
728x90
반응형

< 의존성 주입이란 무엇인가 ? >

- 이제는 안드로이드 개발에 있어서 필수적인 부분으로 자리 잡았다. 

 

 

=> 일관적으로 객체(의존성)를 만드는 방법이 정해진곳이 따로 있고, 만들어서 필요한 곳에 전달한다. 

 


 

왜 의존성 주입을 사용하지 ??

=> 객체(의존성)을 밖에서 만들어서 주입을 하게 하면,  코드 재사용상이 높아진다.

=> 클라이언트 코드의 변경 없이도  손쉽게 다른 형태의 DataSource 인스턴스를 만들 수 있다. 

=> 객체의 생성 과정이 바뀌더라도 클라이언트 코드에 영향을 주지 않는다.

=> 클라이언트는 interface로만 객체를 알고 있으면 되므로, 보다 나은 설계가 가능하다. 

    -  추상화, 멀티모듈에서 모듈별 의존성을 떼어내는 데에 매우 유용

=> 코드를 테스트 가능하게 한다 ( 객체의 생성방법을 설정에 따라 다르게 할 수 있다. )

 

 

예시 ( 파라미터의 변경 )


 

위에 NewsApi 객체를  클라이언트 안에서 직접 생성하면,  클라이언트 코드안에 고정되게 된다. 

=> 객체를 바꿔서 사용하는 다른 기능이 있다고 한다면,  코드를 또 만들어야 하는 비효율적이게 된다. 

 

아래의 코드는  클라이언트 밖에서 전달 받은 객체(의존성)을 사용하게 된다. 

 


 

=>  위에 하늘색으로 표기된 부분 들이 있을 것이다. ProdNewsApi(), DevNewsApi() 이부분은

DI에서 제공되는 injector, 또는 container 클래스에서의해서 구현되는 부분으로 

여기에서 실제로 각 객체에 대해서 생성을 하고, 각 객체들 사이의 관계가 정의된다. 


 


=> 과연 우리 프로젝트에서 얼마나 많은 기능이 필요한가에 따라서 선택이 달라져야 한다. 

=> 중간규모 이하라면  SeviceLocator 패턴을 이용하여 간단하게 의존성을 주입해도 좋다.


* 대거는 안드로이드를 타겟으로 나온게 아니기 때문에 activity나 viewModel 같은 경우는 직접 구현을 해줘야한다.

* 위의 문제는 hilt에는 구현 되어있다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

728x90
반응형