-
[Swift] Actor #2 - @MainActor (class ์ ๊ฐ์ด ์ฌ์ฉํ๊ธฐ)Swift 2023. 5. 6. 11:57
๐ถ ์ธํธ๋ก
๊ทธ๋ผ ์ค์ ํ๋ก์ ํธ์์๋ ์ด๋ป๊ฒ ์ ์ฉํ๋ฉด ์ข์๊น์?
ViewModel ๋ฑ์ ObservableObject ๋ฅผ ์์ํด์ผํ๊ธฐ์ class ๋ก ๋ง๋ค์ด์ฃผ์ด์ผํฉ๋๋ค.
์ด๋ ๋ฑ์ฅํ๋ ๊ฒ์ด MainActor ์ ๋๋ค. ์ฝ๋๋ ์๋์ ๊ฐ์ต๋๋ค.
class ์ด์ง๋ง actor ์ฑํํ๋ MainActor ๋ฅผ ๋ฐ๋ฅด๊ณ ์๊ธฐ ๋๋ฌธ์ property ๊ฐ์ ์ฐธ์กฐํ ๋ ์์๋๋ก ์คํ์ด ๋ฉ๋๋ค.
๐ป ์์ ์ฝ๋
import Foundation @MainActor class Counter { var count = 0 func increase(times: Int) { for _ in 1...times { Task { count += 1 print(count) } } } } Task { let counter = await Counter() await counter.increase(times: 20) } // ์ถ๋ ฅ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
๐ ์ค๋ช
์๋์ Swift ์์ค์ฝ๋๋ฅผ ๋ณด๋ฉด MainActor -> GlobalActor -> Actor -> AnyActor -> Sendable ๋ฅผ ๋ฐ๋ฅด๊ณ ์์ต๋๋ค.
๊ทธ๋ผ ๋ญ๊ฐ Sendable ์ด๋ ํ๋กํ ์ฝ์ด ๊ฐ์ฅ ์ค์ํ ์ญํ ์ ํ ๊ฒ๊ฐ์ ๊ธฐ๋ถ์ด ๋๋๋ฐ ๋ค์ ๊ธ์์ ํ๋ฒ ์์๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
๐ ์ฐธ๊ณ
'Swift' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Swift] Class Type ๊ฒ์ฌํ๊ธฐ - isMember(of: ) (0) 2023.05.12 TIL - ๋น๋๊ธฐ์๋ ๋น์ฉ์ด ์กด์ฌํ๋ค (2) 2023.05.06 [Swift] Actor (๋น๋๊ธฐ ํ๊ฒฝ์์ Data Race ๋ฅผ ํผํด๋ณด์) - #1 (0) 2023.05.06 [Swift] Protocol ์ ์ฒ์ ๋ถํฐ ๊ณต๋ถํด๋ณด์ (0) 2023.05.02 [Swift] ๋๋ฒ๊ทธ ํ ๋ ์ ์ฉํ ๊ธฐ๋ฅ๋ค (0) 2023.04.28