[회고] 신입 iOS 개발자가 되기까지 feat. 카카오 자세히보기

🍎 Apple 97

[UIKit] View Drawing Cycle

참고 https://tech.gc.com/demystifying-ios-layout/ https://jeonyeohun.tistory.com/336 View의 Drawing Cycle이란 View가 로드되거나 변경이 생겼을 때 이를 화면에 적용시켜 그리는 과정을 뜻합니다. 이들은 즉각적으로 처리되지 않고, Main Run loop에 의존적인 형태를 가집니다. Main Run loop iOS의 이벤트는 각 스레드마다 존재하는 Run loop를 통해 처리됩니다. 발생하는 이벤트들이 모두 시스템상의 이벤트큐에 들어가고, Run loop가 돌아가면서 이들을 하나씩 가져와 처리하는 방식입니다. 그 중에서도 Main Run loop는 사용자의 입력 이벤트를 처리하고 적절한 응답을 트리거하는 역할을 수행합니다. Up..

🍎 Apple/UIKit 2022.03.16

[Swift] Actor

참고 및 출처 https://docs.swift.org/swift-book/LanguageGuide/Concurrency.html https://medium.com/hcleedev/swift-actor%EB%9E%80-f8f58c68dab9 https://zeddios.tistory.com/1290 Actor class Counter { var count: Int = 0 func increment() { self.count += 1 } } 이런 경우에 let counter = Counter() DispatchQueue.global().async { counter.increment() } // global counter.increment() // main 이런식으로 2개의 스레드에서 동시 접근을 하면 Xc..

[Swift][문서의역] Task

참고 및 출처 https://developer.apple.com/documentation/swift/task/ https://www.avanderlee.com/concurrency/tasks/ Task & TaskGroup Task 인스턴스를 생성할 때 해당 Task가 수행할 작업을 포함하는 클로저를 함께 제공하게 됩니다. Task는 생성 직후 실행을 시작할 수 있습니다. 명시적으로 시작하거나 예약하지 않아도 됩니다. Task를 만들면 해당 인스턴스를 사용하여 작업과 상호작용합니다. 예를 들어 Task의 작업이 완료될 때까지 기다리거나 취소할 수 있습니다. Task의 작업이 완료될 때까지 기다리거나 취소할 때까지 기다리지 않고 Task에 대한 참조를 버리는 것은 프로그래밍적 에러가 아닙니다. Task는..

[Swift][문서의역] Concurrency (async & await)

참고 및 출처 https://docs.swift.org/swift-book/LanguageGuide/Concurrency.html Concurrency Swift는 구조적 방식으로 비동기(asynchronous) 및 병렬(parallel) 코드 작성을 지원했습니다. 비동기 코드는 한번에 프로그램의 한 부분만 처리되지만 정지 및 재실행이 가능합니다. 네트워크에서 데이터를 가져오거나 파일을 읽어오는 등의 긴 기간의 연산을 하는 동안 UI를 갱신하는 등의 비교적 단기간의 연산을 수행할 수 있습니다. 병렬 코드는 여러개의 코드들을 동시에 실행할 수 있습니다. 예를 들어 4개의 코어를 가진 프로세서는 각 코어마다 하나의 코드를 배치하여 동시에 4개의 코드를 실행할 수 있는 것입니다. 병렬 및 비동기 코드는 유연하..

[Swift] Generic

