Skip to content

Conversation

@alswlekk
Copy link
Collaborator

@alswlekk alswlekk commented Jan 3, 2026

🔗 관련 이슈

📙 작업 설명

  • Setting과 관련된 부분에서 쓰인 hilt를 koin으로 리펙토링 진행
  • 뷰모델에서 inject, hilt 관련 어노테이션 제거

📸 스크린샷 또는 시연 영상 (선택)

기능 미리보기 기능 미리보기
기능 설명 기능 설명

💬 추가 설명 or 리뷰 포인트 (선택)

Summary by CodeRabbit

  • Chores
    • 의존성 주입 프레임워크를 Hilt에서 Koin으로 전환하여 앱의 DI 설정과 초기화 방식이 변경되었습니다.
    • 여러 화면의 기본 ViewModel 제공 및 리포지토리 등록 방식이 Koin 기반으로 업데이트되었습니다.

참고: 사용자에게 보이는 기능 변화는 없으며 안정성 및 유지보수성이 향상되었습니다.

✏️ Tip: You can customize this high-level summary in your review settings.

@coderabbitai
Copy link

coderabbitai bot commented Jan 3, 2026

Warning

Rate limit exceeded

@alswlekk has exceeded the limit for the number of commits that can be reviewed per hour. Please wait 20 minutes and 4 seconds before requesting another review.

⌛ How to resolve this issue?

After the wait time has elapsed, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout.

Please see our FAQ for further information.

📥 Commits

Reviewing files that changed from the base of the PR and between 08de4e2 and 14137c7.

📒 Files selected for processing (2)
  • app/build.gradle.kts
  • app/src/main/java/com/konkuk/medicarecall/App.kt

Walkthrough

Hilt 기반 DI를 제거하고 Koin으로 전환했습니다. Gradle에서 Hilt 플러그인/의존성 제거, app 초기화에 startKoin 추가, 여러 Repository/ViewModel에서 Hilt 어노테이션 삭제 및 Compose 화면에서 hiltViewModel()을 koinViewModel()로 교체했습니다.

Changes

