[WeTri] 하나의 뷰컨에 여러가지 역할을 가져도 될까?
해당 게시글은 네이버부스트캠프에서 그룹 프로젝트를 진행하며 기록하는 내용입니다.
틀린 내용이 있을 수 있습니다.
저희 프로젝트는 WeTri입니다.
많이 구경하러 와주세요!
https://github.com/boostcampwm2023/iOS08-WeTri
고민의 시작은 하나의 뷰컨이 여러가지 책임을 갖게되는 것이 과연 올바른가에 대해서 시작했습니다.
저희팀은 뷰를 처리하는 로직에는 MVVM-C 아키텍처를 사용하고 있는데요.

여기서 문제는 Custom Calendar와 아래 기록 목록을 표시해주는 부분이 서로 다른 역할을 하는것 같았습니다 🤔
Calendar만 하더라도 다양한 로직이 들어가야 하기 때문에, ViewModel과 ViewController에 들어가는 Code의 양이 많아지고 비대해질것 같다고 생각했습니다.
또한, 하나의 ViewController에 역할이 2가지로 나뉠 수 있다고 생각했습니다.
그래서 아래처럼 구조를 짜볼 수 있겠다고 생각하게 됐습니다.
그래서 ContainerViewController를 하나 만들고 해당 Container에 두개의 ViewController를 추가하여 처리하였습니다.
우선 해당 뷰컨트롤러들의 View를 AutoLayout을 통해 처리하기 위해 아래와 같이 처리해줬습니다.
let recordCalendarViewController = RecordCalendarViewController()
guard let calendarView = recordCalendarViewController.view else { return }
calendarView.translatesAutoresizingMaskIntoConstraints = false
add(child: recordCalendarViewController)
NSLayoutConstraint.activate([
/// 오토레이아웃 처리
])
let recordListViewController = RecordListViewController()
guard let listView = recordListViewController.view else { return }
listView.translatesAutoresizingMaskIntoConstraints = false
add(child: recordListViewController)
NSLayoutConstraint.activate([
/// 오토레이아웃 처리
])
아래는 Container ViewController에 child ViewController를 추가해주는 로직입니다.
func add(child viewController: UIViewController) {
addChild(viewController)
view.addSubview(viewController.view)
viewController.didMove(toParent: viewController)
}
정리해보자면, 1개의 ContainerViewController를 두고 그 안에 2개의 뷰컨트롤러를 둬서 역할을 분리해줬는데요!
이렇게 분리하면 각 ViewController간의 역할과 책임도 명확해지고 많은 양의 코드로 인해 비대해지는 ViewModel이나 ViewController를 분리할 수 있으니 좋았던 것 같아요!
잘 돌아가는게 보이시죠?
앞으로 애용해야할 것 같네요 🤩
혹시 더 자세한 코드가 궁금하시다면 저희 프로젝트에 놀러오세요~