Developing Myself Everyday
article thumbnail

사진: UnsplashSangga Rima Roman Selia

 

 

이 게시글은 저의 무지함으로 발생한 질문에서 시작된 게시글입니다.

 

Now In Android를 참고하여 프로젝트를 진행하던 도중 "Data 모듈에서 Domain의 Usecase에 Repository를 주입할 때에는 @Provide를 사용해서 이를 주입해 주는데, Feature 모듈에서 Usecase를 주입 받을 때에는 왜 @Provide를 하지 않아도 주입받을 수 있는가?" 라는 질문이 생겼습니다.

 

이 게시글에서 이 질문에 대한 답을 하고자 합니다.


 

 

 

질문에 대한 답


위의 질문은 사실 Dagger를 잘 이해하지 못하고 Hilt를 사용해서 생긴 질문입니다. 

 

@Provide@Inject은 컴포넌트에서 의존성 그래프를 만들기 위한 과정입니다. 만들어진 의존성 그래프를 통해 컴포넌트는 모듈에서 객체를 가져와서 이를 필요한 곳에 전달해주고 있습니다.

 

만약 아래와 같이 B 클래스의 객체가 A 클래스에서 필요해서 @Provide @Inject를 정의 했다면 아래와 같은 의존성 그래프가 생길 것입니다.

 

 

 

만약 다른 C 클래스에서 A 클래스의 객체가 필요해서 C 클래스에서 @Inject를 했다고 생각해 보겠습니다.

 

 

 

이전의 작업으로 인해 해당 컴포넌트에는 A 클래스와 B 클래스에 대한 의존성 그래프가 정의되어 있습니다.

 

그렇기 때문에 컴포넌트에 A 클래스의 객체를 요청하면 컴포넌트는 A 클래스를 이미 알고 있기 때문에 따로 @Provide하지 않아도 C 클래스는 A 클래스의 객체를 주입받을 수 있게 됩니다.

 

 

 

 

결론


결국에는 원하는 객체를 주입받기 위해서는 컴포넌트가 정의한 의존성 그래프에 해당 객체가 정의되어 있어야 합니다.

 

@Inject를 통해서도 의존성 그래프에 해당 객체가 정의될 수 있으니 @Inject 만으로도 다른 클래스에서 해당 클래스를 찾아서 가져올 수 있는 것입니다.

profile

Developing Myself Everyday

@배준형

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!