Detail View로 화면 전환하는 과정에서 자식 coordinator를 childCoordinators에 넣어 reference count를 증가시켜 pushToDetail(product:) 스코프가 끝나도 deinit 되지 않게 유지해 줍니다. coordinator의 flow가 끝난 경우 finish() 메소드를 통해 childCoordinators에서 제거해 reference count를 감소시켜 deinit 될 수 있게해줍니다.
coordinator들의 finish() 메소드에는 다음 코드들이 반복되고 있었습니다.
CoordinatorProtocol의 extension에 finish() 메소드의 구현부를 추가해 coordinator마다 똑같은 코드가 반복되지 않게 했습니다.
CoordinatorProtocol에 finishDelegate를 추가해줘 부모 coordinator에서 flow가 끝난 coordinator를 제거하는 코드가 반복되지 않게 했습니다.