티스토리 뷰

TripStyle에서는 TabBarController에서 3개의 탭을 관리하고 있고, 로그인 플로우까지 총 4개의 화면들이 이어진다.

 

탭바 아이템을 클릭했을 때 각각의 모듈의 시작점이 호출되는데, Coordinator 패턴을 통해서 이를 관리하는게 좋을 것 같다고 생각했다.

 

모듈간 의존성을 살펴보면 App (SceneDelegate, AppDelegate) -> Feature (ViewController, ViewModel을 가지고 있는 모듈) 

 

이런 방향으로 되어 있는데, 고민해야 할 부분이 각 화면들의 Coordinator의 적합한 위치와 TabBarCoordinator, AppCoordinator, Coordinator Protocol 들에 대한 위치이다.

 

TabBarCoordinator, AppCoordinator는 모든 Feature들을 알아야한다. 

그렇게 되면 App -> (?) -> Feature 와 같은 모듈이 중간에 하나 더 있어야 한다.

 

그렇게 된다면 App 모듈의 SceneDeleagate에서 (?)에 있는 AppCoordinator 혹은 TabBarCoordinator를 호출하여 앱의 Entry를 지정할 수 있게 된다. 

 

그렇다면 Feature 모듈에 있는 (FeedCoordinator, LoginCoordinator, MyPageCoordinator, ..) 것들은 어떻게 구현해야할까?

현재 모듈 간 의존성을 보면 App -> (TabBarCoordinator, AppCoordinator) -> Feature 의 순으로 되어 있다.

 

모든 Coordinator들이 채택해서 사용할 수 있는 Protocol이 저 모듈 어딘가에 존재해야한다.

 

조건은 Feature에서 사용시, 해당 모듈의 기능을 사용할 수 있게끔 하는 것이 핵심인데, 그럼 Feature에 존재하거나 혹은 Feature 하위 모듈에 존재하면 된다.

 

그렇다면 App -> (AppCoordinator, TabBarCoordinator) -> Feature -> (Coordinator, CoordinatorFinish) 과 같은 모듈간 의존성을 가지면 된다.

 

먼저 TabBarCoordinator를 살펴보면

    private func connectTabCoordinator(of page: TabBarItem, to tabNavigationController: UINavigationController) {
        switch page {
        case .feed:
            let coordinator = DefaultFeedCoordinator(tabNavigationController)
            coordinator.finishDelegate = self
            self.childCoordinators.append(coordinator)
            coordinator.start()
        case .myPage:
            let coordinator = DefaultMyPageCoordinator(tabNavigationController)
            coordinator.finishDelegate = self
            self.childCoordinators.append(coordinator)
            coordinator.start()
        }
    }

TabBarItem을 클릭했을 때, 해당 Item의 Coordinator를 호출해야한다.

 

다음은 AppCoordinator의 코드를 살펴보면

    public func start() {
        showTabBarFlow()
    }
    
    public func showLoginFlow() {
        let loginCoordinator = DefaultLoginCoordinator(self.navigationController)
        loginCoordinator.finishDelegate = self
        loginCoordinator.start()
        childCoordinators.append(loginCoordinator)  
  }
    
    public func showTabBarFlow() {
        let tabBarCoordinator = DefaultTabBarCoordinator(self.navigationController)
        tabBarCoordinator.finishDelegate = self
        tabBarCoordinator.start()
        childCoordinators.append(tabBarCoordinator)
    }

AppCoordinator에서는 TabBarCoordinator와 LoginCoordinator를 알아야한다. (자동로그인 기능)

 

이런 모듈간 의존성을 가지게 구현한다면 Coordinator 패턴을 tuist에 적용할 수 있다..!

 

'[Project] TripStyle' 카테고리의 다른 글

[iOS/Swift] TripStyle 개발 일지 01 (Tuist)  (2) 2023.11.22
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함