구조적 동시성 (1)
·
iOS/Swift Concurrency
Structured Concurrency정의구조적이라는게 무슨 뜻일까 ?? 나는 구조적 = 계층적 이란 느낌이  들었다. 계층 구조의 대표적인 구조는 부모 - 자식 구조로 생각할 수 있다.작업들 역시 마찬가지다.  특징작업간의 의존성이 생김 , 자식 작업이 모두 끝나야 부모가 끝날 수 있음부모가 자식 작업을 취소할 수 있음 (취소 전파)context 상속 , [우선순위, 로컬 변수 등]자식 작업의 우선순위가  부모보다 높아지면, 부모 작업도 같이 높아짐이전 코드는 동시성일까?구조적 동시성에 대해 한번 깊게 고민해보자.아래 그림을 보며 생각해보자.너무 간단하다 아래 그림이 동시에 실행되는 구조 같다.우리는 동싱성에 대해 배우고 있는데 그러면 이런식으로 코드를 짰을까 ?? 이번에는 우리가 직접 짰던 코드를 ..
특정 시기에 아이콘 자동 변경하기
·
iOS/UIKit
문제점왁타버스 뮤직팀에서 할로윈과 크리스마스 등 ,  다양한 이벤트가 있을 때 다양한 컨셉의 앱 아이콘을 적용했습니다.당연히 우리는 앱의 큰 업데이트 없이 단지 로고 하나 교체하기 위해 심사를 넣었습니다. 하지만 찾아보니 앱에 접속하기만한다면 코드로 갱신을 할 수 있더군요..  과정과정은 크게 3가지 스텝을 거친다. 1.  앱 아이콘 추가하기 당연히 앱 아이콘을 변경하기 위해서는 그 리소스가 필요하다.여기서 앱 아이콘의 이름을 꼭 기억해야한다.  2.  build settings을 통해 등록하기 기본 프로젝일경우target - Asset Catalog Compiler Options - Alternate App Icon Sets에 위에 추가한 아이콘을 명시한다. tuist 이용tuist를 이용하면  Set..
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이란, 쓰레드 제어권을 운영체제를 넘겨 다른 일을 처리할 수 있도록 하는 행위를 말..
swift concurrency 등장배경
·
iOS/Swift Concurrency
기존의 비동기 방식 및 등장 배경기존의 코드는 탈출 클로저를 사용해서 비동기를 처리했다.조금 극단적이긴하지만 보통 다음과 같은 상횡이다. 여기에는 크게 4가지 문제점이 있다.  1. 중첩된 콜백 첫번째 문제점은 중첩된 콜백형태가 코드 가독성이 top -down approch에 위배된다.코드는 보통 위에서 아래로 읽게 되는데 콜백이 중첩되면 아래에서 위로 올라가는 구조가 발생된다. 2. 에러 핸들링에러가 발생할 때 탈출 메서드에 에러 관련 처리를 해줘야하는데 그 과정이 매우 번거롭다. async , await을 이용해서 위 코드를 리팩할 수 있다. 코드 가독성과 에러 헨들링이 비약적으로 상승되는 효과를 볼 수 있다.  3. thread explosion 기존 GCD에서 Concurrent Queue를 사용..
Task
·
iOS/Swift Concurrency
Task정의A unit of asynchronous work. @frozenstruct Task where Success : Sendable, Failure : Error 구조체로 만들어진 비동기 작업 단위독립적인 스레드에 할당되도록한다.작업은 병렬적으로 일처리를 진행구조1. 리턴 값let task: Task = Task { return "String"}작업 성공 시 결과 값Success와 Failure를 지정해줄 수 있다. 여기서 리턴 값은 Success에 해당되는 부분이다.변수.value 를 이용해서 얻어 낼 수 있다.위 코드에서는 String에 해당된다.2. 결과 값리턴 값과 혼동이 될 수 있지만 말그대로, Result 형태로 받는다.변수.result로 얻을 수 있다.Task 블럭 내에서 발생..