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

🍎 Apple 101

[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

[RxSwift] Driver, Signal

이번엔 RxCocoa의 Driver와 Signal에 대해 알아보아요. RxCocoa Trait? Driver와 Singal 모두 UI 요소를 위한 기능이지만 Single, Completable, Maybe와 마찬가지로 Observable을 wrapping하여 구성되기 때문에 RxCocoa의 Trait이라고 볼 수 있습니다. 참고 : Trait 포스팅 Driver Driver는 UILayer에서 반응형 작업을 좀 더 직관적으로 사용할 수 있도록 제공되는 개념입니다. Observable은 상황에 따라 BackgroundScheduler를 명확히 지정해주어야하지만, Driver는 MainScheduler로 지정되어 있습니다. UI 관련적용에는 따로 Scheduler를 지정해줄 필요없이 Driver를 사용하여 ..

[RxSwift] ControlProperty, ControlEvent

이번엔 RxCocoa의 ControlProperty와 ControlEvent에 대해 알아보아요. ControlProperty ControlProperty는 Subject처럼 프로퍼티에 값을 주입할 수 있고 동시에 값의 변화도 관찰할 수 있는 타입입니다. 이는 (UIElement).rx를 통해 접근할 수 있습니다. ControlProperty를 사용하면 해당하는 프로퍼티의 변경사항을 데이터 시퀀스로 받아올 수 있습니다. 아래 UITextField+Rx.Swift의 구현 예시를 봅시다. extension Reactive where Base: UITextField { ... public var text: ControlProperty { return value } ... } 내부에 존재하는 text가 Contr..

[RxSwift] Trait (Single, Completable, Maybe)

이번엔 RxSwift의 Trait들에 대해 알아보았습니다. Trait Trait은 Observable을 좀 더 안정성있고 의미있게 표현하기 위한 일종의 Syntax Sugar입니다. 그 종류로는 Single, Completable, Maybe가 있습니다. Observable을 좀 더 좁은 범위로 제한하여 제공함으로써 코드를 더 명시적으로 표현하는 것이죠. 일반적으로 Trait은 아래와 같이 단순히 read-only Observable의 wrapper 형태로 구성되어 있습니다. 이렇게 Observable에 대한 접근을 제한해놓고 내부에 존재하는 Observable를 조정하여 일부 기능에 특화된 형태로 사용자에게 제공합니다. struct Single { let source: Observable ... } S..

[RxSwift] Scheduler

RxSwift의 Relay나 Trait들을 공부하다보니, Scheduler에 관련된 언급이 많더라구요...? 그래서 이번엔 Scheduler에 대해 공부해봤습니다! Scheduler란 Scheduler는 프로세스가 작동하는 context를 추상화한 것입니다. 즉, Cocoa의 GCD와 비슷한 개념이라고 생각하시면 됩니다. 아래는 Scheduler 중 하나인 MainScheduler의 구현 코드입니다. public final class MainScheduler : SerialDispatchQueueScheduler { private let mainQueue: DispatchQueue let numberEnqueued = AtomicInt(0) /// Initializes new instance of `Ma..

[RxSwift] Subject

저번 게시글( [RxSwift] Observable & Operator )에 이어 오늘은 Subject에 대해서 공부해봤어요. Subject Subject는 Observable이자 Observer인 존재입니다. 값을 수동으로 추가할 수 있고, 해당 값을 이를 구독중인 Subscriber에게 발행할 수 있습니다. 아래 예시를 봅시다. example(of: "PublishSubject") { // 1 let subject = PublishSubject() // 2 subject.onNext("Is anyone listening?") // 3 let subscriptionOne = subject .subscribe(onNext: { (string) in print(string) }) // 4 subject.o..

[RxSwift] Observable & Operator

앞선 포스팅( [RxSwift] Reactive Programming & RxSwift )에서는 RxSwift가 무엇인지 그 본질에 대해 알아보았습니다. 제가 저번 포스팅을 하면서 느낀 것은 결국 RxSwift는 Rx를 Swift로 구현한 것일뿐, 절대 Rx와 별개의 것이 아니라는 것입니다. 그래서 오늘부터 그냥 Rx의 공식문서를 읽어보며 Rx 그 본질을 학습하는 시간들을 가져볼까합니다. (그래서 사실은 RxSwift보다는 Rx 학습에 가까울 수는 있습니다... 그래도 RxSwift의 예제도 함께 확인하면서 공부할거예요!) 오늘은 Observable과 Operator과 Operator에 대해 읽고 정리했습니다. Observable Observable은 특정 형태의 데이터의 snapshot을 전달하는 일련..