brunch

You can make anything
by writing

C.S.Lewis

by 윤민섭 Dec 04. 2020

Coordinator Pattern

iOS 화면 전환 분리 패턴

Coordinator Pattern은 view controller들 간의 화면 전환 로직을 조직화하는 디자인 패턴입니다.

즉, 화면 간 연결을 해결할 수 있는 디자인 패턴인 것이죠.


우선 클래스 다이어그램은 아래와 같습니다.


Coordinator 프로토콜의 경우 구체 Coordinator 객체가 반드시 구현해야 하는 부분을 정의합니다. 특히, children과 router라는 관계를 나타내는 프로퍼티를 정의합니다. 또한, presentation 메서드인 present와 dismiss를 갖고 있죠.

Router는 구체 Router가 구현해야 하는 부분을 정의합니다. 특히 present와 dismiss 메서드를 갖고 있습니다. 여기서 구체 Router는 ViewController를 어떻게 보여줄지 알지만, 정확히 어떤 ViewController를 다음에 보여줄지는 모릅니다. 대신, coordinator 객체가 router에게 어떤 ViewController를 보여줘야 할지 알려주죠.

Concrete ViewController는 우리가 알고 있는 ViewController인데 이 ViewController들은 서로를 모릅니다. 대신, 화면이 전환되야할 때 Coordinator에게 위임하죠.


바로 어떻게 사용하는지 보겠습니다. 우선 Router입니다.



클래스 다이어그램엔 Concrete Router가 명시되어 있지만 저는 ViewController의 extension으로 만들어봤습니다. window, navigation controller, view controller 모두 router가 될 수 있게 말이죠.



Coordinator는 어떻게 구현하면 될까요? 클래스 다이어그램과 동일하게 router를 갖고 있고 present와 dismiss 메서드가 있으며, extension으로 present와 dismiss 메서드를 router의 메서드를 사용하도록 만들었습니다.



그렇다면 Coordinator를 사용해서 화면을 보여주겠습니다. 우선, Window부터 보겠습니다.



이제 AppDelegate는 window의 rootViewController 설정에는 관여하지 않습니다. ApplicationCoordinator가 처리하도록 위임한 것이죠. 다른 Coordinator를 만들어보겠습니다.



만약 다음 화면을 present로 보여주고 싶다면? Coordinator의 Router만 변경해주면 됩니다.

이렇게 화면 전환 로직을 분리할 수 있게 됐습니다. 가벼운 ViewController를 만들 수 있게 된 것이죠.


간단한 예제지만 더 복잡한 상황에서 잘 쓸 수 있는지 확인이 필요할 것 같습니다.


읽어주셔서 고맙습니다.



Raywenderlich의 Design Patterns by Tutorials를 참고했습니다.

https://www.raywenderlich.com/books/design-patterns-by-tutorials/v3.0



매거진의 이전글 Command Pattern
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari