UIKit을 통해 앱을 만들 때 UIViewController는 핵심적인 역할을 한다. 그렇기 때문에 UIViewController에 대한 개념은 너무 자연스럽게 알게 된다. 그래서 그런지 많이 사용하면서도 애플 문서에서 어떻게 설명하는지는 확인해보려고 한적이 없다.
이번에 간단하게 읽어보고 정리해보려고 한다.
The Role of View controllers
- 뷰 컨트롤러는 앱의 사용자 인터페이스를 관리하고 이벤트 처리, 전환 및 관리를 위한 메서드와 속성을 정의한다.
- 앱의 콘텐츠를 관리하거나, 컨테이너 뷰 컨트롤러는 다른 뷰 컨트롤러의 정보를 수집하고 효울적으로 표시하는 역할을 한다.
View Management
- 모든 뷰 컨트롤러에는 하나의 루트뷰가 있다. 이를 통해 해당 뷰 컨트롤러의 콘텐츠를 관리한다.
- 아울렛을 사용하여 뷰 컨트롤러의 뷰 계층 구조 내 다른 뷰에 접근할 수 있으며 주로 스토리보드에서 뷰가 로드될 때 자동으로 연결된다.
- 콘텐츠 뷰 컨트롤러는 자체적으로 모든 뷰를 관리하고, 컨테이너 뷰 컨트롤러는 자신의 뷰와 자식 뷰 컨트롤러들의 루트 뷰를 관리하며, 컨테이너의 디자인에 따라 크기와 이치를 조정한다.
Data Marshaling
- 뷰 컨트롤러는 UIViewController 클래스를 상속받아 사용자 인터페이스를 관리하는 메서드와 속성을 제공한다. 이를 통해 시작적 표현을 조작하고 개발자가 필요한 데이터를 관리할 수 있다.
- 뷰 컨트롤러는 데이터를 중재하는 역할을 하고, 실제 데이터의 처리는 데이터 객체가 담당한다.
User Interactions
- 대부분 터치 이벤트가 발생하면 뷰 컨트롤러가 직접 처리하지 않고 뷰가 처리하고 그 결과를 대리자나 타겟 객체의 메서드로 보고하는데 이 대리나 타겟 객체는 대부분 뷰 컨트롤러이다.
Resource Managerment
- 뷰 컨트롤러는 자신의 뷰와 생성한 객체에 대한 모든 책임을 가진다.
- 대부분의 뷰 관리는 자동으로 처리한다. 예) 더 이상 필요하지 않은 화면 관련 자원은 UIKit이 자동으로 해제한다.
- 메모리가 부족할 때, 시스템은 앱에게 필요없는 자원을 해제하라고 요청하고. 이 때 UIKit이 didReceiveMemoryWarning 메서드를 호출하여 알린다.
didReceiveMemoryWarning는 개발자가 직접 호출할 수 없음. 시스템이 메모리가 부족한 상황에서 자동으로 호출.
Adaptivity
- 다양한 iOS 기기에서 실행될 수 있게 화면 크기 변화에 유연하게 대응할 수 있어야 한다.
- 뷰 컨트롤러는 화면 회전과 같은 세밀한 크기 변화에도 대응할 수 있어야 한다. 이러한 경우 Auto Layout을 사용하여 UIKit이 자동으로 뷰의 크기와 위치를 조정하며, 뷰 컨트롤러는 필요에 따라 추가적인 조정을 수행할 수 있다.
마치면서
View Controller는 앱의 유저 인터페이스를 구성하고 관리하는 핵심 역할을 담당하고 있다. 그리고 View Controller를 통해 다양한 기기와 환경에서 일관된 사용자 경험을 제공할 수 있도록 설계되어 있다. 이러한 View Controller의 기능들을 잘 이용해서 개발하도록 하자!