ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Scene과 Window의 관계
    Apple🍎/UIKit 2025. 2. 8. 23:20

    시각적 요소와 상태 관리 

    시각적 요소 관리란 화면상에 보이는 모든 UI 컴포넌트들의 레이아웃, 크기, 위치, 계층 구조를 다루는 것을 의미합니다. 

    예를 들어 버튼의 위치, 텍스트 필드의 크기, 뷰의 계층 구조 등이 여기에 포함됩니다. 

     

    상태 관리란 UI의 현재 상황과 관련된 모든 데이터를 다루는 것을 의미합니다. 

    예를 들어 현재 선택된 탭, 스크롤 위치, 입력중인 텍스트, 네비게이션 스택의 상태 등이 이에 해당됩니다. 

    또한 UI의 생명주기 또한 상태관리의 일부입니다. 

     

     

    UIKit과 SwiftUI의 생명주기 관리

    앱 생명주기어플리케이션 생명주기란 앱이 실행부터 종료까지의 과정 속에서 상태 변화를 다루는 개념이다. Not Running (실행되지 않음): 앱이 아직 시작되지 않았거나 완전히 종료된 상태를 의

    people-analysis.tistory.com

     

     

    iOS 13 이전: Window 중심 구조의 한계 

    iOS 13 이전에는 하나의 화면만을 관리하면 되었기 때문에 앱의 UI와 라이프 사이클이 단일 window 중심으로 구성되었습니다. UIWindow 객체는 다음 역할들을 담당했습니다.

     

    1. 화면 표시의 기본 컨테이너 : 모든 뷰의 최상위 컨테이너로서 화면에 표시될 내용을 담음

    2. 이벤트 처리 : 터치 이벤트를 적절한 뷰로 전달하는 역할 수행 

    3. UI 계층 구조 : RootViewController, NavigationStack, View 계층 구조, 좌표계 및 레이아웃 관리 

    4. View 상태 관리 : 스크롤 위치, 선택 항목 상태, First Responder, Focus 상태

    5. 라이프 사이클 관리 : 활성/비활성 상태 처리, Key Window 상태 처리, 상태 저장 및 복원, 앱 전환 처리 

     

    iOS 13 이전의 단일 Window 기반 시스템에서 아래 그림과 같이 멀티 윈도우를 지원하기 위해서는 AppDelegate에서 다음과 같은 것들을 직접 관리해야했습니다. 

     

    1. Window 인스턴스 관리의 복잡성

    • 각 Window 인스턴스를 AppDelegate에서 직접 추적
    • Window 생성/소멸 시점 관리
    • 여러 Window의 참조를 배열이나 딕셔너리로 저장하고 관리

    2. 상태 관리의 어려움 

     

    • 앱의 foreground/background 전환 시 모든 Window의 상태를 수동으로 업데이트
    • 각 Window별 독립적인 상태 관리 불가능
    • Window 간의 상태 동기화 로직 필요

    3. 상태 저장 및 복원의 어려움

     

    • 각 Window의 상태를 개별적으로 저장하고 복원하는 메커니즘 필요
    • Window 전환 시 컨텍스트 유지가 어려움

     

     


    iOS 13 이후: Scene 계층의 도입

    멀티 윈도우 지원을 위해 각각의 Window를 직접 관리해주어야하는 복잡성을 해결하기 위해 Apple은 Scene이라는 새로운 추상화 계층을 도입했습니다. 

    Scene은 하나의 UI 인스턴스를 나타내며, 각각 독립적인 생명주기와 상태를 가지며 다음과 같은 이점을 가져다 줍니다. 

    1. 자동화된 상태 관리
      • 시스템이 각 Scene의 상태를 자동으로 추적하고 관리합니다
      • 개발자가 수동으로 상태를 동기화할 필요가 없어졌습니다
    2. 독립적인 생명주기
      • 각 Scene이 독립적으로 foreground/background 전환을 처리합니다
      • 한 Scene이 background로 갈 때 다른 Scene은 영향받지 않습니다
    3. 자동화된 상태 저장 및 복원
      • 시스템이 자동으로 각 Scene의 상태를 저장하고 복원합니다
      • Scene 전환 시 컨텍스트가 자동으로 유지됩니다
    4. 리소스 관리 개선
      • 시스템이 각 Scene의 리소스를 효율적으로 관리합니다
      • 메모리 부족 시 background Scene을 자동으로 해제할 수 있습니다

     

    이처럼 Scene 아키텍처는 복잡한 멀티 윈도우 관리 문제를 시스템 레벨에서 해결함으로써, 개발자가 앱의 핵심 기능 구현에 더 집중할 수 있게 되었습니다. 또한 Scene이 기존에 Window가 담당하던 UI 계층구조, View 상태, UI 생명주기 관리 책임을 가져감으로써 Window는 단순히 화면을 표시하고 이벤트를 중개하는데 집중할 수 있도록 해주었습니다. 

    'Apple🍎 > UIKit' 카테고리의 다른 글

    UIKit에서 delegate 패턴이 어떻게 활용될까?  (0) 2024.09.18

    댓글

Designed by Tistory.