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

Feat [#104] 코디네이터 구현 #110

Open
wants to merge 14 commits into
base: develop
Choose a base branch
from
Open

Feat [#104] 코디네이터 구현 #110

wants to merge 14 commits into from

Conversation

Zoe0929
Copy link
Member

@Zoe0929 Zoe0929 commented Nov 15, 2024

👾 작업 내용

화면 전환을 담당하는 코디네이터를 설계했습니다.

  • 빌드 오류가 반복되어서 테스트 전 입니다. 우선 구현 후 로그인 PR 머지 후 테스트 해보겠습니다~

🚀 PR Point

(⭐많은 피드백⭐ 부탁드립니다..)

코디네이터 설계

초반 설계

코디네이터 모듈을 따로 정의, RootFeature에서 View, ViewModel을 주입하려 했음

  • SwiftUI의 App에서 WindowGroup애서 루트 View를 정의해줘야 함. ContentView (현 AppView) 에서 상태에 따라 뷰를 나타내기 위해서는 App에 위치해야 함.
    Flow, Action을 정의하여 Combine으로 그 상태를 관리하려 했음
  • SwiftUI는 상태 기반의 UI 프레임워크로, 화면 전환이나 화면 업데이트를 데이터와 상태 변화에 따라 자동으로 관리
  • 굳이 Action, Flow를 선언해서 지정해줄 필요를 못 느끼게 됨 -> 불필요하게 복잡한 구조

과연 코디네이터가 필요할까?

  • 단순히 네비게이션 해주는 역할이라면 코디네이터가 왜 필요할까에 대해 고민
  • 모듈화된 프로젝트에서는 불필요한 의존성을 피하기 위해 필요하다 느낌
  • 복잡하게 하고 있는 App State 관리도 한 곳에서 담당하게 하기 위함

완성된 구조

  • 따로 모듈을 분리하지 않고 App에 존재 -> App State를 관리하고 NavigationPath 생성하는 역할, 즉 App 에서 루트 뷰를 생성해주는 역할을 해야하기 때문에 최상단에 위치
  • 기본적으로 BaseView는 상태 기반으로 바뀔 수 있도록 CurrentView 변경 로직 구현
  • BaseView 내 에서의 화면 전환 (ex. 챌린지 뷰에서 포인트뷰로 이동 )는 NavigationPath에 append 하는 방식으로 구현
  • 부모 코디네이터의 존재 : 현재로서는 상태 관리가 제일 큰 역할 ( ex. 로그인 이후 상태를 온보딩 또는 탭바로 이동 ) 추후에는 탭바 내에서 다른 탭 아이템으로 이동해야할 때 사용.
  • 같은 코디네이터 내부에서의 이동은 챌린지 모듈 변경 이후 작업. Hashable을 만족하는 Enum 정의 이후 .navigationDestination으로 뷰 빌드 필요
    image

✅ CheckList

  • 오류 없이 빌드되는지 확인
  • 로그용 print문 제거
  • 불필요한 주석 제거
  • 코드 컨벤션 확인

🔗 Issue

Resolved #104

@Zoe0929 Zoe0929 self-assigned this Nov 15, 2024
@Zoe0929 Zoe0929 added 🐰지희 지희의 issue ✨FEAT 기능 구현 labels Nov 15, 2024
Copy link
Member

@kim-seonwoo kim-seonwoo left a comment

Choose a reason for hiding this comment

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

코디네이터.. 깔끔하고 클린.. 수고하셨습니다 👍🙇

Comment on lines +34 to +38
private func showSplashScreen() {
currentView = AnyView(SplashView(coordinator: self)) // 코디네이터 주입

/// 스플래쉬에서 토큰 검사 과정 (혹은 홈뷰 API 호출) 로 로그인 필요 여부 확인
}
Copy link
Member

Choose a reason for hiding this comment

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

이 부분의 토큰 절차를 어디서 처리할지 애매하네요..

Copy link
Member

Choose a reason for hiding this comment

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

아니면 스플래시에서 별도의 체킹 없이
토큰 인터셉터에서 리프레쉬 만료 관련 에러가 뜨면 로그인으로 가게 하면 될까요.?

Copy link
Member

@HELLOHIDI HELLOHIDI left a comment

Choose a reason for hiding this comment

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

월요일 회의때 더 자세히 설명해주시면 감사하겠습니다! 고생했어요!

@Zoe0929 Zoe0929 changed the title [Feat] 코디네이터 구현 Feat [#104] 코디네이터 구현 Nov 18, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
✨FEAT 기능 구현 🐰지희 지희의 issue
Projects
None yet
Development

Successfully merging this pull request may close these issues.

[Feat] 코디네이터
3 participants