[iOS] Scene, Window, View의 개념과 차이점

iosUI
avatar
2025.03.13
·
6 min read

Scene, Window, View의 개요

Apple 생태계에서 Scene, Window, View는 UI 계층 구조의 중요한 구성 요소이다.

개념

역할

주요 특징

Scene

앱의 UI와 상태 관리

여러 개의 Scene을 가질 수 있으며, 멀티 윈도우 지원

Window

화면에 View를 표시하는 컨테이너

UIWindow를 통해 앱의 주요 콘텐츠를 표시

View

화면에 표시되는 개별 UI 요소

UIView를 기반으로 하며, 계층 구조를 가짐

Scene (UIScene)

Scene은 앱의 UI와 상태를 관리하는 단위이다. iOS 13부터 멀티 윈도우 지원이 도입되면서 Scene 개념이 추가되었다.

Scene의 주요 특징

  • 멀티 윈도우 지원: 하나의 앱에서 여러 개의 Scene을 가질 수 있음.

  • 상태 관리: Scene은 앱의 상태를 저장하고 복원할 수 있음.

  • 독립적인 UI: 각 Scene은 독립적으로 동작하며, 개별적인 UI와 데이터를 가질 수 있음.

SceneDelegate의 역할

Scene을 관리하기 위해 UISceneDelegate가 도입되었으며, 주요 역할은 다음과 같다.

class SceneDelegate: UIResponder, UIWindowSceneDelegate {
    var window: UIWindow?
    
    func scene(
        _ scene: UIScene,
        willConnectTo session: UISceneSession,
        options connectionOptions: UIScene.ConnectionOptions
    ) {
        guard let windowScene = (scene as? UIWindowScene) else { return }
        
        let window = UIWindow(windowScene: windowScene)
        window.rootViewController = ViewController()
        self.window = window
        window.makeKeyAndVisible()
    }
}

SceneDelegate에서 새로운 UIWindow를 생성하고, rootViewController를 설정하는 방식으로 UI를 구성한다.

Scene과 연관된 개념

  • Scene Session: Scene의 상태를 유지하는 객체.

  • Multiple Scenes: 하나의 앱에서 여러 Scene을 가질 수 있음 (예: iPad에서 두 개의 앱 인스턴스 실행 가능).

Window (UIWindow)

Window는 View를 담고 있는 최상위 컨테이너로, 화면에 표시되는 모든 UI 요소를 관리한다.

UIWindow의 주요 특징

  • View를 담는 컨테이너 역할: 하나 이상의 View를 포함하며, 화면에 표시됨.

  • Scene과 연결: iOS 13 이후, UIWindow는 UIWindowScene과 연결되어 관리됨.

  • Key Window: 앱에서 현재 활성화된 주(Window)를 의미하며, 사용자 입력을 받음.

UIWindow 설정 예제

let window = UIWindow(frame: UIScreen.main.bounds)
window.rootViewController = ViewController()
window.makeKeyAndVisible()

UIWindow를 생성하고 rootViewController를 설정한 후, makeKeyAndVisible()을 호출하여 화면에 표시한다.

Window와 연관된 개념

  • Key Window: 현재 활성화된 UIWindow.

  • UIWIndowScene: UIWindow를 포함하는 Scene 객체.

View (UIView)

View는 화면에 표시되는 UI요소의 기본 단위이다. 모든 UI 요소(Button, Label 등)는 UIView를 상속받는다.

UIView의 주요 특징

  • View 계층 구조: 하나의 View는 여러 개의 하위 View를 가질 수 있음.

  • 그리기(Rendering) 기능: 화면에 그래픽을 표시하는 역할을 담당.

  • 사용자 입력 처리: 터치 이벤트를 감지하고 처리할 수 있음.

UIView 계층 구조 예제

let parentView = UIView()
let childView = UIView()
parentView.addSubview(childView)

addSubview(_ :)를 통해 View를 계층적으로 배치할 수 있다.

View와 연관된 개념

  • UIViewController: View를 관리하는 컨트롤러.

  • CALayer: View의 그래픽 표현을 담당하는 Core Animation 객체.

Scene, Window, View의 관계

App
 ├── Scene (UIScene)
 │    ├── Window (UIWindow)
 │    │    ├── View (UIView)
 │    │    │    ├── Subview (UILabel, UIButton, UITableView 등)
3999

Scene이 Window를 포함하고, Window가 View를 포함하는 계층 구조를 가진다.

Scene과 Window의 관계

  • 하나의 Scene은 하나 이상의 Window를 가질 수 있음.

  • 여러 개의 Scene을 지원하는 경우, 각 Scene마다 별도의 Window가 생성됨.

Window와 View의 관계

  • Window는 하나 이상의 View를 포함하며, View는 화면에 표시되는 UI 요소를 담당함.

  • ViewController가 View를 관리하며, Window의 rootViewController에 설정됨.

추가 개념

AppDelegate vs SceneDelegate

  • iOS 12 이하: AppDelegate가 UIWindow를 직접 관리.

  • iOS 13 이상: SceneDelegate가 도입되어 UIWindow를 Scene에서 관리.

Mac Catalyst와 멀티 윈도우 지원

  • Mac Catalyst를 통해 iPad 앱을 macOS에서 실행할 경우, 여러 개의 Scene을 지원할 수 있음.

SwiftUI에서 Scene, Window, View의 변화

  • SwiftUI에서는 Scene을 직접 정의할 수 있으며, WindowGroup을 사용하여 여러 Scene을 관리할 수 있음.

@main
struct MyApp: App {
    var body: some Scene {
        WindowGroup {
            ContentView()
        }
    }
}

UIKit과 달리, SwiftUI에서는 Scene과 View의 개념이 더욱 명확하게 분리됨.







- 컬렉션 아티클