(언젠가부터 애플 공식 MVC 문서에는 Retired Document 라는 경고 팝업이 뜬다.)

프로토타입용으로 만드는 iOS 앱이 아니라 사업에 중요한 앱이라면 Cocoa MVC를 벗어나야 한다.

가장 큰 이유는 testability다. MVC는 여러 이유로 커버리지를 확보하기 쉽지 않고, 또한 SOLID를 지키는거보다 안지키는게 더 쉬운 아키텍처다. 애초에 초보자도 쉽게 iOS개발을 시작할 수 있게 만들어놓은 구조에 너무 많은걸 바라면 안된다.

Cocoa MVC로 테스트도 잘하고 SOLID도 지키려면 뷰컨트롤러를 뷰 계층으로 취급하고 UIKit에 의존성 전혀 없는 컨트롤러 부분을 새로 정립해야 한다. 추가적으로 (SwiftUI가 아닌) UIKit을 쓴다면 라우팅 로직도 별도 계층으로 따로 빠지는게 좋고.

이렇게까지 대규모 공사를 해서 MVC를 쓸 바에야 이미 한번 개조되고 커뮤니티의 검증 받은 MVVM, VIPER, RIBs, VIP 등으로 시작해서 조금씩 변형시키는게 더 합리적인 선택이 아닐까. 불필요한 시행착오를 줄이고 시간을 아낄 수 있을 거다.

P.S. SwiftUI 시대가 도래하면 속칭 라우터가 있는 아키텍처는 쓸모 없어질 것 같다. 뷰모델의 상태값을 바꾸는 행위만으로 라우팅이 되기 때문에 별도 계층으로 분리하는게 무의미하다. 현재 가장 인기 많지만 라우터가 없는게 약점으로 꼽히는 MVVM은 라우터가 불필요해진 SwiftUI 시대가 오면 더 인기가 많아질 것 같은데(사실상 새로운 표준이 될 것 같다) 과연 VIPER, RIBs 등등의 자리는 어떤 새 아키텍처가 꿰차게 될까. 어느 아키텍처가 과도기에 매끄러운 전환을 지원할 것인가.

참고자료
https://nalexn.github.io/clean-architecture-swiftui/ https://slideslive.com/38897361/good-ios-application-architecture-en http://merowing.info/2016/01/improve-your-ios-architecture-with-flowcontrollers/