# 활동 학습(모의면접) 230206 A. 면접관 : 자신이 공부한 질문 세트를 통해 면접을 진행합니다 B. 면접자 : 면접관의 질문에 자신이 아는 한도 내에서 답변합니다 C. 관찰자 : 면접관 및 면접자의 태도 및 습관에 대해서 기록해둔 후 면접이 종료되면 피드백합니다 4모둠: Rhovin, Mangdi, 준호 ## 세트 1 * 면접관: Rhovin * 면접자: Mangdi * 관찰자: 준호 질문 1 앱 라이프 싸이클이란? 질문 2 뷰 라이프 싸이클이란? 질문 3 앱 델리게이트와 씬 델리게이트의 차이는? 질문 4 백그라운드에서 포그라운드 상태로 넘어갈때 어떤 준비를 하는지 질문 5 동시성 프로그래밍이란 질문 6 사용해본 동시성프로그래밍 질문 7 GCD 설명 질문 8 Operation에 대해서 질문 9 GCD에서 취소작업을 해본 적 있는지 질문 10 세마포어란 피드백 : ## 세트 2 * 면접관: 준호 * 면접자: 로빈 * 관찰자: 망디 질문 1 iOS앱의 상태변화에 따라 호출되는 메서드를 설명해주세요 - 백그라운드 상태에서 포그라운드 상태로 들어가기전 inactive상태로 들어간다. inac-> active 듥어갈때 secene active상태로 들어간다. app swich들 켜서 백그라운드로 넘어갈때 will 리시브? 메서드 호출하고 .... 유저 상태관련된 데이터를 처리하고 어플을 끄게된다. 질문 2 백그라운드상태랑 서스펜드의 상태에 대해서 설명해주세요. - 잘 모르겠습니다 질문 3 앱델리게이트와 신델리게이트의 차이를 설명해주세요 - ios13부터 신델리가 UI를 처리하기 시작해서 앱델리는 ...등등의 시스템 이벤트를 처리하고 질문 4 신델리게이트는 무엇이라고 생각하나요? - 질문 5 외부에서 발생하는 알림에 반응하는것은 신델리인가요 앱델리인가요 - 앱델리게이트라고 생각합니다 질문 6 GCD에 대해서 설명해주세요 - 비동기를 처리할 수 있는 프레임워크입니다. 질문 7 Operation에 대해서 - 비동기적으로 수행하는 작업을 캡슐화한 객체이다. 질문 8 비동기가 어떤 의미인가요? - 잘 모르겠습니다. 질문 9 동시성 프로그래밍에 대해서 설명해주세요 - 잘 모르겠습니다. 질문 10 GCD를 객체지향형으로 만든 게 Operation이라면 GCD에 비해 어떤 이점이 있을까요? - gcd는 간단하게 할수있는데 oper는 캡슐화했기때문에 좀 더 복잡한 작업이 가능한걸로 알고있다. 질문 11 플젝에서 gcd, oper 둘중 무얼로 - oper의 기능이 많아서 질문 12 oper의 작업취소과정 설명 - isCancel을 호출하면 가능한걸로알고있다. 질문 13 oper의 cancel메서드에 대해서 설명 - 잘 모르겠습니다. 피드백 : ## 세트 3 * 면접관: 망디 * 면접자: 준호 * 관찰자: 로빈 1. 오토레이아웃은 프레임을 다루는건지 바운즈를 다루는것인지 1. 프레임을 다루는 것 같다. 주변뷰나 슈퍼뷰를 다루기 때문에 프레임과 연관되어 있지 않을까 생각한다 1. 프레임과 바운즈에 대한 설명 1. 프레임은 슈퍼뷰 좌표에서 해당뷰의 위치 크기를 나타내는 사각형 틀을 의미하고, 바운즈는 자신 좌표계를 나타내는 사각형 1. 바운즈를 활용해 본 경험 1. 바운즈를 직접적으로 다뤄본적은 없다. 프레임만 다뤄본 1. 바운즈를 사용하면 언제 활용을 해볼 수 있을지 1. 잘 모르겠음 1. 클립투바운즈와 마스트바운즈가 무엇인지 알고있는지 1. 뷰를 벗어나는 서브뷰가 없도록 하는 프로퍼티로 알고있다 1. 클립투바운즈와 마스크바운즈와 차이 1. 잘모르겠음 1. 프레임이나 바운즈의 렉트를 변경할 때 드로우 메서드가 호출되는지 1. 잘 모르겠음 1. 트랜스폼 프로퍼티의 값이 아이덴티티가 아닌경우 뷰의 크기와 위치를 바꾸기 위해서 프레임과 바운즈 중 무엇을 사용해야 되는지 1. 뷰의 크기는 프레임을 바꿔야하지 않을까 생각. 정확하게 잘 모르겠음 1. 컨비니언스 이닛이란 1. 편의 이니셜라이저. 지정 이니셜라이저를 호출해서 특정 프로퍼티값을 미리 설정해서 쉽게 이니셜라이저를 호출해서 사용하는 이니셜라이저로 알고있다 1. 컨비니언스 이닛은 상속관계가 있는 클래스에서 사용가능한 것으로 알고있다 1. 왜 구조체에서 사용할 수 없는지? 1. 지정 이니셜라이저를 호출해야되는데 부모 클래스의 지정이니셜라이저를 호출해야되서 1. 편하게 이니셜라이저를 호출하기 위해서 1. 클래스 초기화는 2단계 프로세서가 있는데 컨비니언스가 수행되기 까지 과정을 설명해라 1. 프로퍼티 값을 할당하고 슈퍼뷰의 지정이니셜라이저를 호출하는 순서로 알고있다 1. 이니셜라이저에 대해 3가지 규칙. 컨비니언스이닛에 적용하는 규칙이 먼지 1. 잘 모르겠음 1. 컨비니언스 이닛은 메서드인지? 1. 이니셜라이저다 메서드가 아니라고 생각함 1. 메서드가 아니라고 생각하는 이유가 무엇인지 1. 잘 모르겠음 --- # 질문 & 답변 ## 망디 https://hackmd.io/W91E9hlaTvyAb-rwKQT1IA ## 준호 ### 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(_:)`는 앱이 종료되기 직전에 호출됩니다. |![Respond to app-based life-cycle events](https://docs-assets.developer.apple.com/published/64a2e0dab8/app-state@2x.png)| |:--:| - **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이면 작업을 취소합니다. --- ## 로빈 ### 앱 라이프사이클 앱이 포그라운드 / 백그라운드에 있을 때 시스템 알림에 응답하고 기타 중요한 시스템 관련 이벤트 처리 ### 뷰 라이프싸이클 뷰가 변경되면 뷰 컨트롤러는 자체 메서드를 자동으로 호출하여 하위 클래스가 변경 사항에 응답할 수 있도록 합니다. 뷰를 화면에 표시하도록 준비 하는 것과 같은 방법 을 사용 하고 변경 사항이나 기타 상태 정보를 저장하는 데 사용합니다. ## 포그라운드 진입 시 앱 데이터 모델 업데이트 포그라운드 액티브 전 포그라운드 인액티브 상태로 시작함. 백그라운드 상태에서 [sceneWillEnterForeground(_:)](https://developer.apple.com/documentation/uikit/uiscenedelegate/3197918-scenewillenterforeground)를 호출해 포그라운드 인액티브상태로 들어감 백그라운드에서 포그라운드로 전환할때 이방법을 이용해서 디스크에서 리소스 로드 및 네트워크에서 데이터를 가져옴 ## 액티브시 사용자 인터페이스 초기 작업 및 구성 앱의 UI 표시하기 직전 앱을 액티브상태로 이동함. [sceneDidBecomeActive(_:)](https://developer.apple.com/documentation/uikit/uiscenedelegate/3197915-scenedidbecomeactive) 액티브는 앱의 UI 및 런타임 동작하기 좋은 상태. UI를 마무리하는 상태 - 뷰 표시 - 뷰컨 변경 - 뷰 및 뷰컨 데이터값과 상태 업데이트 - 작업을 실행하는데 사용하는데 디스패치 시작 - 데이터 소스 업데이트 - 주기적인 작업을 위한 타이머 시작 ## 인터페이스에 대한 최종 업데이트 [viewWillAppear(_:)](https://developer.apple.com/documentation/uikit/uiviewcontroller/1621510-viewwillappear) - 적절하게 사용자 인터페이스 애니메이션 시작 - 자동재생이 활성화된 경우 미디어 파일 재생 - 그래픽 표시 시작 - 앱델리게이트 : didFinishLaunching → configurationForSession - 씬델리게이트 : winConnectToSession → 홈화면이동하면 willResignActive, didEnterBackground / 앱 끄면 didDisconnect → 앱딜리게이트 : didDiscardSceneSession(유저상태나 데이터 관련일 처리. 자동저장같은) - 앱 라이프사이클 : 앱이 포그라운드 / 백그라운드에 있을 때 시스템 알림에 응답하고 기타 중요한 시스템 관련 이벤트 처리 - 앱의 상태가 변화되면 UIKit은 적절한 델리게이트를 호출해서 알려준다 - iOS 13 이상 : UISceneDelegate 씬 기반 앱 수명주기 이벤트에 응답 - iOS 12 이하 : UIApplicationDelegate 를 사용해서 라이프 사이클 이벤트에 응답 # App Delegate와 Scene Delegate의 역할 차이는 무엇인가요? - iOS 12 이하버전에서는 앱딜리게이트가 시스템 이벤트와 UI상태를 처리했는데 iOS13 부터 씬델리게이트가 UI 상태를 처리함 - 앱딜리게이트는 메모리경고, 기기 잠금/해제, 핸드오프, 시간변경, URL오픈(앱에서 리소스 열때) 이벤트를 처리. 앱 자체 이벤트. 배터리부족, 다운로드 완료, 애플 푸쉬등록같은거 # **GCD와 Operation의 차이에 대해 설명해주세요.** - Operation은 비동기적으로 수행하는 작업을 캡슐화한 객체이다 - KVO를 지원해서 작업 실행상태에 대한 모니터링이 가능하다 - 작업 우선순위를 변경할 수 있다 - 작업이 실행되는 동안 취소할 수 있다 # 어떤 경우에 각각의 기술을 선택할지 자신의 선택 기준에 대해 알려주세요. - GCD은 클로저를 통해 간단한 작업을 할때, Operation은 복잡한 작업에 사용한다. - Operation은 취소, 순서지정, 일시정지가 필요할 때 사용한다 # 각각의 기술을 사용할 때 작업을 취소하면 곧바로 취소가 되나요? - 작업을 취소할 때 벌어지는 일에 대해서 설명해주세요. - GCD : 취소하지 못한다. 큐를 일시 중단해서 블록을 일시적으로 실행하지 못하게 할 수 있다. - operation : 작업이 실행되기 전이면 언제든지 isCancelled 메서드를 호출해서 취소가 가능하다
{"metaMigratedAt":"2023-06-17T19:58:53.670Z","metaMigratedFrom":"Content","title":"활동 학습(모의면접) 230206","breaks":true,"contributors":"[{\"id\":\"c8dec39f-8bd5-4e69-a694-0e00c1ebc0d5\",\"add\":862,\"del\":0},{\"id\":\"5e55cf54-f1a7-4ea3-9b62-ca964a1adfe4\",\"add\":3717,\"del\":222},{\"id\":\"525e7f59-2a1e-4cbb-bee0-6e7ab3dc13b3\",\"add\":2288,\"del\":4}]"}
    158 views
   Owned this note