* 컴파일 시점에서 대거를 지원하는 툴들이 지원되고 있다.
=> 컴포트넌트를 구현하게되면, 컴포넌트를 토대로 해서 인젝터라는게 생성이 된다.
=> 인젝트 매서드를 구현해줘야한다
1. Application 단에서 전역적으로 선언.
=> public 으로 해서 DaggerApplicationComponent.create()
=> 앞서 ApplicationComponent를 만들면 자동으로 Dagger라는 접두어가 달린 클래스가 자동으로 생성 된다.
2. Activity에서 super.onCreate 위에 Dagger 인스턴스를 만들어준다.
(applicationContext as MyApplication).appComponent.inject(this)
* 이걸로 기본 세팅은 끝났다.
주입될 대상이 될 클래스 지정 ( 어떤곳에 Foo 라는 클래스르르 넣어야 된다고 생각 해보자 )
=> 바인딩을 가장 쉽게 구현 하는 방법으로는 @Inject라는 어노테이션이 붙은 생성자를 만든다.
=> 여기에 주입이 될거다라는 것을 의미한다.
=> 왼쪽으로 구현한다면 실제적으로는 오른쪽처럼 구현이 되게 되어있다.
바인딩 : 어떤 클래스가 키고, 그 클래스를 실제로 생성화 할수 있는 방법을 값으로 만든 해시테이블
=> 바인딩을 정의하는 방법이다.
=> 메서드의 매개변수를 받는 파라미터의 타입과 매서드의 리턴값의 타입이 중요하다.
=> 함수의 매개변수가 있는경우에는 유의 해야한다. ( 또다른 바인딩이 있는지 검색, 있다면 주입, 없다면 컴파일 에러 )
=> 하지만 아래와 같은 표현은 인터페이스에서는 사용할 수 가 없다.
=> 이전에 위에 있던 방법은 생성자 주입이다 ( @Inject constructor )
=> 필드 주입 방식은 생성자 주입보다 약간더 뒤의 시점이기 때문에 바로 지정하면 안되고 lateinit을 사용.
=> 가장 한정된 부분에서만 사용하도록 하는 것을 권장한다.
* 바인딩 그래프란?
=> 제일 아래서 부터 보면 된다.
=> class C 와 D는 아무런 의존성이 없다. ( 자녀로드 )
=> class B는 C와 D를 받아서 생성되게 되어있고.
=> A는 B를 받아서 생성하게 되어있다.
* 대거에서 바인딩과 주입은 어떤형대든 그래프로 표시되서
각각의 바인딩이 그래프의 한 노드로 표현된다. (중요)
*비순환 그래프 (DAG)
=> 순회 : 트레버스
앞서 @provides라는 어노테이션이 있었는데. 이 메소드에 리턴타입이 어떤 대거에서 무엇이 정의되고 있는지
( 어떤 키에 따라 어떤 클래스에 따르는지 ) 알려준다 => 이런 타입을 바인딩키라 불리운다
- 바인딩키는 식별자로서 사용된다 ( 대거에서는 엄격하게 사용된다 )
같은 인터페이스이지만 퀄리파이어에 따라 다른 바인딩을 줄 수 있다. ( 일반적인 방법이다 )
=> Provides를 가지고 있는 것들
=> 멤버주입은 에러에 취약
=> 주입전까지는 값이 널
=> 외부에서 변경 가능, 주입된 값이 바뀌는 경우도 있음.
'Android 공부 > Android 아키텍처' 카테고리의 다른 글
MVI (0) | 2023.10.20 |
---|---|
Dagger Hilt - 앱 안정성 및 확장성 강화를 위한 Android 아키텍처(13) (0) | 2022.09.05 |
의존성 주입이란? (1) - 앱 안정성 및 확장성 강화를 위한 Android 아키텍처(11) (0) | 2022.08.27 |
도메인/데이터 계층 , DDD의 전술적 패턴 (3) - 앱 안정성 및 확장성 강화를 위한 Android 아키텍처(10) (0) | 2022.08.26 |
도메인/데이터 계층 , DDD (2) - 앱 안정성 및 확장성 강화를 위한 Android 아키텍처(9) (0) | 2022.08.26 |