Diana의 iOS 개발일기

[iOS] - UIViewController란? 본문

iOS

[iOS] - UIViewController란?

Diana_iOS 2022. 5. 16. 21:45

안녕하세요. 오늘은 Swift의 UIViewController에 대해 알아보겠습니다.

UIViewController... 그거죠? 뷰 생성할때 자주보는 그거요! 맞아요 그... ㄱ...

...

네. 제가 바로 이 상태라 개념을 확실히 할 겸 정리해보도록 하겠습니다.

정리, 시작합니다!


UIViewController란?

우선 공식문서를 읽고 시작하겠습니다!

UIViewController는 UIKit 앱에서 뷰의 계층을 관리해주는 객체입니다.

 

UIViewController의 주요 역할은 아래와 같습니다.

  • 데이터의 변화에 따라 뷰의 컨텐츠 업데이트
  • 뷰와 유저의 상호작용에 대한 응답
  • 전반적인 인터페이스 레이아웃 관리와 뷰 리사이징
  • 앱 내부의 다른 객체들과의 조정

여기서 뷰와 유저의 상호작용에 대한 응답? 결국 이벤트 처리를 담당한다는거 같은데 이건 어떻게 이루어지는 걸까요?

해답은 UIViewController가 상속받고 있는 UIResponder에 있습니다.

UIResponder에 대한 내용은 나중에 자세히 다루기로 하고 지금은 간단히 설명해보도록 할게요!

 

 

UIResponder은 UIKit 앱에서 이벤트 핸들링에 대한 백본을 구성하고 있습니다. 

즉, 이벤트가 일어나면, UIKit은 이를 처리하기 위해 앱의 responder 객체들에게 해당 이벤트 전달합니다.

이때, 전달받은 responder 객체가 이벤트를 처리하지 못하면 또 다른 부분으로 이벤트를 전달하게 되는데, UIKit은 미리 정해진 규칙에 따라 리스폰더 체인을 동적으로 관리하여 어떤 객체가 다음으로 이벤트를 전달받을지를 결정합니다.

 

예를 들어 어떠한 View에서 이벤트가 발생했는데 해당 View가 이를 처리하지 못하면 UIKit은 해당 View의 Super View를 찾아 처리되지 못한 이벤트를 전달합니다. 이 Super View도 이벤트를 처리하지 못하면? Super View의 Super View를 찾아 이벤트를 전달하게 되죠.

이렇게 이벤트 처리 대상을 찾기 위해 전달과정이 이어지는 것을 보고 "리스폰더 체인(responder chain)" 이라고 합니다.

 

다시 UIViewController로 돌아오면!

UIViewController은 View에서 발생한 이벤트를 처리하기 위한 UIResponder의 객체로써 뷰 컨트롤러의 루트 뷰와 그 뷰의 슈퍼 뷰 사이의 리스폰더 체인에 삽입되어 이벤트 처리를 담당하는거죠.

여기까지는! UIViewController의 이벤트 처리에 대한 내용이고 또 다른 역할인 View의 계층 관리에 대해 알아보도록 하겠습니다.

 

 

각각의 View Controller은 뷰의 계층을 관리합니다.

 

보통 View Controller은 뷰를 소유하고 있고 해당 뷰를 생성하거나, 소유를 양도하거나, 해당 뷰가 언제 메모리에서 해제될지에 대한 책임을 가지고 있습니다.

우리가 뷰를 스토리보드나 nib 파일로 생성 했을 때 각각의 View Controller 객체는 해당 뷰의 복사본을 자동적으로 소유하게 됩니다.

하지만 수동으로 뷰를 생성 했을 경우 각각의 View Controller은 반드시 고유한 뷰를 가져야 하며 다른 뷰 컨트롤러와 뷰를 공유할 수 없습니다.

 

해당 내용은 공식 문서 내용에 대한 풀이인데 잘 이해가 되진 않지만 View Controller은 뷰에 대한 소유권을 가지고 해당 뷰에 해당하는 하위 뷰들의 생성, 삭제 등의 일련의 과정을 담당하는 듯 합니다.

 

아직 뭔가 명쾌하진 않지만 이후 자료를 더 찾아보며 추가할 내용이 있을 경우 덧붙여보려고 합니다.

여기까지 UIViewController에 대한 정리였습니다.

피드백은 언제나 환영입니다!

'iOS' 카테고리의 다른 글

[iOS] APNs Push시 타이틀 변경  (0) 2023.04.24