hiltViewModel과 @HiltViewModel
Composable에 ViewModel을 주입합니다.
hiltViewModel과 @HiltViewModel은(는) CoddyKit의 무료 Jetpack Compose Academy 강의입니다. 이것은 4개 중 3번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Jetpack Compose Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Jetpack Compose Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
ViewModel에도 의존성이 필요합니다
일반적으로 ViewModel은 저장소나 사용 사례에 의존합니다. Hilt가 이를 주입하도록 할 수 있으므로 더는 직접 만들 필요가 없습니다.
ViewModel에 주석 지정하기
클래스에 @HiltViewModel을 지정하고 생성자에 @Inject를 추가합니다. 그러면 Hilt가 모든 의존성과 함께 해당 클래스를 만드는 방법을 알게 됩니다.
@HiltViewModel
class FeedViewModel @Inject constructor(private val repo: Repo) : ViewModel()필요한 모든 항목 주입하기
생성자 매개변수는 Hilt가 알고 있는 어떤 타입이든 될 수 있습니다. 예를 들어 저장소, 사용 사례 또는 로거가 있습니다. Hilt가 전체 연결 구조를 대신 해결합니다.
@HiltViewModel
class FeedViewModel @Inject constructor(
repo: Repo, logger: Logger
) : ViewModel()Compose에서 가져오기
Composable 내부에서 hiltViewModel()을 호출하여 Hilt가 만든 ViewModel을 가져옵니다. 팩토리 상용구 코드 없이 깔끔한 호출 하나면 됩니다.
@Composable
fun FeedScreen(vm: FeedViewModel = hiltViewModel()) { }Compose 의존성 추가하기
hiltViewModel()은 hilt-navigation-compose 아티팩트에 있습니다. 화면에서 함수를 사용할 수 있도록 Gradle 파일에 추가합니다.
implementation("androidx.hilt:hilt-navigation-compose:1.2.0")기본 매개변수 패턴
hiltViewModel()을 기본 매개변수로 지정하면 Composable을 테스트할 수 있습니다. 테스트에서 가짜 ViewModel을 직접 전달할 수도 있습니다.
@Composable
fun FeedScreen(vm: FeedViewModel = hiltViewModel())소유자에 맞춰 범위 지정하기
hiltViewModel()은 인스턴스의 범위를 가장 가까운 ViewModelStoreOwner에 맞춥니다. 일반적으로 Activity 또는 탐색 대상이며, 이 덕분에 재구성 후에도 인스턴스가 유지됩니다.
탐색 대상마다 하나의 ViewModel
NavHost 내부에서는 각 탐색 대상이 자체 ViewModel 인스턴스를 가집니다. 다른 화면으로 이동했다가 돌아오면 해당 화면에는 새 인스턴스가 전달됩니다.
Activity에도 표시하기
Hilt가 Composable에 ViewModel을 전달하려면 호스트 Activity에 @AndroidEntryPoint가 있어야 합니다. 없으면 주입이 실패합니다.
@AndroidEntryPoint
class MainActivity : ComponentActivity()상태는 공개하고 로직은 숨기기
주입된 ViewModel은 UI 상태를 공개하고 화면은 이를 읽기만 합니다. 로직은 테스트된 한 곳에 두고 Composable은 간결하게 유지할 수 있습니다.
val state by vm.uiState.collectAsStateWithLifecycle()수동 팩토리는 필요하지 않습니다
Hilt를 사용하기 전에는 인수가 있는 각 ViewModel마다 ViewModelProvider.Factory를 작성해야 했습니다. Hilt가 이 상용구 코드를 완전히 없애 줍니다. 🎁
빠른 확인
Composable에 Hilt 주입 ViewModel을 올바르게 설정하는 조합은 무엇인가요?
복습: 주입된 ViewModel
ViewModel에 @HiltViewModel을 지정하고 hiltViewModel()을 통해 가져오며, 팩토리 코드 없이 소유자에 맞춰 범위를 지정하는 방법을 배웠습니다. ✨
AI 튜터와 함께 Kotlin을(를) 배우세요 — 무료
브라우저에서 실제 코드를 작성하고 실행하며, 24/7 AI 튜터로부터 즉각적인 도움을 받고, 웹이나 앱에서 중단한 부분부터 계속 학습하세요.
- 코스
- 30
- 레슨
- 120
자주 묻는 질문
“hiltViewModel과 @HiltViewModel” 강의는 무료인가요?
네 — “hiltViewModel과 @HiltViewModel” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Jetpack Compose Academy 강의 전체를 잠금 해제할 수 있습니다. Jetpack Compose Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“hiltViewModel과 @HiltViewModel”에서 뭘 배우나요?
Composable에 ViewModel을 주입합니다. 브라우저에서 직접 실행하는 실습 코드로 Jetpack Compose Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
Jetpack Compose Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 Jetpack Compose Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 3번째 강의입니다.
“hiltViewModel과 @HiltViewModel” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Jetpack Compose Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Jetpack Compose Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- DI가 필요한 이유: 테스트 가능하고 결합도가 낮은 코드
- 모듈, @Provides 및 @Binds
- hiltViewModel과 @HiltViewModel
- 범위와 컴포넌트 수명