본 게시물은 앨런의 인프런 강의를 듣고 작성한 글 입니다. 작업을 분산처리하는 과정에서 필요한 큐는 크게 GCD와 Operation으로 나눌 수 있다. 여기서 GCD 즉, 디스패치큐의 종류는 메인큐, 글로벌큐, 프라이빗큐로 나눌 수 있는다. 이러한 종류의 큐들은 알아서 스레드를 생성하고 처리한다. 1. 메인큐 (main) 먼저, 가장 기본이 되는 메인큐이다. 메인이라는 이름에 걸맞게 딱 한개만 존재하며, Serial이다. 2. 글로벌큐(global) 메인과 다르게 6개가 존재하며 기본설정으로는 Concurrent이다. 존재하는 6개의 큐는 Qos에 따라 나누어진다. 여기서 Qos란 Quality of service로 서비스 품질을 의미한다. // 거의 즉시 처리해야하는 작업(UI업데이트, 애니메이션, ..
전체 글
굉장할 나
본 게시물은 앨런의 인프런 강의를 듣고 작성한 글 입니다. 네트워크 통신을 위해 비동기를 접하고 사용하였지만 원리를 제대로 파악하지 못하고 코드만 복사해서 동작하는 나를 발견하고 비동기에 대한 두려움을 없애기 위해 본 강의를 수강하기로 결정하였다. 자가진단표를 읽어봤을 때 대부분 내가 어려워하는 내용으로 구성되어 있었고, 내가 사용하면서 궁금했던 내용들이 많이 있었다. 왜 동시성 프로그래밍이 필요할까? 무언가를 학습하기에 앞서 중요한건 이 개념이 왜 등장했을까를 고민해보는 시간이라고 생각한다. 모든 개념들은 아무 이유 없이 등장한것이 아니기 때문에 그 이유를 아는것은 앞으로의 학습 내용에 큰 밑거름이 되어 줄 것이라고 생각한다. 동시성 프로그래밍이 내게 낯설게 느껴졌던 이유가 이것의 필요성을 몸소 깨닫..
foreground상태 앱이 실행되어 사용자가 앱을 보고 있는 상태 background상태 앱이 실행되어 있지만 사용자가 앱을 보고 있지는 않은 상태 (ex. 음악 재생 중 다른 화면으로 전환) ** background 상태라고 해도 앱이 실행 중이지 않은건 아니다. foreground에 있을 때에는.. 메모리 및 기타 시스템 리소스에 대해서 background보다 높은 우선순위를 가지며 시스템은 이러한 리소스를 사용할 수 있도록 필요에 따라 background 앱을 종료한다. background에 있을 때에는 가능한 적은 메모리공간을 사용해야하며(시스템 리소스 해제, 메모리에서 해제 후 데이터를 디스크에 작성) 우선순위에 의해 foreground task보다 더 낮은 자원을 할당 받는다. 출처: htt..

@main은 프로그램 실행 시작 시 진입점으로 타입을 지정하기 위한 Swift 언어의 기능이다. 사용자는 탑 레벨의 코드를 작성하는 대신 @main단일 유형의 속성을 사용할 수 있고, 라이브러리와 프레임워크는 프로토콜이나 클래스 상속을 통해 맞춤형 진입점 동작을 제공할 수 있다. ** AppDelegate에서 볼 수 있다. @main vs @UIApplicationMain 1. 구조체에서 @main 대신 @UIApplicationMain를 쓴다면 class 선언에만 사용이 가능하다는 오류가 발생! 2. @UIApplicationMain 대신 @main을 사용함으로 타입 기반의 스위프트 코드에서 이상적인 진입점을 알려주며 main() 함수는 일반 정적 메서드이므로 프로토콜에서 확장 메서드 또는 기본 클래스..

UIApplication 싱글턴 객체가 생성됨 UIApplication이란? iOS에서 실행되는 앱의 중앙 집중 제어 및 조정 지점 1. 앱 시작 -> UIApplicationMain()호출 -> 싱글톤 UIApplication 객체 생성 -> shared클래스 메소드 호출 -> 객체에 접근 => 앱 시작하면 UIApplicationMain()이 shared app instance를 만든다. 참고 https://github.com/jwonyLee/TIL/blob/master/iOS/Interview/UIApplicationMain.md https://jinshine.github.io/2018/05/28/iOS/%EC%95%B1%EC%9D%98%20%EC%83%9D%EB%AA%85%EC%A3%BC%EA%B..

App thinning 🤪 앱스토어와 운영체제가 디바이스에 애플리케이션이 설치될때, 앱이 디바이스에 맞게 설치되도록 하는 설치 최적화 기술을 의미한다. 최소한의 디스크 사용과 빠른 다운로드가 가능하다. => 더 빠른 다운로드와 더 많은 공간으로 더 나은 사용자 경험을 제공한다. 종류 🙂 1. Slicing 앱이 지원하는 여러 디바이스에 대해 각각 조각 애플리케이션 번들을 생성하고, 해당 디바이스에 가장 적합한 조각을 전달하는 기술이다. 개발자가 App store connect에 업로드하면, 앱 스토어에서 디바이스 특성에 따라 다양한 버전의 조각들을 생성한다. 그리고 사용자가 그 조각 중에서 가장 알맞은 조각(app variant)을 다운로드 받는 것이다. 사진과 같이 여러 조각으로 나뉜 번들을 필요한 것..

UIViewController UIKit 앱의 뷰 계층 구조를 관리하는 객체 화면 하나를 관리하는 단위 모든 앱은 기본적으로 하나 이상의 뷰 컨트롤러를 가지고 있음 어떤역할?🤔 뷰의 계층을 관리하면서 데이터를 화면에 어떻게 뿌릴지 관리하는 매개체 역할! 뷰에 대한 리소스를 관리함 (이미지, 음성, 진동, 메모리와 같은 리소스) 화면 사이즈, 화면 회전에 대한 대응을 함 => 요런 여러가지 기능을 하기 때문에 ViewController의 역할이 많아지면서 디자인패턴들 사용 (Model, View, ViewController) 뷰는 동작 화면에서는 Storyboard로 구성한 화면만 보이지만, 실제로는 사진과 같은 구조로 많은 층으로 쌓여있다. UIWindowScene -> UIWindow -> UITran..
UserDefaults 애플에서 기본 제공됨 key-value 쌍으로 저장하는 인터페이스 런타인 환경에서만 동작하면서 앱이 실행되는 동안 기본저장소에 접근해 데이터를 기록하고 가져오는 역할을 함 대용량의 데이터보다 단일 데이터(ex 사용자 기본 설정, 로그인 여부 등)를 저장하는데 더 적합 싱글톤 패턴으로 설계되어 앱 전체에 단 하나의 인스턴스만 존재 CoreData 애플에서 기본 제공됨 UserDefaults와 비교하여 좀 더 방대하고 복잡한 데이터를 저장하는데 적합 Data Model을 생성한 후 Entity를 생성한다. SQLite 애플에서 기본 제공되는것이 아닌 외부 라이브러리이며, 비교적 가벼운 데이터 처리가 필요할때 적합 CoreData는 프레임워크인것에 반해 SQLite는 데이터 베이스임 C..