Hilt와 Dagger, JSR-330 (3) - Pure Java/Kotlin Module

이태훈·2022년 2월 6일
1

Hilt, Dagger, JSR-330

목록 보기
3/3

안녕하세요, 이번 편에서는 Pure Java/Kotlin 환경에서 Hilt를 적용할 수 없을 때 JSR-330 Annotation을 이용하여 Dependency Injection을 하는 법을 알아보려고 합니다.

이번 시리즈는 저번 시리즈들보다 짧게 다뤄질 예정입니다. 많은 내용은 없거든요.

Pure Java/Koltlin 모듈을 사용한 제 프로젝트를 예시로 들면서 알아보도록 하겠습니다.

먼저, 예시로 사용되는 프로젝트는 Multi Module Clean Architecture를 적용한 프로젝트이며, Domain Module을 Pure Java/Kotlin Module로 구성했습니다.

Domain Module에서 Dependency Injection을 적용한 것은 UseCase들입니다.

본격적으로 코드를 보여드리겠습니다.

domain/build.gradle.kts

implementation "javax.inject:javax.inject:1"

먼저 JSR-330을 사용하기 위해 javax.inject를 넣어줍니다.

domain/GetItemListUseCase.kt

@Singleton
class GetItemListUseCase @Inject constructor(
  private val itemRepository: ItemRepository
) {
  operator fun invoke() = itemRepository.getItems()
}

다음으로, JSR-330의 @Inject Annotation을 지정해주면 아래와 같은 클래스를 Hilt가 만들어줍니다.

app/build/generated/.../GetItemListUseCase_Factory.java

@DaggerGenerated
@SuppressWarnings({
  "unchecked",
  "rawtypes"
})
public final class GetItemListUseCase_Factory implements Factory<GetItemListUseCase> {
  private final Provider<ItemRepository> itemRepositoryProvider;

  public GetItemListUseCase_Factory(Provider<ItemRepository> itemRepositoryProvider) {
    this.itemRepositoryProvider = itemRepositoryProvider;
  }

  @Override
  public GetItemListUseCase get() {
    return newInstance(itemRepositoryProvider.get());
  }

  public static GetItemListUseCase_Factory create(Provider<ItemRepository> itemRepositoryProvider) {
    return new GetItemListUseCase_Factory(itemRepositoryProvider);
  }

  public static GetItemListUseCase newInstance(ItemRepository itemRepository) {
    return new GetItemListUseCase(itemRepository);
  }
}

이 GetItemListUseCase_Factory를 통하여 GetItemListUseCase는 다른 모듈에서 종속항목으로서 사용이 가능해집니다.


https://github.com/TaehoonLeee/multi-module-clean-architecture

profile
https://www.linkedin.com/in/%ED%83%9C%ED%9B%88-%EC%9D%B4-7b9563237

0개의 댓글