본문 바로가기

iOS14

@MainActor, @globalActor 조금 더 이해하기 @MainActor, @globalActor 는 결국 actor의 종류이다. 우선 actor를 왜 쓸까? 비동기적인 상황에서 concurrency를 보장해주기 위해서 사용하는 것이다. @MainActor의 경우, 진행되는 동작을 Main thread로 보내고, thread safe하게 동작함을 보장한다. (DispatchQueue.main의 역할과 비슷) @MainActor와 동일한 이유로, @globalActor 역시, 해당 globalActor를 사용하게 되면 background에서 진행되는 동작들의 concurrency를 보장하고 해당 @globalActor를 전역변수로 만들어 @MainActor를 사용할 때와 동일하게 어떤 상황에서도 사용하기 쉽게 만드는 것이다. 'MainActor.run'이 사.. 2022. 12. 23.
Sendable 프로토콜에 대해! 2023.10.04 1차 수정 프로토콜 중 하나인 Sendable! 써져있는 그대로 Sendable하다는 것이다. 두괄식으로 말하자면! 비동기상황에서 값을 전달할때, 전달하는 값이 thread safe해서 변경될 여지가 없다고 보장하는 표시이다! 그럼 어떤 상황에서 Sendable을 명시적으로 적어줘야 할까? 간단한 예시와 알아보자! actor CurrentUserManager { func updateDataBase(userInfo: String) { } } class SendableViewModel: ObservableObject { let manager = CurrentUserManager() func updateCurrentUserInfo() async { await manager.updateDat.. 2022. 12. 20.
class대신 actor가 요긴한 상황! 해당 글은 Actor에 대한 아주 기본적인 이해만 있다면 이해하는 데 아무 문제가 없습니다! Actor에 대해서 알아보고, 알아봤다는 현상만이 내 머리 속에 남았는데.. 그중 생각나는 중요한 부분이! Class와 거의 동일한 부분이 많았지만, Class가 thread safe 하지 않다면, Actor는 thread safe하다는 것이다. 그래서..! 아 그럼 Actor가 나온 배경은 Class의 thread safe문제를 해결 할 수 있어서 나왔겠구나! 라고 생각하게 되었고, 실제로 탄생 배경이 그러했다. 그럼, 이 글에서는 1. 어떤 문제를 Actor가 풀어야 했는지! 2. 그래서 Actor가 있기 전에도 동일한 문제가 있었을텐데 어떻게 해당 문제가 풀리고 있었는지 3. 그 문제를 Actor를 활용해서.. 2022. 12. 19.
Async Await 네트워크와 통신을 하며, 서버에서 가져오는 데이터들을 사용자들의 불편함 없이 앱에 잘 보여주기 위해서는 비동기처리가 필수이고 매우 중요하다고 생각한다. 때문에, Concurrency 공부를 시작한다! Async Await는 기존의 Completion handler인 @escaping closure의 불편함을 개선하기 위해 Swift5.5 버전에서 업데이트 되었다고 한다. @escaping closure의 불편함으로는, 1. 한번 실행될 때마다 들여쓰기가 되어 안에서 분기 처리가 되면 가독성이 떨어지게 됨 2. 코드만 보고는 해당 줄이 비동기 처리가 되고 있는 코드인지 잘 알 수 없음 3. @escaping closure의 parameter syntax(@escaping(String) -> ())가 어려움.. 2022. 12. 3.