안녕하세요!
오늘은 Swift concurrency와 Actor에 대해 설명하는 글을 남겨봅니다.
두 기능은 이제 나온지가 오래됬다고 말할 수 있는데요, 사용할 일이 없다고 생각하게 되는 점점 멀어지는 느낌입니다.
하지만, 해당 기능이 생겨나게된 이유를 살펴보는 과정에서 훌륭한 기능이라고 생각하게됬습니다.
잘 정리하여 여러 곳에 활용할 수 있겠다고 생각하였습니다.
Swift concurrency는 왜 등장했을까?
이 부분에 대해서는 많이 들으셨을 꺼라고 생각합니다. 🤔
기존의 비동기 코드 실행방식인 GCD의 문제를 해결하려는 시도가 보입니다. 간략하게 살펴보겠습니다.
☑️ CPU오버헤드
GCD와 가장 큰 차이점은 역시 쓰레드를 어떻게 활용하는가입니다.
쓰레드가 많아지면 다음과 같은 문제가 발생합니다.
쓰레드는 리소스를 가짐으로 다수의 쓰레드는 곧 메모리 낭비입니다.
또한 쓰레드가 디바이스의 코어 수보다 많아질 경우 별도의 스케쥴링 알고리즘이 필요하게됩니다.
즉, CPU리소스가 낭비되게 됩니다.
☑️ 가독성
성능적인 문제 이외에도 가독성을 들 수 있습니다.
Combine과 같은 스트림을 사용하지 않는다는 전제 하에 흔히말히는 콜백 지옥보다는 가독성이 높다는 이유가 있습니다.
Sendable은 대채 무엇일까?
Sendable에 대해서 다들 한번쯤은 들어보신적이 있으실 것입니다.
Swift concurrency는 비동기 작업의 단위로 Task라는 객체를 사용합니다.
Task들은 동시에 처리될 수 있는 단위라고 생각하시면 됩니다.
Sendable은 동시에 처리되는 Task들이 안전하게 동일한 리소스에 접근하게 하기 위한 가이드라인 입니다.
따라서, 값타입 혹은 수정이 불가능한 참조타입등이 Sendable프로토콜을 채택할 수 있습니다.
왜냐? 이것들은 동시성환경에서 공유되어도 문제가 발생시키지 않기 때문입니다.
이것을 명시적으로 표한한 프로토콜이 바로 Sendable입니다.
그런데,, 상태가 변하지 않는 것을 공유하는 것이 생각보다 큰 의미를 가지지 못합니다.
우리는 동시성 환경에서 가변적인 데이터 스토어를 공유하는 상황이 훨씬 많거든요.
그래서 등장한 것이 무엇일까요?
Actor는 왜 있는 것일까?
해당 제목에 대한 답은 이전 내용을 통해 파악하실 수 있을 것이라고 생각합니다.
Actor는 동시성 환경에서 가변 데이터 스토어를 공유하기 위해 존재하는 개념입니다.
Actor에 접근한는 것은 특정 Task로부터 파생된 코드입니다.
Actor는 이러한 접근을 직렬화 하는 기능을 수행합니다.
따라서 동시성환경의 Task들이 안전하게 가변하는 데이터에 접근할 수 있게 되는 것이지요!
아래글을 몇번이나 읽고서야 이해를 하게된 듯 합니다.
Swift concurrency를 저의 라이브러리에 적용하는 여정을 다음글로 담겠습니다.
감사합니다~!
[Swift] Actor 뿌시기
근데 이제 async, Task 를 곁들인..
sujinnaljin.medium.com
'iOS공통' 카테고리의 다른 글
[iOS] 클라이언트에서 API키를 숨기는 방법들(with 코드 난독화) (0) | 2025.03.25 |
---|---|
[iOS] '오르비 알람' 프로젝트 진행과정 회고(기획, 협업, 개발) (0) | 2025.03.25 |
[iOS] fastlane을 사용하며 겪은 일들(with Tuist) (0) | 2025.01.02 |
[iOS] 나만의 이미지 캐싱 SDK만들기(다운샘플링, 디스크 & 메모리 캐싱) (0) | 2024.11.22 |
[iOS] Fun하지 않은 정적/동적 라이브러리와 Symbol (3) | 2024.10.31 |