본문 바로가기

전체 글55

Self-deallocating Coordinator Pattern으로 변경 이유 기존 프로젝트에서 Coordinator Pattern을 적용해서 ViewController로부터 화면전환에 대한 책임을 분리시켜주고 있었습니다. 그리고 오늘 하나의 의문점을 바탕으로 기존의 Coordinator Pattern방식에서 조금 변형된 Self-deallocating방식으로 변경하기로 결정했습니다. 오늘은 그 결정을 내리기까지의 과정을 한번 정리해보고자 합니다. 꽤나 두서없는 글이 될 수도 있을 것 같지만 한번 가봅시다. 사건의 발달 protocol Coordinator : AnyObject { var parentCoordinator: Coordinator? { get set } var children: [Coordinator] { get set } var navigationController .. 2023. 12. 14.
[OS] Scheduling: Multi Level Feedback Queue (MLFQ) 이전 글에서 프로그램을 실행해보기도 이전에 프로그램의 실행 시간을 아는 것은 현실적으로 불가능한 이야기이므로 SJF와 STCF같은 정책들이 Optimal하지만 다른 방법을 탐색했어야했습니다. 따라서 "실행 시간을 몰라도 SJF/STCF처럼 효율적이고, Round Robin처럼 공정한 스케줄링 정책은 없는 걸까 "라는 의문을 남긴채 글을 마무리했었습니다.  그 의문을 해소하고자 Multi-Level Feedback Queue(MLFQ)가 등장하게 됩니다.MLFQ의 목적은 두가지입니다.turnaround time(반환 시간)의 최적화 like SJF(or STCF)response time(반응 시간)의 최적화 like RR즉, 반환시간과 반응시간 두가지의 성능 지표 모두를 노려보는 방법입니다. MLFQ: B.. 2023. 12. 11.
Async/await와 Combine 함께 쓰기 (Network Layer) async await를 통해서 구축되어있는 프로젝트 환경에서 저희는 Combine과 async await을 함께 쓰기로 결정하였습니다. 그 이유인 즉, async await과 Combine은 각각의 명확한 장점을 가진 방법들이었고, 그 장점들을 모두 얻고자 하였기 때문입니다. async await의 경우 Swift Concurrency를 본격적으로 활용해서 비동기 로직을 보다 효율적으로 사용할 수 있는 장점이 있었고, 이를 통해서 얻은 데이터를 Observing하다가 UI에 반영해주기 위해선 Observing에 특화된 Combine을 사용하여 그 장점을 얻을 수 있었습니다. 이 이유에 대한 이야기는 아래 글에서 조금 더 자세히 다루고 있습니다. https://codingmon.tistory.com/70 .. 2023. 12. 5.
[Combine] AnyCancellable과 cancel의 동작 파헤치기 + cancelBag을 쓰는 이유 (ft. OpenCombine) 정말 오랜만에 다시 Combine 이야기로 돌아왔습니다. 오늘 다룰 주제는 Cancellable과 cancel에 대한 이야기입니다. 글의 시작배경과 함께 이번에는 바로 시작해보겠습니다 ! 시작 배경. 구독을 취소한다, 더 이상 Publisher로부터 값을 받지 않기 위해서 subscriber는 구독을 "취소"합니다. 이 때 저희는 cancel() 메서드를 쓰게 됩니다. 예시와 함께 살펴보겠습니다. let publisher = PassthroughSubject() let cancellable = publisher .sink { num in print(num) } cancellable.store(in: &cancelBag) publisher.send(1) publisher.send(2) publisher.s.. 2023. 12. 2.