Android Dagger

코랑·2025년 7월 4일

Inject

Component로 부터 의존성 객체를 주입 요청하는 어노테이션
Component가 Module로 부터 객체를 생성해 넘겨줌.
Component는 @Inject 어노테이션을 의존성 주입할 멤버 변수와 생성자에게 달아줌으로 DI 대상을 확인할 수 있음.
객체 생성이 클래스엣 이루어지지 않고 Component가 생성해주기 때문에 보일러플레이트 코드를 작성할 필요 없이 클래스를 테스트 하기 수월해짐.
@Inject 가 안되는 경우

  • Interface: 생성자가 없음
  • 외부 클래스: 써드 파티 라이브러리 등의 클래스는 참조가 불가능

Component

객체를 생성하기 위해 제공되는 interface.
실제로 객체를 생성 해야하는 부분에서는 module이 아닌, component를 호출하여 객체를 생성
@ComponentInterface, abstract class 에만 사용가능
컴파일 타임에 접두어 'Dagger'와 Component 클래스 이름이 합쳐진 Dagger클래스 자동생성
(ex : @Component interface MyComponent -> DaggerMyComponent 클래스 생성)

Component Methods

1. Provision Method

Provision 메서드 유형은 인자(매개변수)가 없고, Module이 제공하는 객체의 타입을 반환형으로 갖습니다.
생성된 Component 클래스에서 Provision 메서드를 통해 객체를 얻을 수 있습니다 

2. Member-Injection Method

의존성을 주입시킬 객체를 메서드의 파라미터로 넘기는 방식으로, Member-Injection 메서드를 호출하면 인자(매개변수)로 받은 타겟 클래스 내부 @Inject가 붙은 필드에 객체를 주입합니다

SubComponent

Module

module은 객체를 생성해서 공급
class에 @Module 을 붙여줘야함 class 만 가능
@Provides 는 반드시 @Module 클래스에 선언된 메서드에서만 사용 가능
@Provides, @Binds 는 컴포넌트에 객체를 전달 받고 제공함
Null 인젝션은 기본적으로 금지 제공하고 전달 받는 쪽 둘 다에 @Nullable 붙여줘야 컴파일에러 안남

Scope

기타

  • @JvmSuppressWildcards 는 자바로 변환과정에서 WildCard<? extends T> 로 변경되지 않게 하려고 붙여줌

0개의 댓글