본문 바로가기

카테고리 없음

[iOS] View 계층구조

앱 생명주기와 AppDelegate SceneDelegate에 이어서 뷰 계층구조를 공부하고자 한다

 

window, scene, view 용어가 익숙하지만 스스로 설명하기 어렵다는 점을 인지하면서

공부의 필요성을 느꼈다 ㅠㅠ

용어 개념을 먼저 보고 계층구조도 자연스럽게 익혀보자,, 총총

 

용어정리

각 용어의 개념은 다음과 같다

view

iOS에서 UI를 구성하는 기본 단위는 view 이고, view들은 계층적으로 구성될 수 있다

view는 콘텐츠를 담아 스크린에 표시하고 사용자의 입력에 반응하는 객체이다

view는 UIView 클래스를 상속한 클래스로 구현된다

 

window

window는 스크린을 채우기 위한 객체로 항상 유저 인터페이스 표현 계층의 최상위에 위치한다

view의 일종이지만 직접 컨텐츠를 가지고 있지 않고 대신 콘텐츠를 지닌 view를 내부에 배치해 화면에 출력한다

모든 어플리케이션은 최소한 하나 이상의 window를 가지고 있고, 앱을 종료하는 경우에만 사라진다.

 

iOS 13 이전에는 하나의 앱에 하나의 window!

그 이후부터는 멀티 태스킹이나 외부 기기 연결과 같은 기능을 위해 다중 window도 지원!

 

scene

Scene은 앱 UI의 한 인스턴스를 나타내는 객체이다

하나의 앱이 여러 개의 UI 인스턴스를 동시에 실행할 수 있게 해주는 개념으로 iOS 13 이후 등장했다

 

 

View 계층구조

이제 계층구조에서 하단부터 살펴보면 다음과 같다

 

UIView

콘텐츠를 담은 view를 스크린 상에 표시하고, 사용자의 입력에 반응한다

 

UIWindow

콘텐츠를 가진 뷰를 내부에 배치하여 화면에 출력하는 역할을 수행한다

 

UIViewController

window와 view는 ViewController를 통해 연결 될 수 있다

ViewController는 view의 계층을 관리하여 window에 전달한다

또한, touch event를 window로부터 전달받아 처리하는 역할을 수행한다

 

window가 view를 직접 참조 X

window와 view 사이에서 중간다리 역할인 셈이다

 

UIWindowScene

UIScene의 서브클래스로 하나 이상의 window를 관리한다

UIWindowScene => windows: [UIWindow]

 

UIScene (최상위)

화면의 컨텐츠를 표현하고 view를 관리한다

대부분의 ViewController들은 각자 하나씩의 화면을 담당하고, 화면의 컨텐츠를 표현하고 view를 관리하며 이를 scene이라고 한다

보통 하나의 scene을 표현할 때 하나의 viewController이 사용된다

 

UIScene은 UIResponder의 서브 클래스며 사용자의 이벤트를 처리한다

모든 scene은 연관된 delegate 객체를 가지고 있고, UISceneDelegate 프로토콜을 사용한다

obeserver를 등록해 noti를 보낼 수도 있다

 

 

 

그림으로 표현하면 다음과 같다

그리고 이 그림 전체가 하나의 scene이다!

 

요약

UIScence

UIWindowScene (해당 Scene의 window 관리)

UIWindow (view 계층 구조의 컨테이너) 

UIViewController (view 로직 관리) 

 

UIView (실제 UI 컴포넌트)

 

 

 

+

어떤 view가 view를 포함하고 있다면, 이는 SuperView(슈퍼 뷰)가 되는 것이고,

SuperView에 포함된 View는 SubView(서브 뷰)가 된다.

 

 

최근 면접 때 View의 구조를 설명해라고 했는데, SwiftUI 만 하다보니 stack처럼 쌓이는 것,, Superview 정도만 말했었다

그런데 알고 보니 정말 많았네,, 화이팅..!

 

 

 

 

Reference

1. https://velog.io/@ellyheetov/iOS-뷰의-계층-구조

2. https://superohinsung.tistory.com/143