< 의존성 주입이란 무엇인가 ? >
- 이제는 안드로이드 개발에 있어서 필수적인 부분으로 자리 잡았다.
=> 일관적으로 객체(의존성)를 만드는 방법이 정해진곳이 따로 있고, 만들어서 필요한 곳에 전달한다.
왜 의존성 주입을 사용하지 ??
=> 객체(의존성)을 밖에서 만들어서 주입을 하게 하면, 코드 재사용상이 높아진다.
=> 클라이언트 코드의 변경 없이도 손쉽게 다른 형태의 DataSource 인스턴스를 만들 수 있다.
=> 객체의 생성 과정이 바뀌더라도 클라이언트 코드에 영향을 주지 않는다.
=> 클라이언트는 interface로만 객체를 알고 있으면 되므로, 보다 나은 설계가 가능하다.
- 추상화, 멀티모듈에서 모듈별 의존성을 떼어내는 데에 매우 유용
=> 코드를 테스트 가능하게 한다 ( 객체의 생성방법을 설정에 따라 다르게 할 수 있다. )
예시 ( 파라미터의 변경 )
위에 NewsApi 객체를 클라이언트 안에서 직접 생성하면, 클라이언트 코드안에 고정되게 된다.
=> 객체를 바꿔서 사용하는 다른 기능이 있다고 한다면, 코드를 또 만들어야 하는 비효율적이게 된다.
아래의 코드는 클라이언트 밖에서 전달 받은 객체(의존성)을 사용하게 된다.
=> 위에 하늘색으로 표기된 부분 들이 있을 것이다. ProdNewsApi(), DevNewsApi() 이부분은
DI에서 제공되는 injector, 또는 container 클래스에서의해서 구현되는 부분으로
여기에서 실제로 각 객체에 대해서 생성을 하고, 각 객체들 사이의 관계가 정의된다.
=> 과연 우리 프로젝트에서 얼마나 많은 기능이 필요한가에 따라서 선택이 달라져야 한다.
=> 중간규모 이하라면 SeviceLocator 패턴을 이용하여 간단하게 의존성을 주입해도 좋다.
* 대거는 안드로이드를 타겟으로 나온게 아니기 때문에 activity나 viewModel 같은 경우는 직접 구현을 해줘야한다.
* 위의 문제는 hilt에는 구현 되어있다.
'Android 공부 > Android 아키텍처' 카테고리의 다른 글
Dagger Hilt - 앱 안정성 및 확장성 강화를 위한 Android 아키텍처(13) (0) | 2022.09.05 |
---|---|
Dagger 기초와 중요개념 (2) - 앱 안정성 및 확장성 강화를 위한 Android 아키텍처(12) (0) | 2022.08.29 |
도메인/데이터 계층 , DDD의 전술적 패턴 (3) - 앱 안정성 및 확장성 강화를 위한 Android 아키텍처(10) (0) | 2022.08.26 |
도메인/데이터 계층 , DDD (2) - 앱 안정성 및 확장성 강화를 위한 Android 아키텍처(9) (0) | 2022.08.26 |
도메인/데이터 계층 , DDD (1) - 앱 안정성 및 확장성 강화를 위한 Android 아키텍처(8) (0) | 2022.08.26 |