이전글: 2024.08.03 - [개발/swift] - swift를 이용한 iOS 앱 개발 입문 1: 각 파일들의 역할
swift를 이용한 iOS 앱 개발 입문 2: 앱(App), 씬(Scene), 생명주기(Lifecycle)
늘상 웹개발만 하다가, 앱개발의 세계에 처음 발을 담궈보니, 앱의 생명주기라는 것에 대해 알 필요가 있어서 정리해본다. 이전 글에서 앱의 생명주기를 'AppDelegate.swift'라는 파일에서 관리한다고 적었는데, 조금 더 깊이 들어가보자.
앱의 생명주기(App Lifecycle)은 iOS앱이 실행되는 동안 다양한 상태 전환을 설명하는 중요한 개념이다. 앱의 생명주기를 이해하면 앱의 시작, 중지, 다시 시작, 종료 시 적절한 작업을 수행할 수 있다. 다음은 iOS앱의 생명주기와 각 상태에 대한 자세한 설명이다.
1. 앱의 상태
앱은 다음과 같은 상태를 가질 수 있다:
- Not Running: 앱이 실행되지 않음
- Inactive: 앱이 포어그라운드에 있지만 이벤트를 처리하지 않음
- Active: 앱이 포어그라운드에 있으며 이벤트를 처리하고 있음
- Background: 앱이 백그라운드에 있지만 여전히 코드 실행이 가능
- Suspended: 앱이 백그라운드에 있으며 코드 실행이 중단됨. 메모리에 유지됨
2. 씬(Scene)은 뭔데?
유사하게 'SceneDelegate.swift'라는 파일에는 씬의 생명주기를 관리하는데, 그럼 씬은 도대체 뭘까 하고 찾아보니... 씬은 iOS 13 이후 도입된 개념으로, 하나의 앱 내에서 여러 개의 윈도우를 관리할 수 있게 한다. 씬은 사용자가 동시에 여러 개의 UI환경을 다룰 수 있도록 지원한다. 씬의 주요 특징으로는,
- 멀티태스킹 지원: 씬을 사용하면 사용자가 하나의 앱에서 여러 개의 독립적인 UI 환경을 동시에 사용할 수 있다. 예를 들어, iPad에서 멀티윈도우 모드를 사용할 수 있다.
- 독립적인 생명 주기: 각 씬은 독립적인 생명 주기를 가지고 있으며, 'SceneDelegate'를 통해 관리된다. 각 씬의 생성, 활성화, 비활성화, 종료 등의 이벤트를 개별적으로 처리한다.
- 윈도우 관리: 씬은 하나 이상의 윈도우를 포함할 수 있으며, 각 윈도우는 자체적인 뷰 컨트롤러 계층을 갖고 있다.
3. 생명주기 이벤트를 처리하는 메서드
위에서 알아본 생명주기의 변화 이벤트를 받아주는 메서드가 존재하여, 'AppDelegate.swift'파일과 'SceneDelegate.swift'파일에서 이러한 이벤트를 핸들링 해 주어야 할 것이다. 아래는 앱과 씬의 생명주기에 관련된 메서드들을 소개한다.
AppDelegate 메서드
- application(_:didFinishLaunchingWithOptions:) - 앱이 시작될 때 호출. 앱의 초기 설정을 여기서 진행
- applicationDidBecomeActive(_:) - 앱이 활성 상태로 전환될 때 호출. 일반적으로 앱이 포어그라운드로 들어올 때나 일시 정지 상태에서 돌아올 때 호출
- applicationWillResignActive(_:) - 앱이 비활성 상태로 전환되기 전에 호출. 전화나 메시지 등으로 인해 일시 중단될 때 호출
- applicationDidEnterBackground(_:) - 앱이 백그라운드로 전환될 때 호출. 상태를 저장하거나 리소스를 해제하는 등의 작업을 여기서 수행
- applicationWillEnterForeground(_:) - 앱이 백그라운드에서 포어그라운드로 전환될 때 호출
- applicationWillTerminate(_:) - 앱이 종료될 때 호출. 상태를 저장하고 정리 작업을 수행
SceneDelegate 메서드
- scene(_:willConnectTo:options:) - 새로운 씬이 생성될 때 호출. 씬의 초기 설정을 여기서 진행
- sceneDidDisconnect(_:) - 씬이 연결 해제될 때 호출. 씬이 더 이상 사용되지 않음을 의미
- sceneDidBecomeActive(_:) - 씬이 활성 상태로 전환될 때 호출
- sceneWillResignActive(_:) - 씬이 비활성 상태로 전환되기 전에 호출
- sceneWillEnterForeground(_:) - 씬이 백그라운드에서 포어그라운드로 전환될 때 호출
- sceneDidEnterBackground(_:) - 씬이 백그라운드로 전환될 때 호출
이렇게 보니까 앱과 씬이 개념적으로는 좀 구분이 되는 듯 하기도 하고... 역시 가장 중요한 것은 직접 부딪히며 코드를 짜보는게 이해하기에 가장 쉽고 빠른 방법인 듯 하다. 사이드 프로젝트 앱의 스플래시 화면을 만들어가며 공부해보자.
'🔨 개발 > 📱 swift' 카테고리의 다른 글
카카오 로그인 예제를 통한 CocoaPods 설치와 사용 (4) | 2024.08.31 |
---|---|
swift를 이용한 iOS 앱 개발 입문 4: UITextField 사용과 iOS 가상 키보드 높이 감지 (0) | 2024.08.21 |
swift를 이용한 iOS 앱 개발 입문 3: 'IBOutlet'과 'IBActon' (0) | 2024.08.20 |
swift를 이용한 iOS 앱 개발 입문 1: 각 파일들의 역할 (0) | 2024.08.03 |