안녕하세요 !
이번에는 Swift Concurrency 라는 주제로 이야기해보려합니다
Swift의 동시성 프로그래밍은 지난 몇 년간 많은 변화가 있었고 초기에는 개발자가 직접 Thread를 관리해야 했지만, 점차 더 안전하고 효율적인 동시성 모델이 등장하기 시작했습니다
처음에는 개발자가 Thread 객체를 직접 생성하고 관리했습니다
Thread.detachNewThread {
print(Thread.current)
}
이 방식에는 문제점이 있었는데요
- Thread 간 작업 조율이 어려움
- 무한정 Thread를 생성할 수 있어 CPU 자원을 낭비할 위험이 있음
- Non-blocking 지원이 없어 불필요한 대기 시간이 발생
2009년 Grand Central Dispatch(GCD)가 도입되면서 동시성 프로그래밍이 한 단계 발전했습니다
let queue = DispatchQueue(label: "com.example.queue")
queue.async {
// 비동기 작업
}
- 작업 단위의 추상화로 Queue 개념 도입
- Non-blocking 방식 지원으로 효율성 향상
- DispatchGroup을 통한 작업 그룹화 가능
- 여전히 data race 위험이 존재
= 과도한 스레드 생성 가능성이 있음- 장기 실행 작업이 다른 작업을 차단할 수 있음
WWDC 2021 Swift Concurrency가 소개되면서 동시성 프로그래밍이 많이 개선되었습니다
func fetchData() async throws -> Data {
// 비동기 네트워크 요청
}
Task {
do {
let data = try await fetchData()
// 데이터 처리
} catch {
// 에러 처리
}
}
Swift Concurrency
- async/await 키워드로 비동기 코드를 동기 코드처럼 작성 가능
- 구조화된 동시성으로 작업 간 관계를 명확히 표현
- 시스템 레벨의 스레드 관리로 효율성 극대화
이러한 발전으로 Swift에서의 동시성 프로그래밍은 더욱 안전하게 변화해왔고
개발자는 비즈니스 로직에 집중할 수 있게 되었습니다!!
이상으로 포스팅 마무리 하겠습니다.
.
.
.
감사합니다.