컨커런시 문법 정리
·
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..
구조적 동시성 (1)
·
iOS/Swift Concurrency
Structured Concurrency정의구조적이라는게 무슨 뜻일까 ?? 나는 구조적 = 계층적 이란 느낌이  들었다. 계층 구조의 대표적인 구조는 부모 - 자식 구조로 생각할 수 있다.작업들 역시 마찬가지다.  특징작업간의 의존성이 생김 , 자식 작업이 모두 끝나야 부모가 끝날 수 있음부모가 자식 작업을 취소할 수 있음 (취소 전파)context 상속 , [우선순위, 로컬 변수 등]자식 작업의 우선순위가  부모보다 높아지면, 부모 작업도 같이 높아짐이전 코드는 동시성일까?구조적 동시성에 대해 한번 깊게 고민해보자.아래 그림을 보며 생각해보자.너무 간단하다 아래 그림이 동시에 실행되는 구조 같다.우리는 동싱성에 대해 배우고 있는데 그러면 이런식으로 코드를 짰을까 ?? 이번에는 우리가 직접 짰던 코드를 ..
Continuation
·
iOS/Swift Concurrency
Continuation정의 멈췄다가 재개할 수 있는 객체 먼저 애플 공식문서를 살펴보면 동기코드와 비동기코드 사이의 인터페이스 역할을 하는 메커니즘이라고 설명이 되어있다. 즉 , 기존의 코드를 비동기적으로 사용하는데 도움을 주는 역할을 하는 것 같다. 그리고 빨간 영역이 아닌 것을 보면 correctness를 체크하는 것과 하지 않는 것으로 크게 나뉘는 것 같다.  ⚠️ 주의Continuation은 결국 resume이라는 메소드를 통해 인터페이스 역할을 하게되는데 이 resume 메소드는 항상한번만 호출되야한다.  이때 resume메서드가 재대로 한번만 호출되었는지 ? 이런 다양한 오류 체크 여부에 따라 종류가 나뉘게된다.   종류1) CheckedContinuationstruct CheckedConti..
async await
·
iOS/Swift Concurrency
async 키워드비동기 함수를 선언할 때 사용한다.비동기는 멈췄다가 다시 재개 될 수 있는 함수콜뱅방식이 아닌 직접 리턴을 할 수 있다.메인 엑터가 아닐 경우 , 항상 백그라운드 스레드에서 실행된다.비동기 함수내에서 다른 비동기 함수를 호출하면 현재 컨텍스에서 실행됨 , 새로운 컨텍스 생성 x  , 취소 전파가 가능문법func 함수명 async throws(에러를 발생시키면) -> 리턴 타입 { ... }await 키워드비동기 함수를 사용할 때 붙혀준다.Task와 같은 비동기 context에서 사용할 수 있다.potential suspension point 지점이된다.suspendnon - blocking 방식suspend이란, 쓰레드 제어권을 운영체제를 넘겨 다른 일을 처리할 수 있도록 하는 행위를 말..