Search
Duplicate
🛠️

ViewController는 죄가 없다 - 4

Created
2019/06/23
Tags
Architecture
MVC
Programming

한 ViewController에게 모든 View를 Control하게 하지 마세요.

iOS개발자들이 종종 저지르는 실수가, “하나의 ViewController가 하나의 Screen을 담당한다”고 생각해버리는 일입니다. 그러나 ViewController는 View를 Control하는 녀석이지, ScreenController가 아닙니다. 한 화면에는 여러개의 View가 있을 수 있고, 당연히 각각의 View를 Control하는 여러 개의 ViewController가 있을 수 있습니다.
View를 날것으로 쓰지 않고 ViewController와 함께 쓰게 되면, 당연히 ViewWillAppear등의 편리한 API를 함께 사용할 수 있게 되고, 이런 LifeCycle과 얽혀있는 로직들을 상당부분 분리 할 수 있게 됩니다.
스토리보드에서 ContainerView를 써서 ChildViewController의 위치를 설정 할 수 있습니다.
이런 방식은, 특히 복잡한 화면을 만들 때 아주 유용해집니다.
팟캐스트앱의 화면은 아주 복잡합니다. 그리고 스샷에서 서로 다른 색으로 표시한 3개의 화면들이 서로 굉장히 다른 로직 및 임무를 가지고 있음을 알 수 있죠. 이런 경우 이 모든 로직/데이터/UI를 하나의 ViewController에서 다루려고 하면 정말 아주아주 커다란 ViewController가 만들어질 것입니다. 테스트하기 어려운 것은 말 할 것도 없죠.
하지만 만약 각각의 ChildViewController들이 자기 내부의 ViewHierarchy는 자기가 알아서 하게 냅두고, ParentViewController는 ChidViewController들의 상대적인 위치등의 Layout정도만 담당하게 만든다면 훨씬 Seperation of Concern원칙에 들어맞는 코드가 나올 것입니다. 또 샘플앱을 만들어서 각각의 ViewController들을 따로따로 테스트 해보게 될 수도 있죠.
정말정말 괴물같이 복잡한 화면이 있다면, 꼭 ChildViewController로의 분리를 고려해보세요. 아무리 커다란 문제라도, Divide & Conquer한다면 정복 될 수 있습니다.