알고리즘으로 범벅이 된 내 포스팅, 오랜만에 다시 https://github.com/JeaSungLEE/iOSInterviewquestions 의 질문들을 정리하는 시간을 보내보려 한다.
Global DispatchQueue 의 QoS 에는 어떤 종류가 있는지, 각각 어떤 의미인지 설명하라
QoS = Quality of Service
QoS는 네트워크에서 사용하는 용어로 서비스의 중요도에 따라 중요한 서비스에 더 많은 자원을 할당하는 것, 또는 중요도를 뜻한다. QoS가 없다면 모든 서비스는 동일한 비율의 자원을 할당받게 된다. QoS는 작업들을 중요도에 따라 구분하여 급한 일에는 자원을 집중적으로 할당하여 빠르게 처리, 중요도가 낮은 일에는 자원이 모자랄 때 자원 할당을 덜해주는 등의 판단을 시스템이 할 수 있게 해 준다.
애플리케이션에서 QoS는 백그라운드 작업들을 시스템이 실행하는 최선의 방법을 결정하기 위한 정보를 제공해준다. 사용자와 상호작용하는 작업을 포함하는 스레드에는 높은 우선순위를 주어 앱이 끊기는 느낌 없이 최대한 빨리 반응하도록 하거나, 백그라운드 작업에는 낮은 우선순위를 주어 저전력 코어에 작업을 할당한다던지 할 수 있게 된다.
위와 같은 판단은 시스템이 QoS와 더불어 현재 상태나 스케줄링하려는 작업의 속성을 내리는 것이고, QoS가 절대적이진 않다. 그러나 시스템이 적절한 판단을 내리도록 유도한다는 점에서 QoS를 적절히 지정해주는 것이 성능과 에너지 효율 등에서 유리하다.
https://jcsoohwancho.github.io/2019-10-09-DispatchQueue%EC%9D%98Qos/
DispatchQueue.global(qos: .userInteractive)
//MARK: userInteractive
애니메이션, 이벤트 처리 또는 앱의 UI 업데이트 등에 대한 QoS.
시스템에서 가장 높은 우선순위
DispatchQueue.global(qos: .userInitiated)
//MARK: userInitiated
사용자가 앱을 능동적으로 사용하는 것을 방지하기 위한 QoS. 유저가 무언가를 클릭했을 때 곧장
일을 처리하도록 하는 옵션.
userInteractive 다음으로 중요. 작업에 이 클래스를 할당함으로 사용자가 수행하는 작업에 대해 즉각적인 결과를
제공하거나 사용자가 앱을 사용할 수 없도록 함.
DispatchQueue.global()
//MARK: default
유틸리티나 백그라운드 작업보단 우선순위가 높은 QoS. 앱이 시작할 때 혹은 사용자를 대신하여 active work를
수행하는 데 사용하는 큐나 작업에 이 클래스를 할당
DispatchQueue.global(qos: .utility)
//MARK: utility
백그라운드 작업보단 우선순위가 높은 QoS. 사용자가 앱을 계속 사용할 수 있도록 차단하지 않는 작업에 할당.
사용자가 별로 관심없고, 긴 시간이 소요되는 작업에 이 클래스를 할당할 수 있음.
DispatchQueue.global(qos: .background)
//MARK: background
가장 낮은 우선순위. 앱이 백그라운드에 있는동안 수행하는 데 사용되는 작업이나 DispatchQueue들에게
이 클래스를 할당.
DispatchQueue.global(qos: .unspecified)
//MARK: unspecified
QoS 정보가 없다는 신호를 시스템에 전달함.
https://velog.io/@zeke/whatsDispatchQueueQoS
iOS 앱을 만들고, User Interface를 구성하는 데 필수적인 프레임워크 이름은 무엇인가?
UIKit : iOS 애플리케이션의 사용자 인터페이스를 구현하고 이벤트를 관리하는 프레임워크
--> iOS 애플리케이션 개발 시 사용자에게 보일 화면을 구성하고 사용자 액션 대응에 관련된 다양한 요소들을 포함함.
- 제스처 처리, 애니메이션, 그림 그리기, 이미지 처리, 텍스트 처리 등 사용자 이벤트 처리를 위한 클래스를 포함
- 테이블 뷰, 슬라이더, 버튼, 텍스트 필드, alert 창 등 애플리케이션 화면을 구성하는 요소들을 포함
- UIKit 클래스 중 UIResponder에서 파생된 클래스나 사용자 인터페이스에 관련된 클래스는 애플리케이션의 메인 스레드(혹은 메인 디스패치 큐)에서만 사용
UIKIT 기능별 요소
사용자 인터페이스
- View and Control : 화면에 콘텐츠 표시
- View Controller : 사용자 인터페이스 관리
- Animation and Haptics : 애니메이션과 햅틱을 통한 피드백 제공
- Window and Screen : 뷰 계층을 위한 윈도우 제공
사용자 액션
- Touch, Press, Gesture : 제스처 인식기를 통한 이벤트 처리 로직
- Drog and Drop : 화면 위에서 드래그 앤 드롭 기능
- Peek and Pop : 3D 터치에 대응한 미리보기 기능
- Keyboard and Menu : 키보드 입력을 처리 및 사용자 정의 메뉴 표시
https://velog.io/@myeongs07/iOS-UIKit%EC%9D%B4%EB%9E%80
Foundation Kit은 무엇이고 포함되어 있는 클래스들은 어떤 것이 있는지 설명하라
Foundation Framework는 데이터 저장, text 처리, 날짜 및 시간 계산, 정렬 및 필터, 네트워킹을 포함한 앱 기능과 Frameworks의 기본이 되는 Frameworks라고 한다.
Foundation은 원시 데이터 타입(String, Int, Double), 컬렉션 타입(Array, Dictionary, Set) 및 운영체제 서비스를 사용해 애플리케이션의 기본적인 기능은 관리한다.
클래스 종류
- iterator : 배열이나 그와 유사한 자료 구조의 내부의 요소를 순회하는 객체
- jsonEncoder : 데이터 유형의 인스턴스에서 JSON 개체로 변환하는 객체
- jsonDecoder : JSON 개체에서 데이터 유형의 인스턴스로 변환하는 객체
Foundation 기능별 요소
Fundamentals
- Number, Data, String : 원시 데이터 타입 사용
- Collection : Array, Dictionary, Set과 같은 컬렉션 타입 사용
- Dates and Times : 날짜와 시간을 계산하거나 비교하는 작업
- Units and Measurement : 물리적 차원을 숫자로 표현 및 관련 단위 간 변환 가능
- Data Formatting : 숫자, 날짜, 측정값 등을 문자열로 변환 또는 반대 작업
- Filters and Sorting : 컬렉션의 요소를 검사하거나 정렬하는 작업
App Support
- Task Management : 앱의 작업과 시스템 서비스와의 상호작용을 관리
- Resources : 애플리케이션의 에셋과 번들 데이터에 접근 지원
- Notification : 정보를 퍼뜨리거나 받아들이기는 기능 지원
- App Extension Support : 확장 애플리케이션과의 상호작용 지원
- Errors and Exceptions : API와의 상호작용에서 발생할 수 있는 문제 상황에 대처할 수 있는 기능 지원
- Scrpiting Support
Files and Data Persistence
- File system : 파일 또는 폴더를 생성하고 읽고 쓰는 기능 관리
- Archives and Serialization : 속성 목록, JSON, 바이너리 파일들을 객체로 변환 또는 반대 작업 관리
- iCloud : 사용자의 아이클라우드 계정을 이용해 데이터를 동기화하는 작업 관리
- Preferences
- Spotlight : 로컬 기기의 파일과 아이템을 검색하고, 검색을 위한 indexing
Networking
- URL Loading System : 표준 인터넷 프로토콜을 통해 URL과 상호작용하고 서버와 통신하는 작업
- Bonjour : 로컬 네트워크를 위한 작업
Low-Level Utilities
- XPC : 보안 프로세스 간 통신 관리
- Object Runtime : 기본 Objective-C, Cocoa 디자인 패턴, Swift 통합에 대한 저 수준 지원
- Processes and Threads : 호스트 운영 체제 및 기타 프로세스와 앱의 상호 작용을 관리하고 낮은 수준의 동시성 기능 구현
- Streams, Sockets, and Ports : 저수준 Unix 기능을 사용하여 파일, 프로세스 및 네트워크 간의 입출력 관리
https://do-misol.tistory.com/36
https://developer.apple.com/documentation/foundation
오늘은 여기까지 ! 알고리즘 범벅에서 해방해보자..! 조만간 끝나는 프로젝트에 대한 포스팅도 잘해보자!
'iOS & Swift' 카테고리의 다른 글
[iOS] iOS 인터뷰 질문 - 5 (0) | 2022.08.22 |
---|---|
[iOS] iOS 인터뷰 질문 - 3 (0) | 2022.07.08 |
[iOS] SceneDelegate란 ? (0) | 2022.05.23 |
[iOS] iOS 인터뷰 질문 - 2 (0) | 2022.05.17 |
[iOS] iOS 인터뷰 질문 - 1 (0) | 2022.05.11 |