[iOS] Coordinator Pattern

someng·2023년 3월 28일
0

iOS

목록 보기
30/33
  • Coordinator: 움직임을 조정하는 사람
  • Coordinator Pattern: view controller로 부터 화면 전환의 부담을 줄여주고, 화면 전환을 보다 더 관리하기 쉽도록 도와주기 위한 패턴

Coordinator Pattern 등장 배경

Coordinator Pattern은 2015년, Soroush KhanlouThe Coordinator라는 글을 쓰면서 소개된다.

Massive View Controller의 가장 큰 문제 중 하나는 flow logic(흐름 로직)business logic이 얽혀있다는 것이다.

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    let object = self.dataSource[indexPath]
    let detailViewController = SKDetailViewController(with: object)
    self.navigationController?.present(detailViewController, animated: true, completion: nil)
}

TableViewCell을 클릭하면 호출되는 didSelectRowAt 메소드이다.

  1. 객체를 가져온다
    → 첫번째 줄은 괜찮다.
    datasource는 viewController의 논리적인 자식이며, 참조해야하는 객체를 요청하고 있다.

  2. ViewController를 만든다.
    → 여기서부터 문제가 생기기 시작한다.
    ViewController는 flow의 다음 단계를 “인식”하게 된다.

  3. ViewController를 보여준다.
    → 여기서부터는 완전히 벗어나는 곳.
    ViewController는 이제 부모까지 잡는다.
    부모 ViewController에게 해야할 일에 대한 정확한 메세지를 보내고 있다.
    (한마디로 부모에게 이래라 저래라 하고 있다는 것)

더 큰 문제는 이러한 flow logic이 여러 ViewController에 분산되어 있을 수 있다는 것이다.

ViewController 기본 클래스는 UI로 시작되며(UIViewController),
View객체이고,
사용자 흐름을 처리하는 것은 범위(scope)를 벗어난다!

➡︎ ViewController를 높은 수준의 객체로 관리하게 되면 많은 이점을 얻는다.

Khanlou는 이 높은 수준의 객체를 Coordinators 또는 Directors라고 부르기로 한다.

Coordinator Pattern 구조

AppDelegate(SceneDelegate)AppCoordinator를 유지하며, 모든 Coordinator에는 일련의 하위 Coordinator가 있다.

출처: https://zeddios.medium.com/coordinator-pattern-bf4a1bc46930

profile
👩🏻‍💻 iOS Developer

0개의 댓글