앱 화면의 콘텐츠를 표시하는 로직과 관리를 담당하는 객체를 무엇이라고 하는가?

seuhong·2024년 1월 23일
0

iOS interview Question

목록 보기
4/11
post-thumbnail

답변


=> UIViewController
ViewController는 뷰의 계층구조를 관리하며 데이터가 변경됨에 따라 소유하는 뷰의 컨텐츠를 업데이트하는 로직을 관리 할 수 있음.

또한 UIResponder의 객체로써 하위 계층의 이벤트 체인에 따라 사용자와 상호작용하여 이벤트를 처리할 수 있음.


UIViewContorller

UIKit 앱의 뷰 계층 구조를 관리하는 *UIResonder의 객체.

뷰의 사용자 상호작용에 응답하며 전체 인터페이스의 레이아웃을 관리함.

데이터가 변경되면 뷰의 콘텐츠를 업데이트 할 수 있음.

컨텐츠는 UIView로 구성되며 UILabel, UIButton 등과 같은 UIView 타입의 컴포넌트들이 UIViewController에서 관리될 수 있음.


View Management

  • 가장 중요한 역할로써 뷰의 계층을 관리함.
  • 모든 뷰컨트롤러마다 RootView를 지니며, 화면에 표시하기 위해서는 해당 RootView 계층에 속해야함
  • ViewController에는 두 가지 타입이 존재함
    • Content View Controllers
      • 모든 뷰를 단독으로 관리함
      • UIViewController, UITableViewController, UICollectionViewController등
    • Container View Controllers
      • 자체 뷰 + 하나 이상의 Child View Controller가 가진 루트뷰를 관리함
      • 컨테이너에는 컨텐츠를 관리하는 것이 아니라 루트뷰를 관리하며 컨테이너 디자인에 따라 크기를 조정함
        • Child View Controller의 내용을 관리하지는 않고, 크기 조정 및 배치만 관리함.
        • 실제 화면 구성과 이벤트 관리는 Child View Controller 에서 이뤄짐
      • • UINavigationController, UITabbarController, UIPageViewController 등
    • https://developer.apple.com/documentation/uikit/view_controllers/
      에서 Content View Controller와 Container View Controller를 정의하고 있음

Data Marshaling

  • 자신이 관리하는 View와 Data간 중개 역할 (MVC)
  • 객체의 메모리 구조를 저장이나 전송을 위해서 적당한 자료형태로 변형함

User Interactions

  • Responder 객체로써 유저와 상호작용 할 수 있음.
  • 직접 이벤트를 받아서 처리하는것이 가능하나 일반적으로 지양됨 → 왜?
  • 뷰의 터치 이벤트와 같은 것들을 객체(보통 뷰컨트롤러)에 action 메서드나 delegate로 전달

Resource Management

  • 뷰컨트롤러가 생성한 모든 뷰와 객체들은 뷰컨트롤러의 책임
  • UIViewController의 생명주기에 따라서 생성되었다가 자동소멸되기도 하며 ARC 개념에 맞게 관리가 필요함

Adaptivity

  • 뷰컨트롤러는 뷰의 표현을 책임지며 현재 환경에 따라 적절하게 컨텐츠를 표현함
  • ex) 가로, 세로화면의 디바이스 방향 또는 디바이스 크기에 따라 UI 요소를 선택적으로 표시하거나 조절함

https://jinshine.github.io/2018/06/04/iOS/UIViewController/


*UIResponder

: 이벤트에 응답하고 처리하기 위한 추상 인터페이스

@MainActor
class UIResponder : NSObject

UIApplication, UIViewController, UIView 등의 핵심 객체들은 모두 리스폰더임.

이벤트(터치, 모션, 제어 등)가 발생하면 UIKit,은 이를 처리할 수 있도록 앱의 리스폰더 객체에 전달함.
(즉, UIApplication, UIViewController, UIView가 발생한 이벤트를 다룰 수 있게됨)

  • 이벤트 처리 해당 이벤트를 통해 적절하게 앱의 인터페이스를 업데이트 해야함.
  • Responder Chain 리스폰더는 처리되지 않은 이벤트를 앱의 다른 부분으로 전달하는 작업 또한 관리함.
    해당 리스폰더가 이벤트를 처리하지 않을 경우 다음 리스폰더에게 이벤트를 전달함.
    (ex. 뷰는 이벤트를 상위 뷰로 전달하고 해당 계층구조의 루트뷰는 해당 이벤트를 뷰컨트롤러로 전달하여 처리하도록 함) Untitled → 예를 들어, UITextField가 이벤트를 처리하지 않으면, 상위 UIView로 이벤트를 보내고 해당 뷰를 소유한 UIViewController에게 이벤트를 전달함. https://developer.apple.com/documentation/uikit/touches_presses_and_gestures/using_responders_and_the_responder_chain_to_handle_events
profile
완씨의 개발기록

0개의 댓글