전체 글

전체 글

    [RxSwift] Operators - deferred

    Creating 카테고리에 속하는 deferred에 대해서 알아볼 것이다. 공식문서에는 defer라고 되어있지만, RxSwift에서는 deferred로 사용한다. deferred 1. 정의 defer라는 단어의 뜻처럼 옵저버블의 생성을 "지연"하는 역할을 한다. deferred는 옵저버가 구독하기 전까지 옵저버블을 생성하지 않도록 하며, 구독 이후에는 각 옵저버 별로 새로운 옵저버블을 생성해준다. 2. 구현 public static func deferred(_ observableFactory: @escaping () throws -> Observable) -> Observable { Deferred(observableFactory: observableFactory) } 클로저를 통해 옵저블을 생성해주는데..

    [OS] 10. Process Synchronization and Mutual Exclusion 3

    이번엔 하드웨어 쪽에서의 해결책을 살펴보자. Synchronization Hardware TestAndSet(TAS) instruction test와 set을 한 번에 수행하는 기계어이다. Machine instruction (한 번에 수행됨) 실행 중에 interrupt를 받지 않는다 (preemption 안됨!) 여기서 TAS는 값을 반환하고, 값을 바꿔준다. swift로는 약간 이런 느낌..? func TAS(_ target: inout Bool) -> Bool { var temp = target // 이전 값 기록 target = true // 값 변경 return temp // 값 반환 } 즉 초기에는 lock이 false여서 while문을 패스하는데, 이 때 TAS(lock)이 false를 뱉..

    [RxSwift] Operators - Interval, timer

    Creating에 속하는 Interval operator에 대해서 알아볼 것이다. Interval 1. 정의 주어진 시간 간격을 두고 주기마다, emit되는 옵저버블을 생성한다. Interval 연산자의 경우 completed 되지 않고, 무한한 시퀀스를 생성한다. 즉, 직접 dispose 시키지 않는다면 구독 이후에 계속 반복되는 것이다! 2. 구현 Observables의 Timer에서 구현 내용을 살펴볼 수 있다. public static func interval(_ period: RxTimeInterval, scheduler: SchedulerType) -> Observable { return Timer( dueTime: period, period: period, scheduler: schedule..

    [iOS] URLSession을 활용한 비동기 프로그래밍 (with. NASA API)

    URLSession의 구조나 원리, Json 구조, 비동기 프로그래밍에 대해 익숙해지고 싶은 마음과, 더욱 더 잘 활용하고 싶다는 생각에 각종 API들을 활용하여 데이터를 받아와 비동기적으로 처리하는 방법들을 차례대로 학습해보고자 합니다! 어떤 API가 재밌을까 고민하던 찰나에, NASA에서 매일 우주 사진과, 이에 대한 설명을 제공하는 API를 무료로 사용할 수 있다고 하여서 이를 바로 선택해서 진행했습니다! 대략 어떤 플로우로 진행될지 간략하게 보고 바로 시작해봅시다! --------사전 준비-------- 1. NASA Open API : key 발급 2. Json 구조 확인 ---------XCode--------- 3. 데이터 모델 정의 4. API Service 구현 (URLSession) 5..

    [RxSwift] Operators - empty, never, throw

    Creating에 속하는 empty, never, throw에 대해 알아볼 것이다. Empty 1. 정의 empty는 아무 것도 emit하지 않는 옵저버블을 생성하지만 정상적으로 종료시킨다. 즉, 그냥 빈 값으로 종료만 시키는 것! 2. 구현부 public static func empty() -> Observable { EmptyProducer() } final private class EmptyProducer: Producer { override func subscribe(_ observer: Observer) -> Disposable where Observer.Element == Element { observer.on(.completed) return Disposables.create() } } Em..

    [Network] 네트워크 계층 4

    이전에 포워딩 테이블은 라우팅 알고리즘에 의해서 만들어진다고 했었다. 이번 강의에서는 라우팅 알고리즘에 대해서 알아볼 것이다. Routing Algorithms 라우터의 주 역할 중 하나는 포워딩이었다. 포워딩이라는 것은 패킷 내 헤더의 목적지 정보를 보고 포워딩 테이블내 가장 적합한 엔트리와 매칭해서 연결시켜주는 것이다. 즉 A를 B로 보내기 위해 중간에 거쳐야하는 관문 정도로 보면 될 것 같다. 이제는 네트워크를 그림으로만 보지 않고 노드와 간선으로 이루어진 네트워크 그래프로 볼 것이다. 노드는 라우터고, 간선은 링크라고 보면 된다. 이 네트워크 그래프를 보는 이유가 뭘까?? 바로 앞서 말했듯이 포워딩 테이블을 만들기 위해서이다. 어? 그럼 포워딩 테이블의 엔트리는 어떻게 구성해야 좋은거지?? 예를 ..