Swift Concurrency

CodeCat·2024년 9월 12일
post-thumbnail

안녕하세요 !

이번에는 Swift Concurrency 라는 주제로 이야기해보려합니다

Swift 동시성 프로그래밍

Swift의 동시성 프로그래밍은 지난 몇 년간 많은 변화가 있었고 초기에는 개발자가 직접 Thread를 관리해야 했지만, 점차 더 안전하고 효율적인 동시성 모델이 등장하기 시작했습니다

Thread 시대

처음에는 개발자가 Thread 객체를 직접 생성하고 관리했습니다

Thread.detachNewThread {
  print(Thread.current)
}

이 방식에는 문제점이 있었는데요

  • Thread 간 작업 조율이 어려움
  • 무한정 Thread를 생성할 수 있어 CPU 자원을 낭비할 위험이 있음
  • Non-blocking 지원이 없어 불필요한 대기 시간이 발생

GCD의 등장

2009년 Grand Central Dispatch(GCD)가 도입되면서 동시성 프로그래밍이 한 단계 발전했습니다

let queue = DispatchQueue(label: "com.example.queue")
queue.async {
    // 비동기 작업
}

GCD의 장점

  • 작업 단위의 추상화로 Queue 개념 도입
  • Non-blocking 방식 지원으로 효율성 향상
  • DispatchGroup을 통한 작업 그룹화 가능

하지만 GCD도 완벽하지는 않다

  • 여전히 data race 위험이 존재
    = 과도한 스레드 생성 가능성이 있음
  • 장기 실행 작업이 다른 작업을 차단할 수 있음

Swift Concurrency의 탄생

WWDC 2021 Swift Concurrency가 소개되면서 동시성 프로그래밍이 많이 개선되었습니다

func fetchData() async throws -> Data {
    // 비동기 네트워크 요청
}

Task {
    do {
        let data = try await fetchData()
        // 데이터 처리
    } catch {
        // 에러 처리
    }
}

Swift Concurrency

  • async/await 키워드로 비동기 코드를 동기 코드처럼 작성 가능
  • 구조화된 동시성으로 작업 간 관계를 명확히 표현
  • 시스템 레벨의 스레드 관리로 효율성 극대화

이러한 발전으로 Swift에서의 동시성 프로그래밍은 더욱 안전하게 변화해왔고

개발자는 비즈니스 로직에 집중할 수 있게 되었습니다!!

이상으로 포스팅 마무리 하겠습니다.

.
.
.

감사합니다.

profile
코드와 고양이의 만남

0개의 댓글