Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

LoginViewModel - Context 참조 제거 #64

Merged
merged 4 commits into from
Oct 28, 2024
Merged

LoginViewModel - Context 참조 제거 #64

merged 4 commits into from
Oct 28, 2024

Conversation

eshc123
Copy link
Member

@eshc123 eshc123 commented Oct 4, 2024

주요 내용

  • LoginViewModel 에서 Context를 받아서 처리하는 로직이 있어 개선하였습니다.
    • LoginManager 클래스를 만들어 context를 받아서 Google 로그인 관련 로직을 처리하도록 하였습니다.
    • LoginManager의 생성 및 소멸 시점을 LoginScreen과 동일하게 가져가면 될 것으로 판단하여 LoginScreen 내에서 객체를 생성하였고, remember를 사용하여 recomposition 시 재생성을 막도록 하였습니다.
    • LoginData 라는 sealed class를 추가하였습니다. Success인 경우 email를 , Failed 인 경우 Exception을 받을 수 있습니다.

참고

아래는 ViewModel이 Activity의 Context를 참조하면 안되는 이유를 개인적으로 정리하였던 내용인데 공유하면 좋을 것 같아 같이 남겨두었습니다.

ViewModel이 Activity의 Context를 참조하면 안 되는 이유

https://developer.android.com/topic/libraries/architecture/viewmodel?hl=ko#best-practices

ViewModel은 UI 관련 데이터를 관리하고 Configuration Change 시에도 데이터를 유지하도록 설계되었습니다. 이러한 특성 때문 ViewModel은 Activity나 Fragment의 생명주기와 독립적으로 동작합니다. 따라서 ViewModel이 Activity의 Context를 참조하게 되면 다음과 같은 문제가 발생할 수 있습니다:

  • 메모리 누수(Memory Leak): ViewModel은 Activity보다 더 오래 생존할 수 있습니다. 만약 ViewModel이 Activity의 Context를 참조하게 되면, Activity가 소멸된 후에도 ViewModel이 Context를 계속 참조하게 되어 메모리 누수가 발생할 수 있습니다.
  • 생명주기 불일치(Lifecycle Mismatch): Context는 Activity의 생명주기에 종속되지만, ViewModel은 그보다 더 긴 생명주기를 가집니다. 이는 ViewModel에서 Context를 사용할 때 예기치 않은 동작이나 크래시를 초래할 수 있습니다.

@eshc123 eshc123 requested a review from bywindow October 4, 2024 09:51
@eshc123 eshc123 self-assigned this Oct 4, 2024
@eshc123 eshc123 merged commit 4c04010 into dev Oct 28, 2024
1 check passed
@eshc123 eshc123 deleted the refactor/login branch October 28, 2024 12:21
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.

2 participants