- Coordinator: 움직임을 조정하는 사람
- Coordinator Pattern: view controller로 부터 화면 전환의 부담을 줄여주고, 화면 전환을 보다 더 관리하기 쉽도록 도와주기 위한 패턴
Coordinator Pattern은 2015년, Soroush Khanlou가 The 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
메소드이다.
객체를 가져온다
→ 첫번째 줄은 괜찮다.
datasource
는 viewController의 논리적인 자식이며, 참조해야하는 객체를 요청하고 있다.
ViewController를 만든다.
→ 여기서부터 문제가 생기기 시작한다.
ViewController는 flow의 다음 단계를 “인식”하게 된다.
ViewController를 보여준다.
→ 여기서부터는 완전히 벗어나는 곳.
ViewController는 이제 부모까지 잡는다.
부모 ViewController에게 해야할 일에 대한 정확한 메세지를 보내고 있다.
(한마디로 부모에게 이래라 저래라 하고 있다는 것)
더 큰 문제는 이러한 flow logic이 여러 ViewController에 분산되어 있을 수 있다는 것이다.
ViewController 기본 클래스는 UI로 시작되며(UIViewController),
View객체이고,
사용자 흐름을 처리하는 것은 범위(scope)를 벗어난다!➡︎ ViewController를 높은 수준의 객체로 관리하게 되면 많은 이점을 얻는다.
Khanlou는 이 높은 수준의 객체를 Coordinators
또는 Directors
라고 부르기로 한다.
AppDelegate(SceneDelegate)
는 AppCoordinator
를 유지하며, 모든 Coordinator에는 일련의 하위 Coordinator
가 있다.
출처: https://zeddios.medium.com/coordinator-pattern-bf4a1bc46930