코디네이터 패턴을 도입하게 된 이유?

코디네이터 패턴

protocol Coordinatable: AnyObject {
  associatedtype AssociatedCoordinatorType: Coordinator
  
  var coordinator: AssociatedCoordinatorType? { get }
}

Coordinator

import UIKit

public protocol Coordinator: AnyObject {
  // MARK: - Properties
  var parentCoordinator: Coordinator? { get set }
  var childCoordinators: [Coordinator] { get set }
  var navigationController: UINavigationController { get set }
  
  // MARK: - Methods
  func start()
  func didFinish()
}

// MARK: - Default Implementation
public extension Coordinator {
  func addChild(
    _ child: Coordinator
  ) {
    childCoordinators.append(child)
  }
  
  func removeChild(
    _ child: Coordinator?
  ) {
    for (idx, coordinator) in childCoordinators.enumerated() where coordinator === child {
      childCoordinators.remove(at: idx)
      break
    }
  }
}