[UIKit] AppDelegate와 SceneDelegate의 차이

2024. 8. 4. 18:32·Swift
728x90

🫵결론부터 말하자면 AppDelegate와 SceneDelegate는 iOS 애플리케이션의 생명주기와 사용자 인터페이스를 관리하는 데 사용되는 두 가지 주요 구성 요소인데,
AppDelegate는 앱의 전반적인 생명주기를 관리
SceneDelegate는 여러 창(Scene)을 관리하며 멀티태스킹을 지원한다. -> iOS 13 이후부터 도입된 SceneDelegate는 하나의 앱에서 여러 UI 장면을 독립적으로 다룰 수 있게 한다.

 

그럼 각각 더 자세하게 알아보자.


1. AppDelegate란?

AppDelegate는 iOS 애플리케이션의 시작, 상태 전환, 종료 등의 주요 이벤트를 처리하는 역할을 한다. 애플리케이션의 전반적인 생명주기를 관리하며, 대부분의 앱 설정과 초기화 작업이 여기에서 이루어진다고 생각하면된다.

 

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

    // 앱 시작 시 호출
    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        // 초기화 작업
        return true
    }

    // 기타 앱 생명주기 메소드
}

 

주요 역할:

- 앱이 실행될 때 초기 설정 수행 (launch screen)

- 푸시 알림 처리

- 백그라운드에서 포그라운드로 전환될 때 작업 처리


2. SceneDelegate란?

위에 설명한 것과 같이 SceneDelegate는 iOS 13에서 도입되었으며, 하나의 앱 내에서 여러 개의 독립적인 UI 창(Scene)을 관리한다. 이를 통해 멀티 윈도우 기능을 지원하며, 각 장면(Scene)은 자체적인 생명주기를 가진다.

 

class SceneDelegate: UIResponder, UIWindowSceneDelegate {

    var window: UIWindow?

    // 장면 연결 시 호출
    func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
        guard let _ = (scene as? UIWindowScene) else { return }
    }

    // 기타 장면 생명주기 메소드
}

 

주요 역할:
- 새로운 장면(Scene) 생성 및 설정

- 장면이 포그라운드로 들어오거나 백그라운드로 나갈 때 처리

- 멀티태스킹 지원


그럼 둘의 상호작용을 알아볼까?
위에 설명한 것과 같이 AppDelegate는 앱의 전반적인 설정과 생명주기를 관리하며, SceneDelegate는 각 장면의 생명주기를 관리한다고 하였는데 플로우를 살펴보자.


앱이 시작되면 AppDelegate가 먼저 호출되고, 이후 SceneDelegate가 호출되어 각 장면을 설정한다.

또한 앱의 상태 전환은 AppDelegate가 처리하고, 각 장면의 상태 전환은 SceneDelegate가 처리한다.


마지막으로 애플리케이션 생명주기에 대해 이해가 안된 사람들을 위해 예시를 남기려고 한다.

 

 

1. 앱 시작 → AppDelegate의 application(_:didFinishLaunchingWithOptions:) 호출

2. 첫 번째 장면 생성 → SceneDelegate의 scene(_:willConnectTo:options:) 호출

3. 앱 활성화 → AppDelegate의 applicationDidBecomeActive(_:) 호출

4. 장면 포그라운드 진입 → SceneDelegate의 sceneDidBecomeActive(_:) 호출

 

728x90

'Swift' 카테고리의 다른 글

[UIKit] info.plist 권한 총정리  (2) 2024.08.13
[UIKit] Navigation Bar 숨기기  (0) 2024.08.05
'Swift' 카테고리의 다른 글
  • [UIKit] info.plist 권한 총정리
  • [UIKit] Navigation Bar 숨기기
프론트 개발자 김현중
프론트 개발자 김현중
👋반갑습니다 저는 나눔을 실천하는 개발자 꿈나무 김현중입니다⌨️🚀
  • 프론트 개발자 김현중
    삥구의 개발블로그
    프론트 개발자 김현중
  • 전체
    오늘
    어제
    • 분류 전체보기 (92)
      • 알고리즘 (5)
      • Swift (3)
      • 컴퓨터네트워크 (1)
      • React (38)
      • Docker (1)
      • SQL (8)
      • Database (2)
      • 배포 (1)
      • Spring (9)
      • TypeScript (5)
      • Next.js (12)
      • Git (1)
      • 회고 (1)
      • 컴퓨터그래픽스 (2)
      • Python (1)
      • Brew (1)
      • LangChain (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    Backend
    MySQL
    백준
    웹개발
    frontend
    데이터베이스
    코딩테스트
    ReactHooks
    typescript
    알고리즘
    database
    Spring
    javascript
    java
    appRouter
    프론트엔드
    Next.js
    react
    springboot
    nextjs
  • 최근 댓글

  • 최근 글

  • 250x250
  • hELLO· Designed By정상우.v4.10.1
프론트 개발자 김현중
[UIKit] AppDelegate와 SceneDelegate의 차이
상단으로

티스토리툴바