Skip to content

Conversation

@theBettor
Copy link
Collaborator

🤷‍♂️ PR 내용(Issue 꼭 달기!)

theBettor added 14 commits May 2, 2025 20:48
…ute로 바꿔줬다. Screen에서는 2개의 파라미터를 요구하는데, Route는 요구하지 않는다.
1. Route는 무조건 만들자.
Screen은 UI 구성과 사용자 상호작용만 담당하고,
Route는 ViewModel과 이벤트 흐름을 관리하므로,
유지보수성, 테스트 가능성, 재사용성이 모두 높아집니다.

2. Uri 처리 방식
제일 좋은 방법: Uri와 화면 전환 로직을 하나의 함수로 묶어서 처리
이유:
단일 책임 원칙(SRP):

각 함수가 하나의 일을 잘 하도록 합니다. onEnterSpaceScreenRequest는 이제 이미지 선택 및 화면 전환을 모두 처리합니다.

Uri를 전달하고, 이를 기반으로 화면 전환을 처리하기 때문에, 여러 함수가 하나의 책임을 나누지 않고 서로 다른 역할을 하게 됩니다.

직관적인 코드:

profileImageUri와 onEnterSpaceScreenRequest가 하나로 묶이면, 이미지 선택 및 화면 전환 흐름을 읽기 쉽고 유지보수도 편리합니다.

Uri만 넘겨주는 방식으로, 필요한 데이터를 한 번에 전달할 수 있습니다.

직관적인 화면 전환:

이미지를 선택하고 나서 바로 화면을 전환하는 방식이 매우 자연스럽고 사용자가 UI와 상호작용하는 방식이 일관적입니다.

구조적으로 간결:

별도의 상태 관리를 하는 것보다, Uri를 한 번만 넘겨주고 그에 맞게 화면 전환을 처리하는 방식이 코드가 깔끔하고 직관적입니다.

장점 정리:
한 번의 함수 호출로 모든 처리가 가능: onEnterSpaceScreenRequest가 Uri를 받으므로, 이미지 선택 및 화면 전환을 간단히 처리할 수 있습니다.

명확한 역할 분리: 이미지를 선택하는 것과 화면 전환 로직을 별도로 나누지 않기 때문에 코드의 흐름을 이해하기 쉽고, 기능 수정이 필요할 때 더 유연합니다.

사용자 경험(UX): 사용자가 이미지를 선택하고 바로 다음 화면으로 넘어가는 경험을 제공하므로 더 직관적인 흐름을 보장합니다.

결론:
profileImageUri와 onEnterSpaceScreenRequest를 하나의 파라미터로 묶어서 Uri를 넘겨주는 방식이 가장 직관적이고, 유지 보수가 용이한 방법입니다. 이 방식은 코드가 깔끔하고, 흐름을 이해하기 쉽습니다.

3. rememberAsyncImagePainter
- profileImageUri가 null일 경우 기본 이미지 보여줌
- 로딩 중일 때도 placeholder 보여줌
- 실패했을 때 error image 보여줌

4. 이미지를 바로 UI에 반영
private val _profileImageUri = mutableStateOf<Uri?>(null)
    val profileImageUri: State<Uri?> = _profileImageUri

    fun updateProfileImage(uri: Uri) {
        _profileImageUri.value = uri
    }
이렇게 하면 Composable에서 viewModel.profileImageUri.value가 변할 때 자동으로 UI가 리컴포지션됩니다.
단일 뷰모델을 사용하려고 했으나 어려워서 2개로 분리..
@theBettor theBettor requested review from DJDrama and agvber May 15, 2025 08:36
@theBettor theBettor self-assigned this May 15, 2025
@theBettor theBettor added the Refactor 코드 리팩토링 label May 15, 2025
Copy link
Member

@agvber agvber May 15, 2025

Choose a reason for hiding this comment

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

해당 파일은 수정되지 않았는데 같이 수정된 것 같습니다
깔끔한 commit 기록이 남기기 위해서 수정된 부분 복구 부탁드려요!

@agvber
Copy link
Member

agvber commented May 15, 2025

초대코드 api 생성은 어떻게 하면 좋을지 궁금합니다.

해당부분은 사실 그룹 생성 후 랜덤 숫자를 생성해서 초대코드를 생성 하였습니다.
그냥 임의로 보여주면 되기 때문에 단순해서 제가 수정하도록 하겠습니다!

@theBettor theBettor merged commit 08462f9 into develop May 16, 2025
1 check passed
@theBettor theBettor deleted the refactor/onboarding_finishing branch May 16, 2025 09:16
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Refactor 코드 리팩토링

Projects

Status: No status

Development

Successfully merging this pull request may close these issues.

❗️💥🚀 온보딩 찐막 마무리

3 participants