# 활동 학습 준비 - 230205
## 질문
### iOS 앱의 상태 변화에 따라 호출되는 메서드 종류에 대해 설명해주세요.
- App Delegate와 Scene Delegate의 역할 차이는 무엇인가요?
### GCD와 Operation의 차이에 대해 설명해주세요.
- 어떤 경우에 각각의 기술을 선택할지 자신의 선택 기준에 대해 알려주세요.
- 각각의 기술을 사용할 때 작업을 취소하면 곧바로 취소가 되나요? - 작업을 취소할 때 벌어지는 일에 대해서 설명해주세요.
## 답변
### iOS 앱의 상태 변화에 따라 호출되는 메서드 종류에 대해 설명해주세요.
A. `application(_:willFinishLaunchingWithOptions:)` 는 앱에 필요한 주요 객체들을 생성하고 run loop를 생성하는 등 앱의 실행 준비가 끝나기 직전에 호출됩니다. `application(_:didFinishLaunchingWithOptions:)` 는 앱 실행을 위한 모든 준비가 끝난 후 화면이 사용자에게 보여지기 직전에 호출됩니다. `applicationWillEnterForeground(_:)` 는 앱이 Background 또는 Not-Running 상태에서 Foreground로 들어가기 직전에 호출됩니다. `applicationDidEnterBackground(_:)` 는 앱이 Foreground 상태에서 Background로 들어가기 직전에 호출됩니다. `applicationDidBecomeActive(_:)` 는 앱이 active 상태로 진입하고 난 직후 호출됩니다. `applicationWillResignActive(_:)` 는 앱이 Active에서 In-Active 상태로 진입하기 직전에 호출됩니다. `applicationDidEnterBackground(_:)` 는 앱이 background 상태에 진입 직후 호출됩니다. `applicationWillTerminate(_:)`는 앱이 종료되기 직전에 호출됩니다.
||
|:--:|
- **App Delegate와 Scene Delegate의 역할 차이는 무엇인가요?**
A. Scene delegate는 UI의 life cycle을 관리하는 역할을 하고 App delegate는 전체적인 앱의 수명을 관리합니다 App delegate는 앱의 중앙 데이터 구조를 초기화하고 앱의 scene을 구성합니다. 메모리 부족 시 경고하고 앱 외부에서 발생하는 알림에 응답하고 APNS(Apple push notification service) 서비스 등 출시 시 필요한 서비스를 등록하는 데 사용합니다. Scene delegate는 scene이 foreground로 진입하여 활성화될 때와 background로 진입할 때를 포함하여 scene에 영향을 미치는 상태 전환에 응답하는 메서드를 정의합니다.
### GCD와 Operation의 차이에 대해 설명해주세요.
A. GCD는 Grand Central Dispatch의 약자로 멀티 코어 환경과 멀티 스레드 환경에서 최적화된 프로그래밍을 할 수 있도록 애플이 개발한 기술입니다. Operation은 GCD를 객체지향적으로 새롭게 재탄생시킨 high-level의 API로, GCD에서 Task라고 불렀던 코드블록들을 캡슐화, 객체화(타입화)해낸 것입니다. 수행할 작업이 객체화 되어있기 때문에 재사용이 용이합니다.
- **어떤 경우에 각각의 기술을 선택할지 자신의 선택 기준에 대해 알려주세요.**
A. GCD보다 Operation을 사용하는 게 더 복잡하기 때문에 간단한 작업은 GCD를 사용하고, 작업 취소나 종속성 관리 등 Operation만 가능한 기능이 프로젝트에서 필요한 경우에는 Operation을 사용합니다.
- **각각의 기술을 사용할 때 작업을 취소하면 곧바로 취소가 되나요? 작업을 취소할 때 벌어지는 일에 대해서 설명해주세요.**
A. cancel() 메서드를 호출하면 isCancelled가 true로 설정됩니다. cancel() 메서드가 실제 동작을 중단시키지는 않기 때문에 isCancelled 프로퍼티를 추적하여 작업을 취소하는 기능을 구현해야 합니다. 직접 isCancelled 값을 확인하여 값이 true이면 작업을 취소합니다.