@Sendable
·
iOS/Swift Concurrency
👋 들어가기 전두번 째 attribute는 @Sendable이다. 아무래도 배우는 attribute들의 순서가 고민이 많았는데Conccurency의 가장 기본이 되는 Sendable attribute부터 살펴보자. 🏁 학습할 내용Sendable 프로토콜@Sendable✈️ Sendable 프로토콜 📋 정의 안전하게 공유될 수 있다는 의미는 멀티스레딩 환경에서 안전하게 데이터 공유가 가능하다는 뜻동시성 프로그래밍의 고질적인 문제를 해결할 수 있는 중요한 내용이다. ❓어떻게 채택할 수 있는데? 암묵적으로 채택될 수 있는 타입별 조건은 다음과 같다.값 타입모든 멤버가 Sendable일 때@frozoen이면 안됨 ❌public이면 안됨 ❌열거형모든 멤버 및 associatedValue까지 모두 Send..
@MainActor
·
iOS/Swift Concurrency
👋 들어가기 전첫 번째로 학습할 attribute는 바로 @MainActor이다.🏁 학습할 내용MainActor란@MainActor란✅ MainActor란actor 관련 내요은 https://hamp.tistory.com/212 를 먼저 보고 오는 것을 추천한다. 이제 우리는 Actor의 역할이 무엇인지 간단하게 살펴봤다. 이제는 MainActor를 알아보자.iOS를 하며 Main이라는 접두사를 보면 가장 먼저 떠오르는 것은 바로 메인 쓰레드이다. 여기서도 마찬가지의 의미를 가진다.메인 쓰레드는 프론트엔드 개발에서 UI/UX와 가장 맞닿아 있는 쓰레드이다.❓ MainActor가 없었을 때컨커런시 이전에 스레드 관련 내용은 GCD를 이용하거나, OperationQueue를 활용했다.특히 mainThr..
Actor
·
iOS/Swift Concurrency
👋 들어가기 전먼저 간단한 선행 내용을 먼저 정리한 이후 엘런님 강의를 듣고 나서 다시 한번 더 내용을 채우러 오겠다.🏁 학습할 내용Actor란 무엇인가특징 및 동작방식어떻게 동기화 메커니즘이 가능하지?격리와 비격리Actor 재진입(Reentrancy)Actor ReprioritizationActor Hopping🕴Actor란 무엇인가먼저 여기서 Actor에 관한 내용이 비대해질 경우 별도의 포스팅으로 빼도록 하겠다.현재는 간단하게만 알아보자.🌁 등장 배경먼저 왜 등장하게 되었는지 알아보자.Actor는 WWDC21에서 소개됐다.🧵 동시성 프로그래밍개인적인 생각으로는 서비스가 커지면, 퍼포먼스 향상, 즉 최적화에 대한 열망이 높아지기 마련이다.여기에 큰 영향력을 주는 것이 동시성 프로그래밍인 것 ..
컨커런시 문법 정리
·
iOS/Swift Concurrency
✊프로퍼티계산 프로퍼티에서 async는 get에서 만 사용 가능하다.☝️프로토콜비동기 속성은 get only만 가능하다.✌️함수비동기 함수는  async throw -> return Type 순이다.func asyncFun() async throws -> Int { try await Task.sleep(nanoseconds: 1000) return 1}생성자 역시 함수이기 때문에 비동기가 가능하다. 👍 왜 set에 비동기 적용이 안될까?개인적인 생각으로는 값을 세팅할 때 비동기적으로 동작하면그 값을 사용할 때 어떤 상태인지 신뢰성을 보장할 수 없어 set을 하지 못하게 막는 것 같다.😀 소감 및 마무리정리할만한 내용이 다시 생기면 추가하겠다.
@TaskLocal
·
iOS/Swift Concurrency
👋 들어가기 전정말 오랜만에 컨커린시 관련 포스팅이다.최근에 현생이 정말 정신이 없다.주말은 쉬는 날인데 현재는 평일에 없는 학습시간을 위한 날인 것 같다.정말 침대에 눕고 싶다. ㅋㅋㅋ  잡소리는 그만하고 오늘의 주제로 들어가기 전 간단한 사전 지식을 알아보자.✊@property wrapper프로퍼티 래퍼 정말 무의식적으로 많이 썼고 특히, SwiftUI를 사용할 때많이 쓴 것 같다. 한번 구조를 간단하게 정리해보자.전체적인 내용인 출처 첫번 째 링크를 참고했다.목적프로퍼티 래퍼의 목적은 반복적인 로직을 담당하는 하나의 타입처럼 선언하여프로퍼티의 타입처럼 쉽게 사용할 수 있게 만들어주는 것이다.구조property wrapper는 크게 2가지 프로퍼티를 제공한다.wrappedValue wrappedVa..
Task Cancellation
·
iOS/Swift Concurrency
이전과 차이점기존 GCD를 이용했을 때는 작업을 취소하기가 거의 불가능했거나 많이 번거로웠다.하지만 Swift Concurrency에서는 작업의 취소가 굉장히 편해졌다. 이번 포스팅부터는 컨커런시에서 취소하는 법 정확히는 취소를 전파하고 그 취소에 대한 핸들링하는 법을 알아보자. 종류1. 명시적 취소cancel() 메서드를 통해 자식 작업들에게 취소를 전파2. 암시적 취소자식 작업에서 에러가 발생했을 때특징1. 작업 취소가 가능한 구조는 다음과 같다.동일한 context , Task 안의 Task 또는 Task.detached는 해당되지 않음구조적 동시성 구조 , async let or TaskGroup2. 작업의 취소는 즉각 취소가 아닌 취소되었음을 알리는 행위다.task.canecl()을 통해 T..