2022. 5. 22. 17:56ㆍSwift/기술 면접
생명주기
앱의 최초 실행부터 앱이 완전히 종료되기까지 앱이 가지는 상태와 그 상태들 사이의 전이를 뜻한다. 앱의 상태는 앱이 현재 어떠한 것을 할 수 있는 가를 결정한다.
- Foreground 상태 : 유저와 직접 상호작용하기 때문에(사용자가 보고 있는 화면) 시스템 자원 사용 등에서 CPU를 비롯한 시스템 자원의 우선순위가 높은 상태이다.
- Background 상태 : 스크린에 드러나지 않기 때문에 작업을 하지 않거나, 최소한의 작업만 수행해야 한다.
Background에 진입했다는 것은 앱이 실행중이지 않다는 의미는 아니다.
ex) 음악 앱을 이용하여 노래를 듣는 등 앱이 Background 상태가 되어도 계속 실행해야 될 때가 존재한다.
앱 상태 (UIKit App State)
앱의 상태가 변하게 되면, 이 상태에 따라 앱의 행동을 조절해줘야 하는데, 이 조절 작업을 하기 위해 UIKit는 특정 위임객체(delegate object)에 메시지를 보내주게 된다.

- Not Running : 앱이 실행되지 않은 상태거나 System에 의해 종료되어진 상태
- Foreground : APP이 실행되어 사용자에게 보여지고 있는 상태 (In-Active와 Active를 합쳐서 Foreground라고 함)
오직 하나의 App만 Foreground 상태를 가지며 Inactive, Active 상태로 나눠진다.
- Inactive : 앱이 실행중이지만 아직 아무런 이벤트를 받지 않은 상태 (Foreground 상태에서 전화가 왔을 때, 잠금 상태, 멀티태스킹 스크린)
- Active : 앱이 실행중이며 현재 이벤트를 받고 있고 발생한 상태
- Background : 앱이 백그라운드에 있는 상태이지만 여전히 실행되고있는 코드가 있는 상태
Foreground 상태에서 HomeScreen으로 이동한 상태
Background 상태로 전환되기 전에 호출된 Task가 끝나지 않은 경우, Background 상태에서도 실행된다.
Background 상태에서 호출된 Task는 App이 Foreground 상태로 전환된 후에 실행된다.
- Suspened : 앱이 백그라운드에 있고 실행되는 코드가 없는 상태 (App은 여전히 메모리에 존재하며 Suspend 상태가 될 당시의 상태를 저장하고 있지만, CPU나 배터리를 소모하지 않는다. 언제든지 메모리 부족 등의 이유로 종료됨)
App이 Background 상태로 전환된 후 더이상 작업을 수행하지 않으면 System에서 App을 Suspend 상태로 전환한다.
App은 여전히 메모리에 존재하며 Suspend 상태가 될 당시의 상태를 저장하고 있지만, CPU나 배터리를 소모하지 않는다.
Suspend 상태의 App은 Foreground 상태의 App을 위해 메모리 부족 등의 이유로 System에 의해 언제든지 종료된다. 이후 App을 실행하면 이전 상태의 화면은 나오지않고 App이 재시작된다.
App Launch Cycle
- 위에서 언급한 각 App State의 상태 변화는 Delegate 메서드들의 호출이 동반된다.
- 각 메서드들은 앱의 상태 변화에 대해 적절한 방식으로 대응할 수 있는 기회를 가지게 해준다.
//앱이 처음 시작될 때 실행
application(\_:didFinishLaunching:)
//앱이 `Active` 에서 `Inactive`로 이동될 때 실행
applicationWillResignActive:
//앱이 `background` 상태일 때 실행
applicationDidEnterBackground:
//앱이 `background`에서 `foreground`로 이동 될때 실행 (아직 foreground에서 실행중이진 않음)
applicationWillEnterForeground:
//앱이 `Active`상태가 되어 실행 중일 때
applicationDidBecomeActive:
//앱이 종료될 때 실행
applicationWillTerminate:
제약사항
foreground 상태
메모리 및 기타 시스템 리소스에 대해서 background보다 높은 우선순위를 가지며 시스템은 이러한 리소스를 사용할 수 있도록 필요에 따라 background 앱을 종료한다.
background 상태
가능한 적은 메모리공간을 사용해야하며(시스템 리소스 해제, 메모리에서 해제 후 데이터를 디스크에 작성) 우선순위에 의해 foreground task보다 더 낮은 자원을 할당 받는다.
참고
Dream Developer | 앱이 foreground에 있을 때와 background에 있을 때의 제약사항
앱이 foreground에 있을 때와 background에 있을 때의 제약사항 생명 주기 생명주기라는 것은 앱의 최초 실행부터 앱이 완전히 종료되기까지 앱이 가지는 상태와 그 상태들 사이의 전이를 뜻한다. 앱
yi-sang.github.io
iOS) 앱이 foreground/background에 있을 때의 제약사항
foreground / background status? foreground 상태의 앱은 사용자가 보고 있는 화면이다. 그렇기 때문에 CPU를 비롯한 시스템 자원의 우선순위가 높은 상태! background 상태란 앱이 홈화면에 들어가서 사용자
snowee.tistory.com
'Swift > 기술 면접' 카테고리의 다른 글
| 오토레이아웃을 코드로 작성하는 방법은 무엇인가? (3가지) (0) | 2022.06.22 |
|---|---|
| Extension에 대해 설명하시오. (0) | 2022.06.10 |
| 실제 디바이스가 없을 경우 개발 환경에서 할 수 있는 것과 없는 것을 설명하시오. (0) | 2022.05.19 |
| Bounds와 Frame의 차이점을 설명하시오. (0) | 2022.05.11 |
| Singleton Pattern에 대해 설명하시오. (0) | 2022.05.08 |