ViewModel에 주입하기
깔끔한 주입을 위해 @HiltViewModel을 사용해 보세요.
ViewModel에 주입하기은(는) CoddyKit의 무료 Android Academy 강의입니다. 이것은 4개 중 4번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Android Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Android Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
Hilt로 ViewModel 주입하기
ViewModel은 프레임워크가 팩토리를 통해 인스턴스화하므로 특별합니다. Hilt는 @HiltViewModel 주석을 통해 이 과정과 통합됩니다.
ViewModel에 주석 추가하기
ViewModel에 @HiltViewModel을 표시하고 생성자에 @Inject를 추가합니다.
import dagger.hilt.android.lifecycle.HiltViewModel
import javax.inject.Inject
@HiltViewModel
class UserViewModel @Inject constructor(
private val repo: UserRepository
) : ViewModel()Hilt가 제공하는 것
Hilt는 각 생성자 매개변수를 의존성 그래프에서 조회합니다. UserRepository가 모듈이나 생성자 주입을 통해 바인딩되어 있기만 하면 Hilt가 자동으로 제공합니다.
Compose에서 가져오기
Composable 내부에서 hiltViewModel()을 사용하여 Hilt가 제공하는 ViewModel을 가져옵니다.
import androidx.hilt.navigation.compose.hiltViewModel
@Composable
fun UserScreen(
vm: UserViewModel = hiltViewModel()
) {
val state by vm.uiState
.collectAsStateWithLifecycle()
}호스트는 진입점이어야 합니다
hiltViewModel()이 작동하려면 호스팅하는 Activity에 @AndroidEntryPoint가 있어야 합니다. 이 주석이 Compose를 Hilt 그래프에 연결합니다.
@AndroidEntryPoint
class MainActivity : ComponentActivity()다른 의존성 주입하기
그래프에 있는 모든 것을 주입할 수 있습니다. 저장소와 사용 사례는 물론 모듈이 제공하는 Room 데이터베이스도 주입할 수 있습니다.
@HiltViewModel
class HomeViewModel @Inject constructor(
private val getUsers: GetUsersUseCase,
private val analytics: Analytics
) : ViewModel()Application Context 주입하기
컨텍스트가 필요한가요? @ApplicationContext를 사용하여 한정된 애플리케이션 컨텍스트를 주입합니다.
@HiltViewModel
class PrefsViewModel @Inject constructor(
@ApplicationContext private val context: Context
) : ViewModel()SavedStateHandle
Hilt는 탐색 인수를 전달하고 프로세스가 종료된 후에도 유지하는 SavedStateHandle을 자동으로 제공합니다.
@HiltViewModel
class DetailViewModel @Inject constructor(
handle: SavedStateHandle
) : ViewModel() {
val id: Int = handle.get<Int>("id") ?: 0
}전체 연결 과정
처음부터 끝까지의 흐름은 다음과 같습니다. 모듈이 저장소를 제공하고 → Hilt가 이를 ViewModel에 주입하며 → Compose가 hiltViewModel()을 통해 ViewModel을 가져옵니다. 수동 팩토리는 전혀 필요하지 않습니다.
수동 팩토리 코드가 필요하지 않습니다
Hilt가 없다면 생성자 인수가 필요한 모든 ViewModel에 대해 사용자 지정 ViewModelProvider.Factory를 작성해야 합니다. @HiltViewModel은 이 모든 작업을 없애 줍니다.
전체 학습 흐름 완성하기
이제 최신 Android 기술 스택을 모두 갖추었습니다. 수명 주기를 인식하는 상태를 관리하는 ViewModel, Room 영속성, 코루틴과 Flow를 Hilt DI로 모두 연결했습니다.
빠른 확인
ViewModel 주입에 대한 이해도를 확인해 보세요.
복습
학습한 내용:
@HiltViewModel과@Inject생성자를 사용하면 Hilt가 ViewModel을 생성할 수 있습니다.@AndroidEntryPoint호스트 내부에서hiltViewModel()을 사용하여 Compose에서 가져옵니다.- 저장소,
@ApplicationContext,SavedStateHandle을 주입할 수 있습니다. - 수동 팩토리가 필요하지 않습니다.
자주 묻는 질문
“ViewModel에 주입하기” 강의는 무료인가요?
네 — “ViewModel에 주입하기” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Android Academy 강의 전체를 잠금 해제할 수 있습니다. Android Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“ViewModel에 주입하기”에서 뭘 배우나요?
깔끔한 주입을 위해 @HiltViewModel을 사용해 보세요. 브라우저에서 직접 실행하는 실습 코드로 Android Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
Android Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 Android Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 4번째 강의입니다.
“ViewModel에 주입하기” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Android Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Android Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- 의존성 주입이 필요한 이유
- Hilt 설정하기
- 모듈과 제공자
- ViewModel에 주입하기