SWiFT 8

Swift Concurrency #마무리 - 여러 번 보면서 이해한 Swift Concurrency

앞서 Swift Concurrency와 관련된 WWDC 영상을 보며 전반적인 내용을 훑어보았다.나 역시 해당 영상을 여러 번 반복해서 시청했다. 처음에는 잘 이해되지 않던 개념들도, 다시 보면서 조금씩 정리가 되었고, 영상을 본 뒤 한동안 Concurrency를 사용하지 않다 보면 다시 헷갈리는 부분들도 있었다.그럴 때마다 내가 작성했던 필기 내용을 다시 읽으면서 많은 도움을 받을 수 있었다.결국 모르는 내용은 끈기 있게 찾아보고, 스스로 정리하면서 공부하는 방법밖에는 없는 것 같다는 생각이 들었다.영어 블로그도 작성하면서 개념이 또 다시 정리되었고, 복습의 효과가 있어서 개념을 기억하기 좋았던것 같다. 원래는 매주 1블로그 포스팅으로 시작했던 나만의 소소한 프로젝트였는데..ㅎㅎ개인적인 이슈도 있어서 미..

Swift 2026.03.02

Swift Concurrency #7 - AsyncSequence와 AsyncStream

WWDC21: Meet AsyncSequence | AppleAsyncSequence란?AsyncSequence는 본질적으로 async가 적용된 Sequence이다.Sequence: 일반 Sequence와 마찬가지로 정해진 순서를 가진다. 순서가 뒤바뀌거나 임의로 접근(random access)하는 것은 불가능하다.Suspend & Resume: 각각의 요소(element)에 대해 작업을 일시 중단(suspend)하고, iterator가 값을 생성하거나 에러를 방출하면 다시 재개(resume)된다.에러 처리와 종료: 비동기 작업을 수행하므로 에러가 발생할 수 있다. 컴파일러는 이를 일반 throwing 함수와 동일하게 처리한다. 에러가 발생하거나 더 이상 데이터가 없으면 iterator.next()는 n..

Swift 2026.03.02

Swift Concurrency #6 - Data Race 제거하기

WWDC22: Eliminate data races using Swift Concurrency | Apple 우선 위 영상에서 예측하기 어려운 동시성(Concurrency)의 세계를 바다에 비유하여 설명한다.⛵️ Task (배): 바다를 항해하는 배로, 독립적으로 자신의 할 일을 수행.🏝️ Actor (섬): 바다 위 고립된 섬으로, 한 번에 하나의 배(Task)만 접근할 수 있는 안전한 데이터 보관소.🍍 Value Type (파인애플): 복사해서 다른 배로 넘겨줄 수 있는 안전한 데이터 구조체.🐓 Reference Type (닭): 복사본이 아닌 원본 참조를 공유하게 되어 혼란(Data Race)을 유발할 수 있는 클래스 객체. Task와 데이터 격리 (Task Isolation)Task는 독립적..

Swift 2026.03.02

Swift Concurrency #5 - Concurrency와 Thread

WWDC21: Swift concurrency: Behind the scenes | Apple 참고로 해당 포스팅은 기존 Concurrency 영상 리뷰 중 역대급으로 내용이 복잡하고 어렵다...!이전 포스팅을 읽지 않았다면 정독하고 오기를 권장하고, 당장 복잡한 내용을 이해하기 싫다면 스킵하는 것도 나쁘지 않다. 미리 알면 좋은 운영체제 상식CPU는 1개 이상의 코어로 이루어져 있다. (멀티 코어 CPU = 하나의 CPU에 여러개의 코어를 갖는 CPU)1개의 코어는 1개의 Thread를 실행할 수 있다. (hyper threading 기술로 1코어당 스레드 2개씩 돌릴 수 있긴한데.. 여기선 배제한다) CPU는 1개 이상의 코어로 가지며, 코어의 갯수는 CPU 칩에 따라 다르다.Apple watch의 ..

Swift 2026.02.24

Swift Concurrency #3 - Task cancellation과 hierarchy 심화

WWDC23: Beyond the basics of structured concurrency | Apple들어가며Swift Concurrency를 공부하면서 Task.cancel()을 호출하면 모든 작업이 즉시 멈춘다고 막연히 생각하고 있었다.그런데 WWDC 세션 “Beyond the basics of structured concurrency”를 보면서 내가 이해하고 있던 cancellation 모델이 꽤 단순했다는 걸 알게 됐다. 이번 글에서는 Task cancellation이 실제로 어떻게 전파되고, 왜 ‘cooperative’하다고 말하는지, 그리고 그로 인해 등장한 withTaskCancellationHandler까지 헷갈렸던 포인트 위주로 정리해보려고 한다.Task hierarchy와 cance..

Swift 2026.01.14

Swift Concurrency #2 - Structured Concurrency와 Task

WWDC21: Explore structured concurrency in Swift | Apple Swift Concurrency 를 공부하다보면 async-await 외에도 자주 접하는게 Task 라는 녀석이다. 그런데 이게 익숙하지 않던 개념이어서 그런지 확실히 머릿속에 정리하기가 쉽지 않았다. Task { } ?아마 한번이라도 Swift Concurrency 를 시도했던 사람이라면 Task {} 를 본적이 있을 것이다.이 initializer의 용도는 "비동기 코드(async 함수)를 실행하기 위한 새로운 실행 컨텍스트를 제공한다." 라고 한다. 원래 작성되어있던 프로젝트 코드에서 async 함수를 호출하고 싶을 때 냅다 그냥 async 함수를 호출하면 오류가 나는데, async 함수를 Task ..

Swift 2025.10.01

Swift Concurrency #1 - Async와 Await

WWDC21: Meet async/await in Swift | AppleAsync/Await 등장 배경우선 Swift Concurrency를 사용하려면, async-await 를 알아야한다. 그러려면 동기vs비동기 코드의 차이를 알아야 한다.동기 코드와 비동기 코드는 iOS를 개발해봤다면 모를 수가 없다.가장 일반적인 코드 작성 방식이 동기 코드를 작성하는 방법이고, 나중에 이벤트가 발생하면 호출할 코드는 따로 closure 의 형태로 작성하는데 이게 비동기 코드이다. 그래서 보통 오래 걸리는 작업은 비동기 코드를 사용해 언젠지 모르지만 이벤트가 발생하면 그때 처리하도록 하고, 나머지의 일반적인 케이스에서는 동기 코드로 작성하곤한다. 아래처럼 URLSession 의 dataTask 함수가 대표적인 비동..

Swift 2025.09.27

Swift Concurrency #0 - 시작하기 전에

이전에 Swift Concurrency 가 처음 나왔을 때 도입을 시도했었다. 그런데 async 가 연결연결 되는 구조이다 보니까 수정범위가 꽤 많았고, 나도 그때 당시 Swift Concurrency를 완벽히 알고 있던 상황은 아니어서 사이드이펙트 없이 수정할 수 있겠다는 자신이 없었다. 또 이게 화면에 보이는 작업이 아닌 뒷단에서 로직을 개선하는 작업이라 회사입장에서 급하게 적용해야 하는 사항도 아니었고... 등등 다양한 회사 사정도 껴있긴 한데.. 아무튼 이런저런 이유로 당장 프로젝트에 적용하는 건 미루기로 팀 내에서 얘기가 됐었다. 최근 회사 동료한테 Swift Concurrency 스터디 진행한다는 얘길듣고 그 스터디방에서 야금야금 같이 공부하고 있었는데, 이번 프로젝트에 Swift Concur..

Swift 2025.09.27