### Actor의 프로퍼티 / 메서드에 접근할 때 await 키워드를 사용해야 하는 이유 야곰의 말씀대로, Actor는 비동기 환경에서 공유자원을 안전하게 사용하기 위해 나온 타입입니다. 공식 문서([Actors - Swift Language Guide](https://docs.swift.org/swift-book/documentation/the-swift-programming-language/concurrency/#Actors))에 따르면 actor는 클래스와 마찬가지로 참조타입입니다. 하지만 클래스와 다르게 한 번에 오직 하나의 task만이 actor의 mutable state에 접근할 수 있도록 하여 비동기 환경에서 공유 시 발생할 문제점을 예방합니다. [Actor protocol](https://developer.apple.com/documentation/swift/actor)의 공식문서를 보면 Actor protocol은 [Sendable protocol](https://developer.apple.com/documentation/swift/sendable)을 상속받는 것을 확인할 수 있습니다. Sendable protocol을 준수하기 위해서는 4가지 조건이 있었습니다. * Value types * Reference types with no mutable storage * Reference types that internally manage access to their state * Functions and closures (by marking them with @Sendable) 이 중에서 actor가 sendable을 상속받을 수 있는 이유가 되는 항목은 무엇일까요? 저는 3번째 항목이라고 생각합니다. 자신의 상태를 내부적으로만 관리할 수 있는 참조 타입이죠. 해당 문서에서 Sendable Actors에 대한 간단한 설명을 찾아볼 수 있었습니다. > ### Sendable Actors > All actor types implicitly conform to Sendable because actors ensure that all access to their mutable state is performed sequentially. 모든 actor는 mutable state에 대한 모든 접근을 순차적으로 수행되도록 보장한다고 합니다. 그럼 가장 위에서 봤던 내용과 위 내용을 연관지어서 생각해 볼 수 있을 것 같습니다. * 한 번에 오직 하나의 task만이 actor의 mutable state에 접근할 수 있도록 한다. * mutable state에 대한 모든 접근을 순차적으로 수행되도록 보장한다. 비동기적으로 공유하기 위해서 여러 task의 접근을 허용하되 순차적으로 수행되길 기대하려면 어떻게 해결해야 할까요? 여기에서 필요한 것이 async / await이라고 생각합니다. actor 내부의 프로퍼티 / 메서드에 async 키워드를 명시하지 않더라도 암시적으로 async를 붙여주면, 호출 시 await 키워드로 suspend 될 수 있게 되므로 순차적으로 접근이 이루어질 수 있겠죠? 🤔 즉, "Actor에 대한 접근이 한 번에 하나만 순차적으로 수행되는 것을 보장하기 위해 암시적으로 async / await이 활용된다" 라고 정리할 수 있겠습니다. actor의 프로퍼티 / 메서드에 접근할 때 await 키워드를 붙여주는 이유에 대해 이해하는 데에 조금이나마 도움이 됐으면 좋겠습니다! 😊