Bibi's DevLog 🤓🍎

Container View Controller 컨테이너 뷰 컨트롤러 본문

📱🍎 iOS

Container View Controller 컨테이너 뷰 컨트롤러

비비 bibi 2022. 4. 6. 23:03

Container View Controller 컨테이너 뷰 컨트롤러

https://woozzang.tistory.com/145

ViewController의 두 종류

Content View Controller 컨텐츠 뷰 컨트롤러

  • 일반적인 뷰 컨트롤러.
  • 앱 내 데이터를 화면에 보여주는 등의 역할
  • UIViewController를 직접 서브클래싱해 커스텀해 사용

Container View Controller 컨테이너 뷰 컨트롤러

  • 여러 요소를 조합한 인터페이스를 구성
  • 보통 무언가를 직접 보여주는 역할이 아니라, 뷰 컨트롤러 간에 부모-자식 관계를 형성하여 고유의 방식으로 자식을 관리하는 역할의 뷰 컨트롤러.
  • 자식 뷰 컨트롤러들의 참조를 가지고 관리한다.

즉 Container View Controller가 Content View Controller들을 관리한다.

왜 Container View Controller를 쓰는가?

: navigation 로직을 분리하여 단일 책임원칙을 지키려는 시도이다.

"promote better encapsulation by separating out your content from how you display that content onscreen"

일반적인 MVC 패턴에서, 뷰 컨트롤러가 너무 많은 책임을 담당하게 되어 massive view controller가 되는 문제. (의존성 주입과 화면을 그리는 역할을 동시에 하는 등)

책임이 많으면 유지보수와 테스트가 어렵다

뷰 컨트롤러의 여러 책임 중 "화면에 표시해주는 책임"을 다른 객체로 분리해 낸 것이 컨테이너 뷰 컨트롤러이다.

Custom Container View Controller & System Container View Controller 커스텀 컨테이너 뷰 컨트롤러와 시스템 컨테이너 뷰 컨트롤러

UIContainerViewController같은 클래스는 없다. 컨테이너 뷰 컨트롤러는 하나의 개념일 뿐이다.

컨테이너 뷰 컨트롤러 사용을 위해서는 기존에 존재하는 클래스들을 이용해 커스텀 구현하거나(Custon Container View Controller), 만들어져 있는 몇 종류의 컨테이너 뷰 컨트롤러를(System Container View Controller) 사용해야 한다.

Custom Container View Controller 커스텀 컨테이너 뷰 컨트롤러

  • 커스텀 UIViewController를 서브클래싱해, 기존 클래스들로 컨테이너 뷰 컨트롤러 역할을 할 수 있다.
  • 커스텀 컨테이너 뷰 컨트롤러의 인터페이스를 구성하는 것은 커스텀하는 사람의 몫이다.
  • ex : 자식 뷰 컨트롤러의 화면을 그대로 보여주거나, 원하는 레이아웃을 설정해 보여주거나, 미리 구현된 Container View를 사용할 수도 있다.
  • [공식문서]커스텀 컨테이너 뷰 컨트롤러 만들기

System Container View Controller 시스템 컨테이너 뷰 컨트롤러

  • 미리 만들어진 특정 방식의 컨테이너 뷰 컨트롤러

  • 각자의 방식대로 하위 뷰 컨트롤러들을 관리함

  • 각 컨테이너 뷰 컨트롤러들의 특정을 이해하고 용도에 맞게 사용

    • UINavicationViewController

    • UITabBarViewController

    • UISplitViewController

Container View 컨테이너 뷰

: 인터페이스 빌더에서만 추가할 수 있는, 일종의 프록시 뷰.

A container view is a proxy view that stands in for the content of a child view controller.

컨테이너 뷰는 자식 뷰 컨트롤러의 내용을 나타내는 프록시 뷰이다.