Concurrency Swift Concurrency는 비동기 프로그래밍을 지원하기 위한 도구로, 코드를 간결하고 효율적으로 작성할 수 있게 도와줍니다. 이 기능은 async와 await 키워드를 사용하여 비동기 작업을 선언하고 처리할 수 있습니다. Swift Concurrency의 동작 방식에 대해 자세히 알아보면 다음과 같습니다. Structured Concurrency: Swift Concurrency는 구조적 동시성(Structured Concurrency)을 지원합니다. 이는 비동기 작업 간의 종속성을 명시적으로 관리하여 프로그램의 실행 흐름을 제어하는 방법입니다. async let 구문을 사용하여 여러 비동기 작업을 동시에 실행하고, await를 사용하여 해당 작업들이 완료될 때까지 대기할 수..
태스크 및 액터를 통해 프로그램을 안전하게 동시에 실행할 수 있는 부분으로 나눌 수 있습니다. 태스크 및 액터의 인스턴스 내부에서 변수 및 프로퍼티 같이 가변 상태를 포함하는 프로그램 부분을 동시성 도메인(concurrency domain)이라고 합니다. 일부 유형의 데이터는 데이터가 가변 상태를 포함하기 때문에 동시성 도메인들 사이에서 공유될 수 없습니다. 하지만 오버래핑 접근에 대해서는 보호되지 않습니다. 한 동시성 도메인에서 다른 도메인으로 공유할 수 있는 타입을 sendable이라고 합니다. 예를 들어, 액터 메서드를 호출할 때 인수로 전달되거나 작업의 결과로 반환될 수 있습니다. 이 장의 앞부분에 있는 예제에서는 동시성 도메인 간에 전달되는 데이터에 대해 항상 안전하게 공유할 수 있는 단순한 값..
태스크를 사용하여 프로그램을 분리된 동시성 조각으로 분할할 수 있습니다. 태스크는 서로 격리되어 있으므로 태스크를 동시에 실행하는 것이 안전하지만 때로는 태스크 간에 일부 정보를 공유해야 합니다. Actor를 사용하면 동시 코드 간에 정보를 안전하게 공유할 수 있습니다. 클래스와 마찬가지로 Actor도 참조 유형이므로 Classes Are Reference Types의 값 유형과 참조 유형 비교는 클래스뿐만 아니라 액터도 적용됩니다. 클래스와 달리 액터는 한 번에 하나의 작업만 변경 가능한 상태에 액세스할 수 있으므로 여러 작업의 코드가 액터의 동일한 인스턴스와 상호 작용하는 것이 안전합니다. 예를 들어, 다음은 온도를 기록하는 액터입니다. actor TemperatureLogger { let label..
Tasks and Task Groups task는 프로그램의 일부(part)로 비동기적으로 실행될 수 있는 작업 단위입니다. 모든 비동기 코드는 일부 작업의 일부로 실행됩니다. 이전 섹션에서 설명한 async-let구문을 사용하면 하위 작업이 생성됩니다. 또한 태스크 그룹을 생성하고 해당 그룹에 하위 태스크를 추가하여 우선 순위 및 취소를 보다 효과적으로 제어하고 동적인 수의 태스크를 생성할 수 있습니다. 태스크는 계층 구조로 정렬됩니다. 태스크 그룹의 각 태스크에는 동일한 상위 태스크가 있으며 각 태스크에는 하위 태스크가 있을 수 있습니다. 태스크와 태스크 그룹 간의 명시적인 관계 때문에 이 접근 방식을 구조화된 동시성(structured concurrency)이라고 합니다. 작업 간의 명시적인 상위-..