@AndroidEntryPoint는 Hilt의 핵심 어노테이션으로, Android 컴포넌트(Activity, Fragment, Service 등)에 의존성 주입을 활성화하는 역할을 합니다. 이를 통해 Hilt는 해당 컴포넌트가 생성될 때 자동으로 필요한 의존성을 주입할 수 있게 됩니다.
사용 방법
Hilt를 사용하면 각 Android 컴포넌트에 @AndroidEntryPoint를 추가하고, Hilt가 제공하는 의존성을 주입받을 수 있습니다. 예를 들어, Activity나 Fragment에 @AndroidEntryPoint를 추가하고, ViewModel, Repository, ApiService 등과 같은 의존성을 주입받을 수 있습니다.
예시
1. Activity에서 사용
@AndroidEntryPoint
class GameActivity : AppCompatActivity() {
// Hilt가 GameViewModel을 주입
private val gameViewModel: GameViewModel by viewModels()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_game)
// ViewModel을 사용하여 게임 데이터를 가져오는 로직
}
}
2. Fragment에서 사용
@AndroidEntryPoint
class GameFragment : Fragment(R.layout.fragment_game) {
// Hilt가 GameViewModel을 주입
private val gameViewModel: GameViewModel by viewModels()
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
// ViewModel을 사용하여 데이터를 가져오는 등의 작업
}
}
3. Service에서 사용
@AndroidEntryPoint
class GameService : Service() {
// Hilt가 GameRepository를 주입
@Inject lateinit var gameRepository: GameRepository
override fun onBind(intent: Intent?): IBinder? {
// 서비스에서 gameRepository를 사용
return null
}
}
@AndroidEntryPoint의 역할
- @AndroidEntryPoint가 선언된 클래스에서는 해당 클래스가 Hilt에서 의존성 주입을 받을 수 있도록 처리됩니다.
- Hilt는 해당 컴포넌트가 생성될 때 자동으로 주입할 의존성을 찾아서 삽입합니다.
- @AndroidEntryPoint가 선언된 컴포넌트에서는 @Inject 어노테이션을 사용하여 의존성을 주입받을 수 있습니다.
- @AndroidEntryPoint를 사용하면, ViewModel, Repository, Network 모듈 등 필요한 객체들이 컴포넌트에 자동으로 주입되며, 별도의 의존성 생성 코드 없이 DI 패턴을 구현할 수 있습니다.
주의사항
- @AndroidEntryPoint는 Hilt의 DI 기능을 사용할 수 있는 컴포넌트에서만 사용해야 하며, Activity, Fragment, Service, BroadcastReceiver와 같은 Android 컴포넌트에서 사용됩니다.
- @AndroidEntryPoint가 없는 컴포넌트에서는 Hilt를 통한 의존성 주입을 사용할 수 없습니다.
요약
@AndroidEntryPoint는 Hilt의 의존성 주입을 Android 컴포넌트에 적용할 때 사용되는 어노테이션으로, 이를 통해 Activity, Fragment, Service 등에서 의존성 주입을 쉽게 할 수 있습니다.
'Android' 카테고리의 다른 글
[안드로이드] onCreate() 와 onPostCreate() 차이점 (0) | 2024.11.14 |
---|---|
[안드로이드][kotlin] withContext 란? (0) | 2024.11.13 |
[안드로이드][클릭아키텍처][Hilt] - @Provides 개념 및 사용방법 알아보기 (0) | 2024.11.12 |
[안드로이드][클릭아키텍처][Hilt] - @InstallIn 어노테이션 이란? (0) | 2024.11.12 |