티스토리 뷰

반응형
 

iOS에서 UIScene, UIWindow, UISceneWindow는 모두 앱의 사용자 인터페이스를 관리하는데 사용되는 객체이지만, 그 역할과 용도에는 차이가 있습니다. 각각을 하나씩 설명해 드릴게요.

1. UIWindow

  • 설명: UIWindow는 iOS 애플리케이션에서 화면에 표시되는 콘텐츠의 기본 컨테이너입니다. 화면에 표시되는 모든 뷰는 UIWindow에 포함되어야 합니다. 일반적으로 iOS 앱은 하나의 메인 윈도우를 갖지만, 여러 윈도우를 가질 수도 있습니다.
  • 주요 역할:
    • 뷰 계층 구조의 루트로서 역할하며, 뷰를 관리하고 화면에 렌더링합니다.
    • 터치 이벤트를 처리하고 전달합니다.
    • 보통 앱의 생애 주기 동안 유지되며, 보통 AppDelegate에서 window 프로퍼티로 참조됩니다.

2. UIScene

  • 설명: UIScene은 iOS 13에서 도입된 개념으로, 앱의 여러 인스턴스나 화면, 멀티태스킹을 지원하기 위한 프레임워크입니다. UIScene은 앱의 특정한 사용자 인터페이스를 나타내며, 앱이 여러 개의 독립적인 화면 상태를 가질 수 있게 합니다.
  • 주요 역할:
    • iPadOS의 멀티 윈도우 기능을 지원하기 위해 앱의 여러 장면(scene)을 관리합니다.
    • UISceneDelegate를 통해 개별 장면의 생명 주기를 관리합니다.
    • 앱이 백그라운드로 들어가거나 포그라운드로 복귀할 때 특정 장면에 대한 이벤트를 처리할 수 있습니다.
  •  

3. UIWindowScene

  • 설명: UIWindowScene은 iOS 13에서 도입된 UIScene의 서브클래스로, 하나 이상의 UIWindow 객체를 포함하여 iOS 앱의 특정 장면(scene)을 관리합니다. 멀티 윈도우 및 멀티태스킹을 지원하기 위해 사용됩니다.
  • 주요 역할:
    • UIWindow의 그룹을 관리하며, 각 UIWindowScene은 해당 장면(scene)과 관련된 윈도우들을 포함합니다.
    • UIWindowSceneDelegate를 통해 각 장면에 대한 생명 주기 이벤트를 처리합니다.
    • iPadOS와 같은 환경에서 멀티태스킹 및 멀티 윈도우를 지원하는 기능을 제공합니다.
    • 앱이 여러 개의 독립적인 UI 상태(예: 여러 개의 문서 창 또는 여러 개의 화면)를 가질 수 있도록 합니다.

요약

  • UIWindow는 화면에 표시되는 콘텐츠의 기본 컨테이너입니다.
  • UIScene은 앱의 여러 UI 상태(장면)를 관리하는 객체입니다.
  • UIWindowScene은 UIScene의 서브클래스로, 특정 장면의 윈도우들을 관리하며, 여러 윈도우를 지원하기 위한 기능을 제공합니다.

따라서, UIWindowScene은 여러 UIWindow를 관리하며, 멀티 윈도우 및 멀티태스킹을 구현하는 데 핵심적인 역할을 합니다.

 

 

UIWindow와 UIScene의 차이를 보다 쉽게 이해할 수 있도록 설명해 볼게요.

1. UIWindow란 무엇인가?

  • 정의: UIWindow는 화면에 보이는 모든 뷰(View)의 컨테이너 역할을 하는 객체입니다. 화면에 표시되는 모든 콘텐츠는 UIWindow에 속해 있어야 합니다.
  • 역할:
    • 앱의 사용자 인터페이스(UI)를 화면에 표시하는 역할을 합니다.
    • 모든 뷰(View)와 뷰 컨트롤러(ViewController)는 UIWindow 내에 포함됩니다.
    • 터치 이벤트와 같은 사용자 상호작용 이벤트를 처리하고 전달합니다.
  • 예시:
    • 일반적인 iOS 앱에서, UIWindow는 하나의 창을 의미하며, 이 창이 사용자가 보고 상호작용하는 모든 UI 요소를 포함합니다.

2. UIScene란 무엇인가?

  • 정의: UIScene은 iOS 13에서 도입된 새로운 개념으로, 앱의 여러 사용자 인터페이스 상태(즉, 여러 창이나 여러 화면 상태)를 관리하기 위한 객체입니다.
  • 역할:
    • 앱이 여러 창이나 UI 상태를 가질 수 있도록 지원합니다.
    • 각각의 UIScene은 앱의 특정한 인터페이스 상태를 나타내며, 각 UIScene은 독립적으로 관리됩니다.
    • UIScene은 앱의 여러 화면 상태를 관리하는 객체로, 앱이 활성화되거나 비활성화될 때 이를 관리하는 생명 주기(lifecycle) 이벤트를 처리합니다.
  • 예시:
    • iPad에서 동일한 앱을 두 개의 창으로 열 수 있다면, 각 창은 서로 다른 UIScene 객체에 의해 관리됩니다.