코호트 / 파일(s) 요약
빌드 설정
build.gradle.kts, app/build.gradle.kts, settings.gradle.kts
최상위 Gradle에서 Hilt 플러그인 선언 제거. app/build.gradle.kts에서 Hilt 의존성·KSP 제거 및 Koin 의존성 추가; Detekt Hilt 매니저 제거.
앱 초기화
app/src/main/java/com/konkuk/medicarecall/App.kt
@HiltAndroidApp@Inject 제거. startKoin 초기화 추가 및 fcmRepositoryprivate val ... by inject()로 변경.
신규 DI 모듈
app/src/main/java/com/konkuk/medicarecall/data/di/SettingsModule.kt
Koin 모듈 정의 추가: API / Repository / ViewModel 모듈들과 settingsModules 리스트 등록(새 파일).
Repository 구현들
app/src/main/java/.../repositoryimpl/*RepositoryImpl.kt
Notice/Subscribe/UpdateElderInfo/EldersInfo/EldersHealth/ElderId 등에서 @Inject·@Singleton·javax.inject import 제거, 생성자/클래스 어노테이션 단순화.
ViewModel 클래스들
app/src/main/java/.../viewmodel/*ViewModel.kt
여러 설정 관련 ViewModel에서 @HiltViewModel·@Inject 제거(생성자 파라미터는 동일).
설정 UI(Composable)들
app/src/main/java/.../screen/*Screen.kt
Compose 화면들에서 기본 ViewModel 제공자 변경: hiltViewModel()koinViewModel()로 교체(관련 import 교체).
경미한 포맷
settings.gradle.kts
파일 끝의 공백/개행만 조정(내용적 변경 없음).

Sequence Diagram(s)

sequenceDiagram
  autonumber
  participant App as App (Application)
  participant Koin as Koin DI
  participant UI as Composable Screen
  participant VM as ViewModel
  participant Repo as Repository

  Note over App,Koin: 앱 시작 시 DI 초기화
  App->>Koin: startKoin(settingsModules...)
  Note over UI,VM: Composable 요청 시 ViewModel 제공
  UI->>Koin: 요청 koinViewModel()
  Koin->>VM: 인스턴스 생성/주입
  VM->>Repo: Repository 의존성 주입/호출
  Repo-->>VM: 데이터 반환
  VM-->>UI: 상태 업데이트
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Possibly related PRs

Suggested labels

refactor

Suggested reviewers

  • librawish808
  • ikseong00
  • ProtossManse

Hilt를 내려놓고 Koin을 불러오네,
모듈들 손잡고 조용히 재배치,
화면은 같은 채로 주입만 바뀌니,
앱은 한결 가벼운 숨을 쉬네. 🚀

Pre-merge checks and finishing touches

❌ Failed checks (1 warning)
Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. You can run @coderabbitai generate docstrings to improve docstring coverage.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed PR 제목이 주요 변경사항(Hilt에서 Koin으로 DI 마이그레이션)을 명확하게 요약하고 있으며, 설정 관련 부분의 리팩토링이라는 범위도 구체적으로 표시되어 있습니다.
Linked Issues check ✅ Passed PR은 #210의 목표인 'Hilt → Koin 마이그레이션'을 설정(Settings) 영역에서 완전히 충족하고 있습니다. 모든 ViewModel, Repository, Screen에서 Hilt 어노테이션 제거 및 Koin 기반 DI 구성이 구현되었습니다.
Out of Scope Changes check ✅ Passed 모든 변경사항이 설정 관련 Hilt → Koin 마이그레이션 범위 내에 있습니다. 비즈니스 로직 변경이나 다른 기능 영역의 수정은 없으며, DI 프레임워크 전환에만 집중되어 있습니다.

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@alswlekk alswlekk self-assigned this Jan 3, 2026
Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 12

🧹 Nitpick comments (6)
app/src/main/java/com/konkuk/medicarecall/App.kt (2)

23-23: 불필요한 빈 줄을 제거해주세요.

코드 스타일 일관성을 위해 연속된 빈 줄을 제거해주세요.

🔎 제안하는 수정
 import org.koin.core.context.GlobalContext.startKoin
-

33-38: Koin 초기화 구성이 올바르게 추가되었습니다.

startKoin 블록이 적절하게 구현되었으며, settingsModules를 통해 DI 모듈이 로드되고 있습니다. 다만 line 36에서 trailing comma를 추가하면 Kotlin 코드 스타일에 더 부합할 것 같습니다.

🔎 제안하는 수정
         modules(
-            settingsModules
+            settingsModules,
         )
app/src/main/java/com/konkuk/medicarecall/ui/feature/settings/viewmodel/DetailHealthViewModel.kt (1)

10-13: 마이그레이션 완료! 사소한 포매팅만 정리하면 됩니다.

DI 전환이 정확하게 적용되었습니다. Line 10의 불필요한 빈 줄만 제거해주시면 완벽할 것 같아요.

🔎 빈 줄 제거
 import kotlinx.coroutines.launch
 
-
 class DetailHealthViewModel(
app/src/main/java/com/konkuk/medicarecall/ui/feature/settings/viewmodel/EldersHealthViewModel.kt (1)

13-16: DI 전환 잘 되었습니다!

상태 관리 로직은 그대로 유지하면서 DI 어노테이션만 깔끔하게 제거되었네요. Line 13의 빈 줄만 정리하면 좋을 것 같습니다.

🔎 빈 줄 제거
 import kotlinx.coroutines.launch
 
-
 class EldersHealthViewModel(
app/src/main/java/com/konkuk/medicarecall/ui/feature/settings/viewmodel/EldersInfoViewModel.kt (1)

14-18: 두 개의 의존성도 잘 처리되었습니다!

EldersInfoRepository와 ElderIdRepository 두 의존성 모두 Koin으로 깔끔하게 전환되었네요. Line 14의 불필요한 빈 줄만 제거해주세요.

🔎 빈 줄 제거
 import kotlinx.coroutines.launch
 
-
 class EldersInfoViewModel(
app/src/main/java/com/konkuk/medicarecall/ui/feature/settings/viewmodel/DetailMyDataViewModel.kt (1)

11-14: Hilt → Koin 마이그레이션 잘 적용되었어요!

DI 어노테이션이 깔끔하게 정리되었네요. 한 가지, Line 11의 불필요한 빈 줄을 제거해주면 좋을 것 같아요 (linter도 지적하고 있어요). 그리고 확인해보니 DetailMyDataViewModel이 SettingsModule.kt의 settingsViewModelModule에 viewModel { DetailMyDataViewModel(get()) }로 제대로 등록되어 있으니 여기는 문제없습니다! 👍

🔎 빈 줄 제거 제안
 import kotlin.coroutines.cancellation.CancellationException
 
-
 class DetailMyDataViewModel(
📜 Review details

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 50931f0 and 66fedd1.

📒 Files selected for processing (29)
  • app/build.gradle.kts
  • app/src/main/java/com/konkuk/medicarecall/App.kt
  • app/src/main/java/com/konkuk/medicarecall/data/di/SettingsModule.kt
  • app/src/main/java/com/konkuk/medicarecall/data/repositoryimpl/ElderIdRepositoryImpl.kt
  • app/src/main/java/com/konkuk/medicarecall/data/repositoryimpl/EldersHealthInfoRepositoryImpl.kt
  • app/src/main/java/com/konkuk/medicarecall/data/repositoryimpl/EldersInfoRepositoryImpl.kt
  • app/src/main/java/com/konkuk/medicarecall/data/repositoryimpl/NoticeRepositoryImpl.kt
  • app/src/main/java/com/konkuk/medicarecall/data/repositoryimpl/SubscribeRepositoryImpl.kt
  • app/src/main/java/com/konkuk/medicarecall/data/repositoryimpl/UpdateElderInfoRepositoryImpl.kt
  • app/src/main/java/com/konkuk/medicarecall/ui/feature/settings/screen/AnnouncementScreen.kt
  • app/src/main/java/com/konkuk/medicarecall/ui/feature/settings/screen/ElderDetailScreen.kt
  • app/src/main/java/com/konkuk/medicarecall/ui/feature/settings/screen/ElderInfoScreen.kt
  • app/src/main/java/com/konkuk/medicarecall/ui/feature/settings/screen/HealthDetailScreen.kt
  • app/src/main/java/com/konkuk/medicarecall/ui/feature/settings/screen/HealthInfoScreen.kt
  • app/src/main/java/com/konkuk/medicarecall/ui/feature/settings/screen/MyDataSettingScreen.kt
  • app/src/main/java/com/konkuk/medicarecall/ui/feature/settings/screen/MyDetailScreen.kt
  • app/src/main/java/com/konkuk/medicarecall/ui/feature/settings/screen/SettingAlarmScreen.kt
  • app/src/main/java/com/konkuk/medicarecall/ui/feature/settings/screen/SettingSubscribeScreen.kt
  • app/src/main/java/com/konkuk/medicarecall/ui/feature/settings/screen/SettingsScreen.kt
  • app/src/main/java/com/konkuk/medicarecall/ui/feature/settings/viewmodel/DetailElderInfoViewModel.kt
  • app/src/main/java/com/konkuk/medicarecall/ui/feature/settings/viewmodel/DetailHealthViewModel.kt
  • app/src/main/java/com/konkuk/medicarecall/ui/feature/settings/viewmodel/DetailMyDataViewModel.kt
  • app/src/main/java/com/konkuk/medicarecall/ui/feature/settings/viewmodel/EldersHealthViewModel.kt
  • app/src/main/java/com/konkuk/medicarecall/ui/feature/settings/viewmodel/EldersInfoViewModel.kt
  • app/src/main/java/com/konkuk/medicarecall/ui/feature/settings/viewmodel/MyDataViewModel.kt
  • app/src/main/java/com/konkuk/medicarecall/ui/feature/settings/viewmodel/NoticeViewModel.kt
  • app/src/main/java/com/konkuk/medicarecall/ui/feature/settings/viewmodel/SubscribeViewModel.kt
  • build.gradle.kts
  • settings.gradle.kts
💤 Files with no reviewable changes (1)
  • build.gradle.kts
🧰 Additional context used
🪛 GitHub Actions: Android CI
app/src/main/java/com/konkuk/medicarecall/ui/feature/settings/viewmodel/EldersHealthViewModel.kt

[warning] 13-13: Needless blank line(s) [NoConsecutiveBlankLines]

app/src/main/java/com/konkuk/medicarecall/ui/feature/settings/viewmodel/EldersInfoViewModel.kt

[warning] 14-14: Needless blank line(s) [NoConsecutiveBlankLines]

app/src/main/java/com/konkuk/medicarecall/App.kt

[warning] 36-36: Trailing comma missing before ')' [TrailingCommaOnCallSite]


[warning] 10-10: Unused import [NoUnusedImports]


[warning] 12-12: Unused import [NoUnusedImports]


[warning] 13-13: Unused import [NoUnusedImports]


[warning] 23-23: Needless blank line(s) [NoConsecutiveBlankLines]

app/src/main/java/com/konkuk/medicarecall/ui/feature/settings/viewmodel/MyDataViewModel.kt

[warning] 13-13: Needless blank line(s) [NoConsecutiveBlankLines]

app/src/main/java/com/konkuk/medicarecall/ui/feature/settings/viewmodel/DetailMyDataViewModel.kt

[warning] 11-11: Needless blank line(s) [NoConsecutiveBlankLines]

app/src/main/java/com/konkuk/medicarecall/ui/feature/settings/viewmodel/SubscribeViewModel.kt

[warning] 13-13: Needless blank line(s) [NoConsecutiveBlankLines]

app/src/main/java/com/konkuk/medicarecall/ui/feature/settings/viewmodel/DetailHealthViewModel.kt

[warning] 10-10: Needless blank line(s) [NoConsecutiveBlankLines]

🔇 Additional comments (19)
settings.gradle.kts (1)

24-24: LGTM!

파일 끝에 개행 문자 추가만 이루어졌으며, 기능적 변경사항은 없습니다.

app/src/main/java/com/konkuk/medicarecall/data/repositoryimpl/EldersHealthInfoRepositoryImpl.kt (1)

15-18: DI 프레임워크 확인 필요.

생성자에서 @Inject 어노테이션 제거는 정상입니다. 그러나 주의할 점: 이 프로젝트는 Koin이 아닌 Dagger Hilt를 사용 중이며, EldersHealthInfoRepositoryImplRepositoryModule.kt (85-87줄)에서 @Binds @Singleton으로 올바르게 등록되어 있습니다. 따라서 별도의 수정은 필요하지 않습니다.

app/src/main/java/com/konkuk/medicarecall/data/repositoryimpl/EldersInfoRepositoryImpl.kt (1)

48-48: formatAsDate() 확장 함수 올바르게 구현되어 있습니다.

확장 함수가 app/src/main/java/com/konkuk/medicarecall/ui/common/util/Extensions.kt에 정의되어 있으며, "yyyyMMdd" 형식의 문자열을 "yyyy-MM-dd" 형식으로 변환합니다. 예외 처리도 포함되어 있어 안전합니다. 사용도 올바르게 이루어지고 있습니다.

app/src/main/java/com/konkuk/medicarecall/ui/feature/settings/screen/HealthInfoScreen.kt (1)

31-37: 깔끔한 마이그레이션입니다

Hilt에서 Koin으로의 전환이 정확하게 이루어졌네요. koinViewModel() 사용이 올바르게 적용되었습니다.

app/src/main/java/com/konkuk/medicarecall/ui/feature/settings/screen/SettingSubscribeScreen.kt (1)

29-36: LGTM!

DI 마이그레이션이 일관되게 잘 적용되었습니다.

app/src/main/java/com/konkuk/medicarecall/ui/feature/settings/screen/MyDataSettingScreen.kt (1)

48-56: 완벽한 마이그레이션입니다

Koin으로의 전환이 깔끔하게 이루어졌네요. 다른 스크린들과 일관된 패턴을 따르고 있습니다.

app/src/main/java/com/konkuk/medicarecall/data/repositoryimpl/UpdateElderInfoRepositoryImpl.kt (1)

9-11: Koin 모듈 등록 확인 완료

UpdateElderInfoRepositoryImplSettingsModule.ktsettingsRepositoryModule에 제대로 등록되어 있습니다. EldersInfoService 의존성도 Koin의 get()을 통해 정상적으로 주입됩니다. 마이그레이션이 완벽하게 진행된 상태입니다.

app/src/main/java/com/konkuk/medicarecall/ui/feature/settings/screen/HealthDetailScreen.kt (1)

37-37: Hilt에서 Koin으로의 DI 전환이 올바르게 적용되었습니다.

ViewModel 제공 방식이 hiltViewModel()에서 koinViewModel()로 깔끔하게 전환되었고, import도 정확하게 업데이트되었습니다.

Also applies to: 44-44

app/src/main/java/com/konkuk/medicarecall/ui/feature/settings/screen/SettingsScreen.kt (1)

38-38: Koin 마이그레이션이 정확하게 적용되었습니다.

다른 Settings 화면들과 동일한 패턴으로 DI 프레임워크 전환이 완료되었습니다.

Also applies to: 49-49

app/src/main/java/com/konkuk/medicarecall/ui/feature/settings/screen/AnnouncementScreen.kt (1)

24-24: DI 전환이 올바르게 적용되었습니다.

NoticeViewModel의 의존성 주입이 Koin으로 성공적으로 마이그레이션되었습니다.

Also applies to: 31-31

app/src/main/java/com/konkuk/medicarecall/App.kt (1)

26-26: FcmRepository의 Koin 기반 주입이 올바르게 구현되었습니다.

@Inject lateinit var에서 by inject()로의 전환이 정확하게 이루어졌습니다.

app/src/main/java/com/konkuk/medicarecall/ui/feature/settings/viewmodel/DetailElderInfoViewModel.kt (1)

11-13: DI 마이그레이션 깔끔합니다!

Hilt 어노테이션 제거가 잘 되었고, 코드도 간결하네요. 로직 변경 없이 DI 프레임워크만 전환한 것이 확인됩니다.

app/src/main/java/com/konkuk/medicarecall/ui/feature/settings/screen/MyDetailScreen.kt (2)

37-37: 임포트 변경 확인

Hilt에서 Koin으로의 임포트 변경이 정상적으로 적용되었습니다.


44-44: ViewModel 프로바이더 마이그레이션 완료

hiltViewModel()에서 koinViewModel()로의 전환이 올바르게 적용되었습니다.

app/src/main/java/com/konkuk/medicarecall/ui/feature/settings/screen/SettingAlarmScreen.kt (1)

34-39: DI 마이그레이션 적용 완료

Hilt에서 Koin으로의 전환이 올바르게 적용되었습니다. 임포트와 ViewModel 프로바이더 모두 정상적으로 변경되었습니다.

app/src/main/java/com/konkuk/medicarecall/ui/feature/settings/viewmodel/NoticeViewModel.kt (1)

13-15: ViewModel Hilt 어노테이션 제거 확인

@HiltViewModel@Inject 어노테이션이 정상적으로 제거되었습니다. Koin 기반 DI로의 전환이 올바르게 적용되었습니다.

app/src/main/java/com/konkuk/medicarecall/ui/feature/settings/screen/ElderDetailScreen.kt (1)

46-46: Hilt → Koin 마이그레이션 잘 적용되었습니다.

ViewModel 주입 방식이 hiltViewModel()에서 koinViewModel()로 깔끔하게 전환되었고, DetailElderInfoViewModelSettingsModule.kt에서 정상적으로 등록되어 있어 문제없어 보입니다.

Also applies to: 56-56

app/src/main/java/com/konkuk/medicarecall/ui/feature/settings/screen/ElderInfoScreen.kt (1)

31-31: Hilt → Koin 마이그레이션 정상적으로 완료되었습니다.

ViewModel 주입이 Koin 방식으로 전환되었고, EldersInfoViewModel이 Koin 모듈에 등록되어 있습니다.

Also applies to: 37-37

app/src/main/java/com/konkuk/medicarecall/data/di/SettingsModule.kt (1)

50-60: Hilt 어노테이션 제거 확인 완료

확인 결과 NoticeViewModel, SubscribeViewModel, MyDataViewModel, EldersInfoViewModel 등 SettingsModule에 등록된 모든 ViewModel에서 @HiltViewModel@Inject 어노테이션이 정상적으로 제거되었습니다. 생성자 주입도 Koin 방식으로 올바르게 구성되어 있어 Hilt에서 Koin으로의 마이그레이션이 완료된 상태입니다.

Comment on lines 109 to 112
// koin
implementation("io.insert-koin:koin-core:3.5.3")
implementation("io.insert-koin:koin-android:3.5.3")
implementation("io.insert-koin:koin-androidx-compose:3.5.3")
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🔴 Critical

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Description: Hilt 관련 import 및 어노테이션이 남아있는지 확인

echo "=== Checking for remaining Hilt imports ==="
rg -n --type=kt "import.*hilt" -g '!build.gradle.kts'

echo -e "\n=== Checking for Hilt annotations ==="
rg -n --type=kt "@(HiltViewModel|HiltAndroidApp|AndroidEntryPoint|InstallIn)" -g '!build.gradle.kts'

echo -e "\n=== Checking for hiltViewModel usage ==="
rg -n --type=kt "hiltViewModel\s*\(" -g '!build.gradle.kts'

Repository: Medicare-Call/Medicare-Call-Android

Length of output: 301


🏁 Script executed:

#!/bin/bash
# Description: Hilt 관련 import 및 어노테이션이 남아있는지 확인

echo "=== Checking for remaining Hilt imports ==="
rg -n "import.*hilt" -g "*.kt"

echo -e "\n=== Checking for Hilt annotations ==="
rg -n "@(HiltViewModel|HiltAndroidApp|AndroidEntryPoint|InstallIn)" -g "*.kt"

echo -e "\n=== Checking for hiltViewModel usage ==="
rg -n "hiltViewModel\s*\(" -g "*.kt"

echo -e "\n=== Checking for Hilt gradle plugin ==="
rg -n "hilt" app/build.gradle.kts

echo -e "\n=== Checking build.gradle.kts for dagger/hilt deps ==="
rg -n "dagger|hilt" app/build.gradle.kts

Repository: Medicare-Call/Medicare-Call-Android

Length of output: 12999


Koin 의존성 추가는 올바르지만 Hilt 마이그레이션이 완료되지 않았습니다.

Koin 의존성 추가는 좋은데, 코드베이스 전체에 Hilt 참조가 여전히 많이 남아있네요. 다음을 정리해야 합니다:

  • @HiltViewModel 어노테이션: 14개 ViewModel에서 사용 중
  • @AndroidEntryPoint 어노테이션: MainActivity, FcmService에서 사용 중
  • @InstallIn 어노테이션: 3개 DI 모듈에서 사용 중
  • hiltViewModel() 호출: 33곳에서 사용 중
  • Hilt import: 41개 파일에서 import 중

Hilt에서 Koin으로의 완전한 마이그레이션을 완료해주세요.

Comment on lines +39 to +47
val settingsRepositoryModule = module {
single<NoticeRepository> { NoticeRepositoryImpl(get<NoticeService>()) }
single<SubscribeRepository> { SubscribeRepositoryImpl(get<SubscribeService>()) }
single<UpdateElderInfoRepository> { UpdateElderInfoRepositoryImpl(get<EldersInfoService>()) }
single<EldersInfoRepository> { EldersInfoRepositoryImpl(get<EldersInfoService>()) }
single<EldersHealthInfoRepository> { EldersHealthInfoRepositoryImpl(get<EldersInfoService>(), get<ElderRegisterService>()) }

single<ElderIdRepository> { ElderIdRepositoryImpl() }
}
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🔴 Critical

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Description: Repository 구현체에서 Hilt 어노테이션 잔여 확인

# Repository 구현체 파일에서 Hilt 관련 어노테이션 찾기
rg -n "@Inject|@HiltViewModel|@Singleton" --type=kt \
  app/src/main/java/com/konkuk/medicarecall/data/repositoryimpl/NoticeRepositoryImpl.kt \
  app/src/main/java/com/konkuk/medicarecall/data/repositoryimpl/SubscribeRepositoryImpl.kt \
  app/src/main/java/com/konkuk/medicarecall/data/repositoryimpl/UpdateElderInfoRepositoryImpl.kt \
  app/src/main/java/com/konkuk/medicarecall/data/repositoryimpl/EldersInfoRepositoryImpl.kt \
  app/src/main/java/com/konkuk/medicarecall/data/repositoryimpl/EldersHealthInfoRepositoryImpl.kt \
  app/src/main/java/com/konkuk/medicarecall/data/repositoryimpl/ElderIdRepositoryImpl.kt

Repository: Medicare-Call/Medicare-Call-Android

Length of output: 105


🏁 Script executed:

#!/bin/bash
# Find the repository implementation files
find app -name "*RepositoryImpl.kt" -type f

# Also search for Hilt annotations in the data/repositoryimpl directory if it exists
if [ -d "app/src/main/java/com/konkuk/medicarecall/data/repositoryimpl" ]; then
  echo "=== Searching in repositoryimpl directory ==="
  rg -n "@Inject|@HiltViewModel|@Singleton" "app/src/main/java/com/konkuk/medicarecall/data/repositoryimpl"
fi

# Also try broader search in data directory
echo "=== Broader search in data directory ==="
rg -n "@Inject|@HiltViewModel|@Singleton" "app/src/main/java/com/konkuk/medicarecall/data" -g "*.kt"

Repository: Medicare-Call/Medicare-Call-Android

Length of output: 12215


🏁 Script executed:

#!/bin/bash
# Check the specific repository impl files mentioned in SettingsModule
echo "=== Checking specific files mentioned in SettingsModule ==="

for file in \
  "app/src/main/java/com/konkuk/medicarecall/data/repositoryimpl/NoticeRepositoryImpl.kt" \
  "app/src/main/java/com/konkuk/medicarecall/data/repositoryimpl/SubscribeRepositoryImpl.kt" \
  "app/src/main/java/com/konkuk/medicarecall/data/repositoryimpl/UpdateElderInfoRepositoryImpl.kt" \
  "app/src/main/java/com/konkuk/medicarecall/data/repositoryimpl/EldersInfoRepositoryImpl.kt" \
  "app/src/main/java/com/konkuk/medicarecall/data/repositoryimpl/EldersHealthInfoRepositoryImpl.kt" \
  "app/src/main/java/com/konkuk/medicarecall/data/repositoryimpl/ElderIdRepositoryImpl.kt"
do
  echo ""
  echo "=== $file ==="
  if [ -f "$file" ]; then
    head -20 "$file"
  else
    echo "File not found"
  fi
done

Repository: Medicare-Call/Medicare-Call-Android

Length of output: 6083


EldersHealthInfoRepositoryImpl과 ElderIdRepositoryImpl에서 @singleton 어노테이션을 제거하세요.

4개 파일(NoticeRepositoryImpl, SubscribeRepositoryImpl, UpdateElderInfoRepositoryImpl, EldersInfoRepositoryImpl)은 잘 정리되었지만, 다음 두 파일에서 Hilt @Singleton 어노테이션이 여전히 남아있습니다:

  • EldersHealthInfoRepositoryImpl.kt (line 14)
  • ElderIdRepositoryImpl.kt (line 6)

이 어노테이션들은 SettingsModule의 Koin single<> 정의와 중복되므로 제거가 필요합니다.

🤖 Prompt for AI Agents
In app/src/main/java/com/konkuk/medicarecall/data/di/SettingsModule.kt around
lines 39 to 47: the Koin module defines singletons for
EldersHealthInfoRepository and ElderIdRepository, but the concrete classes still
have Hilt @Singleton annotations; remove the redundant @Singleton annotation
from EldersHealthInfoRepositoryImpl
(app/src/main/java/.../EldersHealthInfoRepositoryImpl.kt line 14) and from
ElderIdRepositoryImpl (app/src/main/java/.../ElderIdRepositoryImpl.kt line 6) so
the Koin single<> declarations are the sole source of truth for scoping.

Comment on lines +16 to 18
class EldersInfoRepositoryImpl(
private val eldersInfoService: EldersInfoService,
) : EldersInfoRepository {
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🔴 Critical

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Description: EldersInfoRepositoryImpl의 Koin 모듈 등록 확인

echo "=== Searching for EldersInfoRepositoryImpl in Koin modules ==="
rg -n --type=kt -C 3 "EldersInfoRepositoryImpl" -g '*Module.kt'

echo -e "\n=== Searching for EldersInfoRepository binding ==="
rg -n --type=kt -C 3 "EldersInfoRepository" -g '*Module.kt'

echo -e "\n=== Also check for module files without strict naming ==="
fd -e kt -p "*odule*" | head -20

echo -e "\n=== Search in all kt files for Koin setup ==="
rg -n --type=kt "single.*EldersInfoRepository|bind.*EldersInfoRepository|factory.*EldersInfoRepository" | head -20

Repository: Medicare-Call/Medicare-Call-Android

Length of output: 684


🏁 Script executed:

#!/bin/bash
# Description: EldersInfoRepositoryImpl의 Koin 모듈 등록 확인

echo "=== Finding all Kotlin module files ==="
find . -type f -name "*Module.kt" -o -name "*module.kt" | head -20

echo -e "\n=== Searching for EldersInfoRepositoryImpl in all Kotlin files ==="
rg -n "EldersInfoRepositoryImpl" --type-list | grep -i kotlin

echo -e "\n=== Search for EldersInfoRepositoryImpl registrations ==="
rg -n "EldersInfoRepositoryImpl" | grep -i "koin\|single\|factory\|bind" | head -20

echo -e "\n=== Search for EldersInfoRepository in Koin context ==="
rg -n "EldersInfoRepository" | head -30

echo -e "\n=== Look for all .kt files with 'Module' in name ==="
find . -type f -name "*Module.kt"

echo -e "\n=== Search for Koin setup patterns ==="
rg -n "single\|factory\|modules" --glob="*.kt" | grep -i "elder" | head -20

Repository: Medicare-Call/Medicare-Call-Android

Length of output: 4730


🏁 Script executed:

#!/bin/bash
# Check the context around both registrations

echo "=== SettingsModule.kt around line 43 ==="
sed -n '35,50p' app/src/main/java/com/konkuk/medicarecall/data/di/SettingsModule.kt

echo -e "\n=== RepositoryModule.kt around line 63 ==="
sed -n '55,70p' app/src/main/java/com/konkuk/medicarecall/data/di/RepositoryModule.kt

echo -e "\n=== RepositoryModule.kt to see module type ==="
head -30 app/src/main/java/com/konkuk/medicarecall/data/di/RepositoryModule.kt

echo -e "\n=== SettingsModule.kt to see module type ==="
head -30 app/src/main/java/com/konkuk/medicarecall/data/di/SettingsModule.kt

Repository: Medicare-Call/Medicare-Call-Android

Length of output: 5435


🏁 Script executed:

#!/bin/bash
# Check if RepositoryModule is actually included in Hilt setup

echo "=== Check RepositoryModule class definition ==="
grep -n "@\|class RepositoryModule" app/src/main/java/com/konkuk/medicarecall/data/di/RepositoryModule.kt | head -5

echo -e "\n=== Search for @HiltModule or Module inclusion ==="
rg -n "@HiltModule|@Module" app/src/main/java/com/konkuk/medicarecall/data/di/

echo -e "\n=== Search for uses of RepositoryModule ==="
rg -n "RepositoryModule" --glob="*.kt"

echo -e "\n=== Check if Hilt is still being used ==="
rg -n "@Inject|@HiltViewModel|@AndroidEntryPoint" --glob="*.kt" | head -10

Repository: Medicare-Call/Medicare-Call-Android

Length of output: 2456


Koin 마이그레이션 불완전 - Hilt 바인딩과 충돌

@Inject 어노테이션은 제거되었지만, EldersInfoRepositoryImpl이 Hilt 모듈(RepositoryModule.kt line 63)과 Koin 모듈(SettingsModule.kt line 43)에 동시에 등록되어 있습니다. Hilt의 @Binds 바인딩은 생성자에 @Inject가 있어야 작동하므로, 현재 상태에서는 Hilt 의존성 주입이 실패할 가능성이 높습니다.

다음 중 하나를 수행해야 합니다:

  • RepositoryModule.kt line 63의 Hilt 바인딩 제거 (Koin으로 완전히 마이그레이션)
  • 또는 EldersInfoRepositoryImpl@Inject 어노테이션 복원 (Hilt 유지)
🤖 Prompt for AI Agents
In
app/src/main/java/com/konkuk/medicarecall/data/repositoryimpl/EldersInfoRepositoryImpl.kt
around lines 16-18, EldersInfoRepositoryImpl is registered in both Hilt
(RepositoryModule.kt line 63) and Koin (SettingsModule.kt line 43) while its
constructor no longer has @Inject, causing Hilt binding to fail; fix by either
(A) remove the Hilt @Binds entry in RepositoryModule.kt (line 63) to complete
migration to Koin, or (B) restore the constructor @Inject on
EldersInfoRepositoryImpl so Hilt @Binds works—pick one approach and update the
corresponding module/annotation accordingly.

Comment on lines +8 to 10
class NoticeRepositoryImpl(
private val noticeService: NoticeService,
) : NoticeRepository {
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🔴 Critical

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Description: NoticeRepositoryImpl의 Koin 모듈 등록 확인

echo "=== Searching for NoticeRepositoryImpl in Koin modules ==="
rg -n --type=kt -C 3 "NoticeRepositoryImpl" -g '*Module.kt'

echo -e "\n=== Searching for NoticeRepository binding ==="
rg -n --type=kt -C 3 "NoticeRepository" -g '*Module.kt'

echo -e "\n=== Looking for all Module.kt files ==="
fd -e kt -g '*Module.kt'

Repository: Medicare-Call/Medicare-Call-Android

Length of output: 565


🏁 Script executed:

#!/bin/bash
# Check RepositoryModule.kt for NoticeRepositoryImpl registration
echo "=== RepositoryModule.kt content ==="
cat -n app/src/main/java/com/konkuk/medicarecall/data/di/RepositoryModule.kt

echo -e "\n=== Searching for NoticeRepositoryImpl in all kotlin files ==="
rg -n "NoticeRepositoryImpl" app/src/main/java/com/konkuk/medicarecall/data/

echo -e "\n=== Searching for NoticeRepository binding ==="
rg -n "NoticeRepository" app/src/main/java/com/konkuk/medicarecall/data/di/

Repository: Medicare-Call/Medicare-Call-Android

Length of output: 9203


🏁 Script executed:

#!/bin/bash
# Check SettingsModule.kt to understand the full context
echo "=== SettingsModule.kt content ==="
cat -n app/src/main/java/com/konkuk/medicarecall/data/di/SettingsModule.kt

echo -e "\n=== Check NoticeRepositoryImpl class ==="
cat -n app/src/main/java/com/konkuk/medicarecall/data/repositoryimpl/NoticeRepositoryImpl.kt

Repository: Medicare-Call/Medicare-Call-Android

Length of output: 5461


Koin 마이그레이션 완료 확인 필요.

@Inject 어노테이션 제거는 올바르게 진행되었고, NoticeRepositoryImpl은 SettingsModule.kt의 Koin에 제대로 등록되어 있습니다.

다만 RepositoryModule.kt에서도 Dagger Hilt로 NoticeRepositoryImpl이 등록되어 있어 두 DI 프레임워크가 동시에 존재하는 상태입니다. 마이그레이션을 완료하려면 RepositoryModule.kt에서 bindNoticeRepository 바인딩을 제거해주세요.

🤖 Prompt for AI Agents
In
app/src/main/java/com/konkuk/medicarecall/data/repositoryimpl/NoticeRepositoryImpl.kt
around lines 8-10, NoticeRepositoryImpl is already registered in Koin via
SettingsModule.kt but a leftover Dagger Hilt binding exists in
RepositoryModule.kt; remove the bindNoticeRepository binding (and any associated
Dagger/Hilt annotations/imports) from RepositoryModule.kt so
NoticeRepositoryImpl is no longer registered by Dagger and the project uses only
Koin for this repository.

Comment on lines +9 to 11
class SubscribeRepositoryImpl(
private val subscribeService: SubscribeService,
) : SubscribeRepository {
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Search for SettingsModule and check if SubscribeRepositoryImpl is registered
find . -name "SettingsModule.kt" -o -name "*Module.kt" | head -20

Repository: Medicare-Call/Medicare-Call-Android

Length of output: 354


🏁 Script executed:

#!/bin/bash
# Check if SubscribeRepositoryImpl is registered in any Koin module
rg -l "SubscribeRepositoryImpl" --type=kt | grep -i module

Repository: Medicare-Call/Medicare-Call-Android

Length of output: 105


🏁 Script executed:

#!/bin/bash
# View the full SubscribeRepositoryImpl file to check for any remaining @Inject annotations
cat -n app/src/main/java/com/konkuk/medicarecall/data/repositoryimpl/SubscribeRepositoryImpl.kt

Repository: Medicare-Call/Medicare-Call-Android

Length of output: 1690


🏁 Script executed:

#!/bin/bash
# Check RepositoryModule for SubscribeRepositoryImpl registration
cat -n app/src/main/java/com/konkuk/medicarecall/data/di/RepositoryModule.kt

Repository: Medicare-Call/Medicare-Call-Android

Length of output: 7451


🏁 Script executed:

#!/bin/bash
# Check SettingsModule for SubscribeRepositoryImpl registration
cat -n app/src/main/java/com/konkuk/medicarecall/data/di/SettingsModule.kt

Repository: Medicare-Call/Medicare-Call-Android

Length of output: 3888


생성자 마이그레이션 정상 완료

@Inject 제거가 제대로 적용되었고, SettingsModule에서 Koin으로 올바르게 등록되어 있습니다. SubscribeService도 의존성 체인에서 정상 제공됩니다.

다만, RepositoryModule에는 아직 Hilt 방식의 바인딩이 남아있습니다 (line 83). 마이그레이션이 완전히 끝났다면 정리해두는 게 좋을 것 같습니다.

🤖 Prompt for AI Agents
In
app/src/main/java/com/konkuk/medicarecall/data/repositoryimpl/SubscribeRepositoryImpl.kt
around lines 9-11, the constructor no longer uses @Inject and Koin provides
SubscribeService via SettingsModule, but the project still has leftover Hilt
binding in RepositoryModule (around line 83); remove the obsolete Hilt binding
entry from RepositoryModule or replace it with the corresponding Koin module
registration to fully complete the migration, ensuring there are no remaining
Hilt annotations or bindings for SubscribeRepository.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

♻️ Duplicate comments (1)
app/src/main/java/com/konkuk/medicarecall/data/repositoryimpl/ElderIdRepositoryImpl.kt (1)

4-4: 사용하지 않는 import를 제거하세요.

javax.inject.Singleton import가 더 이상 사용되지 않습니다. @Singleton 어노테이션이 제거되었으므로 해당 import도 함께 삭제해주세요.

🔎 수정 제안
 package com.konkuk.medicarecall.data.repositoryimpl
 
 import com.konkuk.medicarecall.data.repository.ElderIdRepository
-import javax.inject.Singleton
 
 class ElderIdRepositoryImpl : ElderIdRepository {
📜 Review details

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 66fedd1 and 6a1ea70.

📒 Files selected for processing (3)
  • app/src/main/java/com/konkuk/medicarecall/App.kt
  • app/src/main/java/com/konkuk/medicarecall/data/repositoryimpl/ElderIdRepositoryImpl.kt
  • app/src/main/java/com/konkuk/medicarecall/ui/feature/settings/viewmodel/SubscribeViewModel.kt
🚧 Files skipped from review as they are similar to previous changes (1)
  • app/src/main/java/com/konkuk/medicarecall/ui/feature/settings/viewmodel/SubscribeViewModel.kt
🧰 Additional context used
🪛 GitHub Actions: Android CI
app/src/main/java/com/konkuk/medicarecall/data/repositoryimpl/ElderIdRepositoryImpl.kt

[error] 4-4: Unused import [NoUnusedImports]

app/src/main/java/com/konkuk/medicarecall/App.kt

[error] 20-20: Needless blank line(s) [NoConsecutiveBlankLines]

🔇 Additional comments (1)
app/src/main/java/com/konkuk/medicarecall/data/repositoryimpl/ElderIdRepositoryImpl.kt (1)

6-6: 깔끔한 Koin 마이그레이션입니다!

Hilt의 @Singleton@Inject constructor() 어노테이션이 제거되고 plain Kotlin 클래스로 변경되었습니다. Koin에서는 SettingsModulesingle { } 블록에서 싱글톤 스코프를 관리하므로, 클래스 레벨에서 어노테이션이 필요 없습니다. 변경 내용이 마이그레이션 목표와 잘 맞습니다.

Comment on lines 19 to 20


Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

연속된 빈 줄을 제거해주세요.

파이프라인에서 NoConsecutiveBlankLines 에러가 발생했어요. Line 19와 20에 빈 줄이 연속으로 있네요. 하나만 남기고 제거해주세요.

🔎 제안하는 수정
 import org.koin.core.context.GlobalContext.startKoin
-
 
 class App : Application() {
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
import org.koin.core.context.GlobalContext.startKoin
class App : Application() {
🧰 Tools
🪛 GitHub Actions: Android CI

[error] 20-20: Needless blank line(s) [NoConsecutiveBlankLines]

🤖 Prompt for AI Agents
In app/src/main/java/com/konkuk/medicarecall/App.kt around lines 19 to 20, there
are two consecutive blank lines triggering NoConsecutiveBlankLines; remove one
of the blank lines so only a single blank line remains between the surrounding
code, then save the file.

Comment on lines 22 to 35

private val fcmRepository: FcmRepository by inject()

// Application 전체에서 쑬 수 있는 스코프(앱이 살아있는 동안 유지돼야 하는 초기화/저장 작업 진행 - 여러 초기화 작업 한덩어리로 관리)
private val appScope = CoroutineScope(SupervisorJob() + Dispatchers.IO)

override fun onCreate() {
super.onCreate()
startKoin {
androidContext(this@App)
modules(
settingsModules,
)
}
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🔴 Critical

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# settingsModules 정의와 FcmRepository 바인딩 검색
rg -n 'settingsModules|FcmRepository' --type=kt -B 2 -A 5

Repository: Medicare-Call/Medicare-Call-Android

Length of output: 105


🏁 Script executed:

#!/bin/bash
# Kotlin 파일에서 settingsModules와 FcmRepository 검색
rg 'settingsModules|FcmRepository' --type-add 'kt:*.kt' -t kt -B 2 -A 5

Repository: Medicare-Call/Medicare-Call-Android

Length of output: 18355


🏁 Script executed:

#!/bin/bash
# settingsRepositoryModule 정의 검색
rg -n 'settingsRepositoryModule|module {' --type-add 'kt:*.kt' -t kt -B 2 -A 10

Repository: Medicare-Call/Medicare-Call-Android

Length of output: 208


🏁 Script executed:

#!/bin/bash
# SettingsModule.kt 파일 찾아서 내용 확인
find . -name 'SettingsModule.kt' -type f

Repository: Medicare-Call/Medicare-Call-Android

Length of output: 148


🏁 Script executed:

#!/bin/bash
# SettingsModule.kt 파일 내용 확인
cat -n ./app/src/main/java/com/konkuk/medicarecall/data/di/SettingsModule.kt

Repository: Medicare-Call/Medicare-Call-Android

Length of output: 3888


🏁 Script executed:

#!/bin/bash
# 모든 DI 모듈 파일 찾기
find ./app/src/main/java -name '*Module.kt' -type f

Repository: Medicare-Call/Medicare-Call-Android

Length of output: 354


🏁 Script executed:

#!/bin/bash
# ApiModule.kt와 NetworkModule.kt 내용 확인
echo "=== ApiModule.kt ===" && cat -n ./app/src/main/java/com/konkuk/medicarecall/data/di/ApiModule.kt
echo -e "\n=== NetworkModule.kt ===" && cat -n ./app/src/main/java/com/konkuk/medicarecall/data/di/NetworkModule.kt

Repository: Medicare-Call/Medicare-Call-Android

Length of output: 9985


FcmRepository가 Koin 모듈에 바인딩되지 않아 런타임 오류가 발생할 수 있습니다.

settingsModules에 FcmRepository 바인딩이 없네요. SettingsModule.kt의 settingsRepositoryModule에 다음을 추가해야 합니다:

single<FcmRepository> { FcmRepositoryImpl(...) }

또한 프로젝트 전체 DI 설정을 확인해보니 ApiModule, NetworkModule, RepositoryModule은 모두 Hilt 기반이고, App.kt만 Koin을 사용하고 있습니다. DI 프레임워크 통일이 필요합니다.

Copy link
Contributor

@ikseong00 ikseong00 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

👍

Copy link
Collaborator

@librawish808 librawish808 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

👍

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

♻️ Duplicate comments (2)
app/src/main/java/com/konkuk/medicarecall/App.kt (2)

21-21: FcmRepository의 Koin 바인딩을 확인해주세요.

이전 리뷰에서도 지적된 부분인데요, by inject()FcmRepository를 주입받고 있지만, settingsModulesFcmRepository 바인딩이 포함되어 있는지 확인이 필요해요. 만약 바인딩이 누락되었다면 앱 시작 시 런타임 에러가 발생할 거예요.

다음 스크립트로 FcmRepository가 Koin 모듈에 제대로 바인딩되어 있는지 확인해주세요:

#!/bin/bash
# SettingsModule.kt에서 FcmRepository 또는 FcmRepositoryImpl 바인딩 확인
echo "=== Checking FcmRepository binding in SettingsModule.kt ==="
rg -n 'FcmRepository' --type-add 'kt:*.kt' -t kt ./app/src/main/java/com/konkuk/medicarecall/data/di/SettingsModule.kt -A 2 -B 2

echo -e "\n=== Checking all single/factory bindings in SettingsModule.kt ==="
rg -n 'single<|factory<' --type-add 'kt:*.kt' -t kt ./app/src/main/java/com/konkuk/medicarecall/data/di/SettingsModule.kt -A 1

20-20: 연속된 빈 줄 제거가 필요해요.

이전 리뷰에서도 지적되었던 부분인데요, Line 19-20에 빈 줄이 연속으로 있어서 NoConsecutiveBlankLines 린터 에러가 발생하고 있어요. 빈 줄 하나만 남기고 제거해주세요.

🧹 Nitpick comments (1)
app/src/main/java/com/konkuk/medicarecall/ui/feature/settings/viewmodel/MyDataViewModel.kt (1)

38-42: 에러 로깅이 중복되고 있습니다.

39번과 41번 줄에서 동일한 에러를 두 번 로깅하고 있고, 40번 줄의 printStackTrace()도 이미 Log.e에서 throwable을 로깅하고 있어 불필요합니다. 로그가 깔끔하게 남도록 중복을 제거하면 좋을 것 같습니다.

🔎 중복 제거 제안
             .onFailure {
                 Log.e("MyDataViewModel", "사용자 정보 불러오기 실패: ${it.message}", it)
-                it.printStackTrace()
-                Log.e("MyDataViewModel", "사용자 정보 로딩 실패: ${it.message}", it)
             }
📜 Review details

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 6a1ea70 and 08de4e2.

📒 Files selected for processing (9)
  • app/src/main/java/com/konkuk/medicarecall/App.kt
  • app/src/main/java/com/konkuk/medicarecall/data/di/SettingsModule.kt
  • app/src/main/java/com/konkuk/medicarecall/data/repositoryimpl/ElderIdRepositoryImpl.kt
  • app/src/main/java/com/konkuk/medicarecall/data/repositoryimpl/EldersHealthInfoRepositoryImpl.kt
  • app/src/main/java/com/konkuk/medicarecall/ui/feature/settings/viewmodel/DetailHealthViewModel.kt
  • app/src/main/java/com/konkuk/medicarecall/ui/feature/settings/viewmodel/DetailMyDataViewModel.kt
  • app/src/main/java/com/konkuk/medicarecall/ui/feature/settings/viewmodel/EldersHealthViewModel.kt
  • app/src/main/java/com/konkuk/medicarecall/ui/feature/settings/viewmodel/EldersInfoViewModel.kt
  • app/src/main/java/com/konkuk/medicarecall/ui/feature/settings/viewmodel/MyDataViewModel.kt
🚧 Files skipped from review as they are similar to previous changes (3)
  • app/src/main/java/com/konkuk/medicarecall/ui/feature/settings/viewmodel/EldersHealthViewModel.kt
  • app/src/main/java/com/konkuk/medicarecall/data/di/SettingsModule.kt
  • app/src/main/java/com/konkuk/medicarecall/ui/feature/settings/viewmodel/DetailMyDataViewModel.kt
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
  • GitHub Check: ci-build
🔇 Additional comments (8)
app/src/main/java/com/konkuk/medicarecall/ui/feature/settings/viewmodel/EldersInfoViewModel.kt (1)

13-16: Koin 마이그레이션 잘 적용되었습니다! 👍

Hilt의 @Inject 어노테이션을 제거하고 일반 생성자로 변경한 것이 Koin 전환에 적합합니다. AI 요약에 따르면 SettingsModule.kt에 제대로 등록되어 있다고 하니 의존성 주입도 문제없을 것 같네요.

app/src/main/java/com/konkuk/medicarecall/ui/feature/settings/viewmodel/MyDataViewModel.kt (1)

12-14: Hilt → Koin 마이그레이션이 깔끔하게 처리되었습니다.

@Inject@HiltViewModel 어노테이션 제거가 올바르게 적용되었고, Koin 모듈에서 이 ViewModel을 제공하도록 구성된 것을 확인했습니다. 마이그레이션 방향이 정확합니다.

app/src/main/java/com/konkuk/medicarecall/ui/feature/settings/viewmodel/DetailHealthViewModel.kt (2)

12-26: 비즈니스 로직은 변경 없이 유지되었습니다.

updateElderHealth 메서드의 로직은 그대로 유지되어 마이그레이션이 안전하게 진행되었습니다. 에러 핸들링과 로깅도 적절하게 구현되어 있네요.


9-11: Hilt → Koin 전환 시 의존성 등록 확인 필요

생성자에서 @Inject 어노테이션과 클래스의 @HiltViewModel 어노테이션이 제거되어 Koin으로 의존성이 주입되도록 변경되었습니다. 다음을 확인해주세요:

  • Koin 모듈에 DetailHealthViewModel이 등록되어 있는지 (예: viewModel { DetailHealthViewModel(...) })
  • EldersHealthInfoRepository가 Koin 그래프에 제공되고 있는지
  • 화면에서 koinViewModel()으로 올바르게 주입받고 있는지
app/src/main/java/com/konkuk/medicarecall/data/repositoryimpl/ElderIdRepositoryImpl.kt (2)

5-5: Hilt 어노테이션 제거 완료! 👍

DI 마이그레이션 작업이 깔끔하게 완료되었습니다. @Inject@Singleton 어노테이션이 제거되었고, 이제 Koin의 single<ElderIdRepository> 블록에서 싱글톤으로 관리되고 있네요.


7-24: 동시성 관련 우려사항 검증 필요

현재 MutableList를 동기화 없이 사용하고 있다는 점은 맞지만, 이 Repository가 실제로 Koin에서 싱글톤으로 관리되는지, 그리고 다중 스레드 환경에서 동시 접근이 실제로 발생하는지 코드베이스를 직접 확인하면 좋을 것 같습니다.

구체적으로 다음을 확인해주시면 좋겠어요:

  • Koin 모듈에서 이 Repository의 스코프가 실제로 어떻게 설정되어 있는지
  • 어떤 곳에서 이 Repository를 호출하고 있으며, 특히 다중 스레드 컨텍스트(예: 코루틴, 별도 스레드)에서의 접근 패턴이 있는지

만약 실제로 동시 접근이 확인된다면 제안된 Collections.synchronizedList(), ConcurrentHashMap, 또는 synchronized 키워드 추가 중 하나를 적용하면 좋을 것 같습니다.

app/src/main/java/com/konkuk/medicarecall/data/repositoryimpl/EldersHealthInfoRepositoryImpl.kt (1)

13-16: [Rewritten review comment]
[Exactly ONE classification tag]

app/src/main/java/com/konkuk/medicarecall/App.kt (1)

28-33: 다른 feature 모듈들도 Koin으로 전환되었는지 확인 필요합니다.

startKoinsettingsModules만 포함되어 있는데, Issue #210을 보면 home, onboarding, data, settings 전체를 Koin으로 전환하는 게 목표인 것 같아요.

이 PR에서 다른 feature들(home, onboarding, data)도 함께 Koin 모듈로 전환되었다면, 여기 modules() 리스트에 추가해야 할 것 같습니다. 아니면 Settings만 먼저 전환하고 나머지는 별도 PR로 진행하는 건지 확인이 필요할 것 같아요.

@alswlekk alswlekk merged commit ec6e08e into develop Jan 3, 2026
1 of 2 checks passed
@alswlekk alswlekk deleted the refactor/koin-settings-#210 branch January 3, 2026 01:40
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Refactor] KMP 전환을 위한 Hilt -> Koin 마이그레이션

4 participants