khanlou 가 고안한 패턴으로 비대해지는 ViewController에서 화면전확 로직을 분리해낸 객체를 coordinator라고 한다. Coordinator는 하나 이상의 ViewController를 제어하며 화면전환을 지시한다.
이러한 문제점들을 해결하기 위해 Khanlou는 Coordinator라는 객체를 ViewController의 상위 객체로 두어 화면전환 로직을 응집도 있게 관리하는 방법을 고안한 것이다.
import UIKit
protocol Coordinator: AnyObject {
var navigationController: UINavigationController? { get set }
var parent: Coordinator? { get set }
var children: [Coordinator] { get set }
func start()
}
extension Coordinator {
func removeFinishedChild(_ child: Coordinator) {
for (index, coordinator) in children.enumerated() {
if coordinator === child {
children.remove(at: index)
break
}
}
}
}
parent
coordinator는 현재 화면을 관리하는 coordinator의 역할이 끝났을 때 removeFinishedChild
메서드를 호출하기 위해 참조가 필요하다. coordinator는 memory leak이 발생할 가능성이 있으므로 주의해서 reference count를 관리해야 한다.