From e720b4392f0a84ae810649b8d53ec5c4d77d110f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=9D=BC=ED=98=81?= Date: Wed, 3 Jun 2026 10:43:04 +0900 Subject: [PATCH] =?UTF-8?q?refactor:=20Hilt=20ViewModel=20=EB=9D=BC?= =?UTF-8?q?=EC=9D=B4=EB=B8=8C=EB=9F=AC=EB=A6=AC=20=EB=A7=88=EC=9D=B4?= =?UTF-8?q?=EA=B7=B8=EB=A0=88=EC=9D=B4=EC=85=98=20=EB=B0=8F=20UI=20?= =?UTF-8?q?=EA=B5=AC=EC=84=B1=20=EC=9A=94=EC=86=8C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - `hilt-navigation-compose` 의존성을 `hilt-lifecycle-viewmodel-compose`로 교체 - 프로젝트 전반의 `hiltViewModel` 임포트 패키지 경로 수정 - Material3 가이드에 따라 `Divider`를 `HorizontalDivider`로 변경 (`MyScreen.kt`) - `LoginScreen`, `RegistrationScreen` 등에서 사용되지 않는 불필요한 임포트 제거 및 정리 --- app/build.gradle.kts | 2 +- .../hackathon/presentation/navigation/NavGraph.kt | 2 +- .../src/main/kotlin/AndroidFeatureConventionPlugin.kt | 2 +- .../com/example/hackathon/feature/auth/LoginScreen.kt | 10 ++-------- .../hackathon/feature/auth/RegistrationScreen.kt | 5 ++--- .../feature/combination/CreateCombinationScreen.kt | 4 ++-- .../hackathon/feature/combination/DetailScreen.kt | 4 ++-- .../com/example/hackathon/feature/home/HomeScreen.kt | 2 +- .../com/example/hackathon/feature/home/SearchScreen.kt | 2 +- .../hackathon/feature/profile/EditProfileScreen.kt | 2 +- .../com/example/hackathon/feature/profile/MyScreen.kt | 6 +++--- gradle/libs.versions.toml | 2 +- 12 files changed, 18 insertions(+), 25 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index d5a982c..259640b 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -55,7 +55,7 @@ dependencies { // Navigation implementation(libs.androidx.navigation.compose) - implementation(libs.hilt.navigation.compose) + implementation(libs.hilt.lifecycle.viewmodel.compose) // 이미지 로딩 — Coil 네트워크 페처(OkHttp)는 런타임 ServiceLoader 로 자동 등록된다. // UI 레이어(designsystem/feature)가 아닌 app 진입점에서만 클래스패스에 둬 의존 전파를 차단. diff --git a/app/src/main/java/com/example/hackathon/presentation/navigation/NavGraph.kt b/app/src/main/java/com/example/hackathon/presentation/navigation/NavGraph.kt index a6a127c..4d57bfe 100644 --- a/app/src/main/java/com/example/hackathon/presentation/navigation/NavGraph.kt +++ b/app/src/main/java/com/example/hackathon/presentation/navigation/NavGraph.kt @@ -7,7 +7,7 @@ import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier -import androidx.hilt.navigation.compose.hiltViewModel +import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle import androidx.navigation.NavHostController import androidx.navigation.NavType diff --git a/build-logic/src/main/kotlin/AndroidFeatureConventionPlugin.kt b/build-logic/src/main/kotlin/AndroidFeatureConventionPlugin.kt index e4882c4..a81ef8c 100644 --- a/build-logic/src/main/kotlin/AndroidFeatureConventionPlugin.kt +++ b/build-logic/src/main/kotlin/AndroidFeatureConventionPlugin.kt @@ -27,7 +27,7 @@ class AndroidFeatureConventionPlugin : Plugin { add("implementation", libs.findLibrary("androidx-lifecycle-runtime-ktx").get()) add("implementation", libs.findLibrary("androidx-activity-compose").get()) add("implementation", libs.findLibrary("androidx-navigation-compose").get()) - add("implementation", libs.findLibrary("hilt-navigation-compose").get()) + add("implementation", libs.findLibrary("hilt-lifecycle-viewmodel-compose").get()) add("implementation", libs.findLibrary("coil-compose").get()) add("testImplementation", libs.findLibrary("junit").get()) diff --git a/feature/auth/src/main/java/com/example/hackathon/feature/auth/LoginScreen.kt b/feature/auth/src/main/java/com/example/hackathon/feature/auth/LoginScreen.kt index 0c4fb8b..f143347 100644 --- a/feature/auth/src/main/java/com/example/hackathon/feature/auth/LoginScreen.kt +++ b/feature/auth/src/main/java/com/example/hackathon/feature/auth/LoginScreen.kt @@ -19,7 +19,6 @@ import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.text.KeyboardOptions import androidx.compose.foundation.verticalScroll -import com.example.hackathon.core.designsystem.icon.HackathonIcons import androidx.compose.material3.AlertDialog import androidx.compose.material3.Button import androidx.compose.material3.ButtonDefaults @@ -39,10 +38,7 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.focus.onFocusChanged import androidx.compose.ui.graphics.Color -import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.res.painterResource -import androidx.compose.ui.text.font.Font -import androidx.compose.ui.text.font.FontFamily import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.input.KeyboardType import androidx.compose.ui.text.input.PasswordVisualTransformation @@ -51,15 +47,13 @@ import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp -import androidx.hilt.navigation.compose.hiltViewModel +import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.example.hackathon.core.designsystem.R -import com.example.hackathon.core.designsystem.component.TopAppLogoBar -import com.example.hackathon.core.designsystem.theme.FontMedium +import com.example.hackathon.core.designsystem.icon.HackathonIcons import com.example.hackathon.core.designsystem.theme.Gray700 import com.example.hackathon.core.designsystem.theme.HackathonTheme import com.example.hackathon.core.designsystem.theme.Primary -import com.example.hackathon.feature.auth.LoginViewModel import kotlinx.coroutines.delay import kotlinx.coroutines.launch diff --git a/feature/auth/src/main/java/com/example/hackathon/feature/auth/RegistrationScreen.kt b/feature/auth/src/main/java/com/example/hackathon/feature/auth/RegistrationScreen.kt index 481dae1..b76c453 100644 --- a/feature/auth/src/main/java/com/example/hackathon/feature/auth/RegistrationScreen.kt +++ b/feature/auth/src/main/java/com/example/hackathon/feature/auth/RegistrationScreen.kt @@ -17,7 +17,6 @@ import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.text.KeyboardOptions import androidx.compose.foundation.verticalScroll -import com.example.hackathon.core.designsystem.icon.HackathonIcons import androidx.compose.material3.AlertDialog import androidx.compose.material3.Button import androidx.compose.material3.ButtonDefaults @@ -42,13 +41,13 @@ import androidx.compose.ui.text.input.VisualTransformation import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp -import androidx.hilt.navigation.compose.hiltViewModel +import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.example.hackathon.core.designsystem.component.TopAppLogoBar +import com.example.hackathon.core.designsystem.icon.HackathonIcons import com.example.hackathon.core.designsystem.theme.Gray700 import com.example.hackathon.core.designsystem.theme.HackathonTheme import com.example.hackathon.core.designsystem.theme.Primary -import com.example.hackathon.feature.auth.RegistrationViewModel import kotlinx.coroutines.delay import kotlinx.coroutines.launch diff --git a/feature/combination/src/main/java/com/example/hackathon/feature/combination/CreateCombinationScreen.kt b/feature/combination/src/main/java/com/example/hackathon/feature/combination/CreateCombinationScreen.kt index b9e21c4..9df0a3b 100644 --- a/feature/combination/src/main/java/com/example/hackathon/feature/combination/CreateCombinationScreen.kt +++ b/feature/combination/src/main/java/com/example/hackathon/feature/combination/CreateCombinationScreen.kt @@ -22,7 +22,6 @@ import androidx.compose.foundation.layout.width import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.verticalScroll -import com.example.hackathon.core.designsystem.icon.HackathonIcons import androidx.compose.material3.Button import androidx.compose.material3.ButtonDefaults import androidx.compose.material3.CircularProgressIndicator @@ -45,10 +44,11 @@ import androidx.compose.ui.graphics.Color import androidx.compose.ui.res.painterResource import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp -import androidx.hilt.navigation.compose.hiltViewModel +import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.example.hackathon.core.designsystem.R import com.example.hackathon.core.designsystem.component.TopAppLogoBar +import com.example.hackathon.core.designsystem.icon.HackathonIcons import com.example.hackathon.core.designsystem.theme.Gray700 import com.example.hackathon.core.designsystem.theme.HackathonTheme import com.example.hackathon.core.designsystem.theme.Primary diff --git a/feature/combination/src/main/java/com/example/hackathon/feature/combination/DetailScreen.kt b/feature/combination/src/main/java/com/example/hackathon/feature/combination/DetailScreen.kt index c9e4cf9..47d6092 100644 --- a/feature/combination/src/main/java/com/example/hackathon/feature/combination/DetailScreen.kt +++ b/feature/combination/src/main/java/com/example/hackathon/feature/combination/DetailScreen.kt @@ -22,7 +22,6 @@ import androidx.compose.foundation.pager.HorizontalPager import androidx.compose.foundation.pager.rememberPagerState import androidx.compose.foundation.shape.CircleShape import androidx.compose.foundation.shape.RoundedCornerShape -import com.example.hackathon.core.designsystem.icon.HackathonIcons import androidx.compose.material3.CircularProgressIndicator import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.Icon @@ -42,10 +41,11 @@ import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.res.painterResource import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.dp -import androidx.hilt.navigation.compose.hiltViewModel +import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle import coil3.compose.AsyncImage import com.example.hackathon.core.designsystem.R +import com.example.hackathon.core.designsystem.icon.HackathonIcons import com.example.hackathon.core.designsystem.theme.HackathonTheme import com.example.hackathon.core.designsystem.theme.Primary import com.example.hackathon.core.model.DummyData diff --git a/feature/home/src/main/java/com/example/hackathon/feature/home/HomeScreen.kt b/feature/home/src/main/java/com/example/hackathon/feature/home/HomeScreen.kt index 558c197..8548639 100644 --- a/feature/home/src/main/java/com/example/hackathon/feature/home/HomeScreen.kt +++ b/feature/home/src/main/java/com/example/hackathon/feature/home/HomeScreen.kt @@ -8,7 +8,7 @@ import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.ui.Modifier import androidx.compose.ui.tooling.preview.Preview -import androidx.hilt.navigation.compose.hiltViewModel +import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle import androidx.navigation.NavController import com.example.hackathon.core.designsystem.theme.HackathonTheme diff --git a/feature/home/src/main/java/com/example/hackathon/feature/home/SearchScreen.kt b/feature/home/src/main/java/com/example/hackathon/feature/home/SearchScreen.kt index 1ffea04..598719a 100644 --- a/feature/home/src/main/java/com/example/hackathon/feature/home/SearchScreen.kt +++ b/feature/home/src/main/java/com/example/hackathon/feature/home/SearchScreen.kt @@ -35,7 +35,7 @@ import androidx.compose.ui.text.input.ImeAction import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp -import androidx.hilt.navigation.compose.hiltViewModel +import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.example.hackathon.core.designsystem.R import com.example.hackathon.core.designsystem.theme.Gray700 diff --git a/feature/profile/src/main/java/com/example/hackathon/feature/profile/EditProfileScreen.kt b/feature/profile/src/main/java/com/example/hackathon/feature/profile/EditProfileScreen.kt index 48415c2..9fdb1b7 100644 --- a/feature/profile/src/main/java/com/example/hackathon/feature/profile/EditProfileScreen.kt +++ b/feature/profile/src/main/java/com/example/hackathon/feature/profile/EditProfileScreen.kt @@ -36,7 +36,7 @@ import androidx.compose.ui.graphics.Color import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp -import androidx.hilt.navigation.compose.hiltViewModel +import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle import coil3.compose.AsyncImage import com.example.hackathon.core.designsystem.icon.HackathonIcons diff --git a/feature/profile/src/main/java/com/example/hackathon/feature/profile/MyScreen.kt b/feature/profile/src/main/java/com/example/hackathon/feature/profile/MyScreen.kt index 69b9985..80973a8 100644 --- a/feature/profile/src/main/java/com/example/hackathon/feature/profile/MyScreen.kt +++ b/feature/profile/src/main/java/com/example/hackathon/feature/profile/MyScreen.kt @@ -21,8 +21,8 @@ import androidx.compose.foundation.shape.CircleShape import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material3.Button import androidx.compose.material3.ButtonDefaults -import androidx.compose.material3.Divider import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.HorizontalDivider import androidx.compose.material3.Scaffold import androidx.compose.material3.Tab import androidx.compose.material3.TabRow @@ -38,7 +38,7 @@ import androidx.compose.ui.graphics.Color import androidx.compose.ui.res.painterResource import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp -import androidx.hilt.navigation.compose.hiltViewModel +import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle import coil3.compose.AsyncImage import com.example.hackathon.core.designsystem.R @@ -199,7 +199,7 @@ fun MyScreen( } } - item { Divider(color = Gray50, thickness = 1.dp) } + item { HorizontalDivider(color = Gray50, thickness = 1.dp) } item { TabRow( diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 28cdad7..a1fc59e 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -52,7 +52,7 @@ coil-compose = { group = "io.coil-kt.coil3", name = "coil-compose", version.ref coil-network-okhttp = { group = "io.coil-kt.coil3", name = "coil-network-okhttp", version.ref = "coilNetworkOkhttp" } hilt-android = { group = "com.google.dagger", name = "hilt-android", version.ref = "hilt" } hilt-compiler = { group = "com.google.dagger", name = "hilt-android-compiler", version.ref = "hilt" } -hilt-navigation-compose = { group = "androidx.hilt", name = "hilt-navigation-compose", version.ref = "hiltNavigationCompose" } +hilt-lifecycle-viewmodel-compose = { group = "androidx.hilt", name = "hilt-lifecycle-viewmodel-compose", version.ref = "hiltNavigationCompose" } mockk = { group = "io.mockk", name = "mockk", version.ref = "mockk" } turbine = { group = "app.cash.turbine", name = "turbine", version.ref = "turbine" } kotlinx-coroutines-test = { group = "org.jetbrains.kotlinx", name = "kotlinx-coroutines-test", version.ref = "kotlinxCoroutinesTest" }