UIWindow와 UIScene의 차이점 요약

UIWindowUIScene
역할 화면에 표시되는 모든 뷰의 컨테이너 앱의 여러 UI 상태(장면)를 관리
수량 보통 앱당 하나의 윈도우 (하지만 여러 개 가능) 앱당 여러 개의 UIScene을 가질 수 있음
사용 목적 콘텐츠의 렌더링과 사용자 이벤트 처리 멀티 윈도우 및 멀티태스킹 기능 지원
생명 주기 앱의 생명 주기에 종속됨 각 UIScene마다 독립적인 생명 주기 관리
도입 버전 iOS의 초기부터 존재 iOS 13부터 도입

UIScene이 도입된 이유

  • UIWindow는 앱의 전체 인터페이스를 관리하는 데 충분했지만, iPadOS에서 멀티 윈도우 지원이 도입되면서, 앱이 동시에 여러 개의 윈도우를 가질 수 있게 되었습니다. 이를 위해 각 윈도우의 상태를 독립적으로 관리할 수 있는 UIScene이 필요하게 되었습니다.
  • UIScene을 통해 앱은 각각의 윈도우 상태를 독립적으로 관리하고, 사용자가 각각의 창에서 다른 작업을 수행할 수 있도록 지원합니다.

비유를 통해 이해하기

  1. **UIWindow는 건물의 "방"**과 같습니다.
    • 이 방은 내부에 여러 가구(뷰)를 가지고 있고, 특정한 레이아웃으로 정리되어 있습니다.
    • 방은 건물의 일부이며, 건물 전체의 특정 부분을 차지하고 있습니다.
  2. **UIScene은 건물의 "층"**과 같습니다.
    • 각 층은 여러 개의 방(UIWindow)을 가질 수 있습니다.
    • 각 층은 독립적으로 관리되며, 각기 다른 상태를 가질 수 있습니다.
    • 예를 들어, 1층은 고객 서비스 창구를 위한 공간일 수 있고, 2층은 사무실 공간일 수 있습니다. 각 층의 상태는 서로 다르고 독립적으로 존재합니다.

이제 UIWindow와 UIScene의 차이를 좀 더 명확하게 이해할 수 있을 거라고 생각해요. 더 궁금한 점이 있으면 알려주세요!

 

 

 

UIScene안에 UIWindow가 있는건가 그럼?
 

ChatGPT의 말:

ChatGPT

네, 맞습니다! UIScene 안에 UIWindow가 있는 구조입니다. UIScene은 애플리케이션의 특정 사용자 인터페이스 상태를 나타내는 객체이고, 이 UIScene 안에는 하나 이상의 UIWindow가 포함될 수 있습니다. 각 UIWindow는 해당 UIScene에 속한 뷰를 화면에 표시하는 역할을 합니다.

UIScene과 UIWindow의 관계

  • **UIScene**은 애플리케이션의 여러 사용자 인터페이스 상태(즉, 여러 화면이나 창 상태)를 관리하기 위한 객체입니다.
  • **UIWindow**는 화면에 표시되는 콘텐츠를 포함하는 객체로, UIScene의 일부로 속해 있습니다.
  • 결론적으로, UIScene은 UIWindow를 포함하고 관리하는 상위 개념입니다.

어떻게 동작하나요?

  1. 앱 실행 시 기본 UIScene 생성
    • 앱이 시작될 때, 하나의 기본 UIScene이 생성됩니다. 이 UIScene은 앱의 초기 사용자 인터페이스 상태를 관리합니다.
    • 각 UIScene은 적어도 하나의 UIWindow를 가지고 있습니다. 이 UIWindow가 사용자가 보게 되는 모든 뷰(View)와 화면 콘텐츠를 포함하게 됩니다.
  2. 추가적인 UIScene 생성
    • 예를 들어, iPad에서 사용자가 앱을 두 개의 독립적인 창으로 열었다고 가정해 보겠습니다.
    • 이 경우, 두 개의 UIScene이 생성되며, 각 UIScene은 각각의 창을 관리하게 됩니다.
    • 각 UIScene 내에는 해당 창에 대한 UIWindow가 있으며, 서로 다른 상태와 UI를 가질 수 있습니다.

관계 시각화

애플리케이션
└── 여러 개의 UIScene
    ├── UIScene 1
    │   └── UIWindow 1 (이 UIWindow는 모든 뷰와 콘텐츠를 포함)
    └── UIScene 2
        └── UIWindow 2 (다른 UIWindow, 다른 콘텐츠)

이 구조 덕분에 UIScene은 앱이 여러 화면을 동시에 열거나 여러 독립적인 UI 상태를 유지할 수 있도록 지원합니다. 각 UIScene은 앱의 특정 창이나 화면 상태를 관리하며, 그 안에서 각각의 UIWindow를 관리하게 됩니다.

따라서, UIScene은 하나 이상의 UIWindow를 포함할 수 있는 상위 컨테이너라고 이해하시면 됩니다.

반응형
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/12   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
글 보관함