iOS 생명주기란?
“iOS 생명주기(iOS Lifecycle)”는 앱이 실행되고 종료될 때까지의 흐름을 의미합니다.
이 흐름을 이해하면 앱이 언제 메모리를 할당하거나 해제해야 하는지,
또 화면이 언제 그려지고 사라지는지를 명확히 파악할 수 있습니다.
앱 전체 생명주기 (AppDelegate / SceneDelegate)
앱 단위에서의 생명주기는 다음 5단계로 나뉩니다.
| 단계 | 상태 | 설명 |
|---|---|---|
| 1 | Not Running | 앱이 실행되지 않은 상태 |
| 2 | Inactive | 앱이 실행 중이지만 사용자 입력 불가 (전화 수신 등) |
| 3 | Active | 앱이 실행 중이며 입력 가능 (정상 상태) |
| 4 | Background | 홈 버튼 등으로 백그라운드 전환된 상태 |
| 5 | Suspended | CPU 미사용, 메모리만 유지되는 상태 |
주요 콜백 메서드:
func applicationDidBecomeActive(_ application: UIApplication)
func applicationWillResignActive(_ application: UIApplication)
func applicationDidEnterBackground(_ application: UIApplication)
func applicationWillEnterForeground(_ application: UIApplication)
func applicationWillTerminate(_ application: UIApplication)
SceneDelegate 역할 (iOS 13 이후)
iOS 13부터 SceneDelegate가 도입되어 멀티 윈도우 환경을 지원합니다.
즉, iPad나 iPhone에서 여러 인스턴스의 앱 화면(Scene)을 관리할 수 있습니다.
func sceneWillEnterForeground(_ scene: UIScene)
func sceneDidEnterBackground(_ scene: UIScene)
AppDelegate는 앱 전체 환경 설정, SceneDelegate는 화면 단위 상태 관리를 담당합니다.
ViewController 생명주기 (UIViewController Lifecycle)
이제 말씀하신 viewWillAppear, viewDidDisappear 등은 바로 여기입니다.
화면(ViewController)의 생명주기는 다음 순서로 진행됩니다.
| 순서 | 메서드 | 설명 |
|---|---|---|
| 1 | viewDidLoad() | 뷰가 메모리에 로드될 때 (한 번만 호출됨) |
| 2 | viewWillAppear(_:) | 화면이 나타나기 직전 |
| 3 | viewDidAppear(_:) | 화면이 완전히 나타난 후 |
| 4 | viewWillDisappear(_:) | 화면이 사라지기 직전 |
| 5 | viewDidDisappear(_:) | 화면이 완전히 사라진 후 |
🔹
viewDidLoad(): 데이터 초기화, UI 설정
🔹viewWillAppear(): 화면 갱신, 애니메이션 준비
🔹viewDidDisappear(): 자원 해제, 타이머 정리 등
override func viewDidLoad() {
super.viewDidLoad()
print("뷰가 메모리에 로드됨")
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
print("화면이 곧 나타남")
}
override func viewDidDisappear(_ animated: Bool) {
super.viewDidDisappear(animated)
print("화면이 완전히 사라짐")
}
생명주기 이해의 중요성
- 메모리 관리: 뷰가 사라질 때 불필요한 객체 해제
- 데이터 갱신: 화면이 나타날 때 최신 데이터 반영
- 애니메이션 제어: 전환 타이밍 조절로 부드러운 UI 구현
- 성능 최적화: 필요 시점에만 네트워크 호출 및 연산 수행
함께 보면 좋은 글
정리
iOS 생명주기는 **앱 전체(AppDelegate / SceneDelegate)**와 화면 단위(ViewController) 두 영역으로 나뉩니다.
각 단계의 호출 시점을 이해하면, 앱이 더 안정적이고 효율적으로 동작합니다.