Android 공부/Android 아키텍처

Dagger 기초와 중요개념 (2) - 앱 안정성 및 확장성 강화를 위한 Android 아키텍처(12)

Machine_웅 2022. 8. 29. 15:13
728x90
반응형

* 컴파일 시점에서 대거를 지원하는 툴들이 지원되고 있다.

 


 

 

 

 

=> 컴포트넌트를 구현하게되면, 컴포넌트를 토대로 해서 인젝터라는게 생성이 된다.

=> 인젝트 매서드를 구현해줘야한다

 

 

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를 가지고 있는 것들 


 

 

 

 

 

 

 

=> 멤버주입은 에러에 취약

=> 주입전까지는 값이 널

=> 외부에서 변경 가능, 주입된 값이 바뀌는 경우도 있음.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

728x90
반응형