Swift - Generic Generic을 사용하면 좀 더 유연하게 Funtion 및 Type을 작성할 수 있습니다. 중복을 피하고 그 의도를 추상적인 방식으로 표현하는 코드를 작성합니다. 아래와 같은 방식으로 사용합니다. func swapTwoValues(_ a: inout T, _ b: inout T) { let temporaryA = a a = b b = temporaryA } 이름은 자유롭게 지정할 수 있습니다. 일반적으로는 T,U,V와 같은 단일 문자를 많이 사용합니다. Generic 뒤에 단일 클래스 혹은 프로토콜을 배치하여 Generic의 타입을 제한할 수도 있습니다. func someFunction(someT: T, someU: U) { // function body goes here }..

🍎 Apple/Swift 2022.03.07

[Swift] NotificationCenter

NotificationCenter NotificationCenter는 등록된 Observer에게 정보를 broadcast해주는 역할을 수행합니다. addObserver(_:selector:name:object:) 혹은 addObserver(forName:object:queue:using:) 메서드를 통해 알림(NSNotification 객체)을 받을 객체를 등록할 수 있습니다. 이 때 어떤 알림을 받아야하는지도 지정합니다. 따라서 하나의 객체에 이 메서드를 여러번 호출하는 것으로 여러 알림에 대한 Observer 역할을 하나의 객체가 동시에 수행하도록 할 수 있습니다. 실행중인 각 앱마다 default notification center가 존재하며, 필요할 경우 새로운 notification center..

🍎 Apple/Swift 2022.03.07

[Swift] KVC(Key-Value Coding), KVO(Key-Value Observing)

KVC(Key-Value Coding) KVC(Key-Value Coding)이란, Key 혹은 KeyPath를 통해 간접적으로 데이터를 가져오거나 수정하는 방법입니다. Key는 String이며 일반적으로 객체 내에 정의된 method, property의 이름이 됩니다. 또한 아스키로 인코딩이 가능하며 소문자로 시작, 공백이 없어야합니다. struct Address { var town: String } struct Person { var address: Address } let seoul = Address(town: "건대입구역") let inu = Person(address: seoul) let inuAddress = inu[keyPath: \.address] let inuTown = inu[keyPa..

🍎 Apple/Swift 2022.03.01

[Swift] Monad

ContextSwift의 Monad에 대해 이해하기 위해서는 먼저 Context와 Content의 관계에 대해 이해해야 합니다. Content는 Context에 들어갈 수 있는 '어떤 것'이며, Context는 Content를 보관할 수 있는 '어떤 것'입니다. 상당히 포괄적인 개념이기에 저 그림에 보여지는 관계정도만 이해해도 충분합니다. 어쨌든 핵심은 Context에 무언가를 담을 수 있다는 것이죠.Collection들은 Context입니다. 내부에 인자들을 담을 수 있기 때문입니다.Optional 또한 Context입니다. 내부에 값을 보유할 수 있기 때문입니다.Functor다음으로 알아야하는 것은 Functor입니다. Functor는 고차함수 map을 적용할 수 있는 모든 컨테이너 타입을 의미합니다..

🍎 Apple/Swift 2022.03.01

[RxSwift] Relay (PublishRelay, BehaviorRelay, ReplayRelay)

안녕하세요 이누입니다. 오늘은 Relay입니다! RxSwift - Relay Relay는 RxSwfit가 아니라 RxCocoa에 속하는 개념입니다. 그 종류에는 PublishRelay, BehaviorRelay, ReplayRelay가 있습니다. Subject는 .completed, .error의 이벤트가 발생하면 subscribe가 종료되는 반면, Relay는 .completed, .error를 발생하지 않고 Dispose되기 전까지 계속 작동하기 때문에 UI Event에서 사용하기 적절합니다. Subject를 Wrapping하는 형태로 구성되어 있습니다. 요약) UI에 사용하기 좋은 Subject의 변형. 내부에 Subject 들고 있음. PublishRelay /// PublishRelay is a..

[Swift] Property Wrapper

Property Wrapper Property Wrapper는 반복적으로 필요로하는 property 구현 패턴(getter,setter)에 대한 집합을 컴파일러에 하드코딩해놓고, 이를 라이브러리로 정의할 수 있는 일반적인 메커니즘을 제공하는 기능입니다. Property wrapper는 프로퍼티가 저장되는 방식을 관리하는 코드와 프로퍼티를 정의하는 코드 사이에 새로운 분리 계층을 추가합니다. 개발을 진행하다보면 Thread-safe한 프로퍼티 또는 값을 DB에 저장하는 프로퍼티가 여러개 필요한 경우가 있을 것입니다. 이를 위해서는 각각의 프로퍼티 모두에 해당 처리들을 위한 코드를 작성해야 했습니다. Property wrapper를 사용하게되면 이런 값 저장을 관리하는 코드들을 Property wrapper..

🍎 Apple/Swift 2022.02.24