ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

์˜ค๋Š˜์€ GCD๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด์„œ 

์ฃผ์˜ํ•ด์•ผํ•  ์‚ฌํ•ญ๋“ค์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค~~

 

์‹œ์ž‘ํ•˜๊ธฐ ์ „์— ์ฐธ๊ณ  ์‚ฌํ•ญ์ด ์žˆ๋Š”๋ฐ์š”

 

 

 

๋ฐ˜๋“œ์‹œ main queue์—์„œ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•˜๋Š” ์ž‘์—…

 

์—ฌ๋Ÿฌ๋ถ„๋„ ์ž˜ ์•„๋Š” ์ด์•ผ๊ธฐ๋ผ๊ณ  ์ƒ๊ฐ์ด ๋“œ๋Š”๋ฐ์š”!

UI์ž‘์—…์€ main queue์—์„œ ์ž‘์—…ํ•ด์•ผ ํ•œ๋‹ค๋Š” ์‚ฌ์‹ค์ž…๋‹ˆ๋‹ค!!

 

์ฝ”๋“œ๋กœ ๋ฐ”๋กœ ํ™•์ธํ•ด๋ณผ๊ฒŒ์š”!

DispatchQueue.global().async {
	// image ๋‹ค์šด๋กœ๋“œ task
    
    DispatchQueue.main.async {
    	// UI ๊ด€๋ จ ์ž‘์—…์€ main ์Šค๋ ˆ๋“œ๋กœ ๋ณด๋‚ธ๋‹ค
    	self.imageView.image = image
   }
}

์ด๋Ÿฐ ํ˜•ํƒœ๊ฐ€ ๋ ๊ฒƒ์ž…๋‹ˆ๋‹ค!

 

ํ”Œ๋กœ์šฐ๋ฅผ ๋ณด๋ฉด image ๋‹ค์šด๋กœ๋“œ task๋ฅผ ์ˆ˜ํ–‰ํ•˜๋ฉด ์ž๋™์œผ๋กœ

main thread๊ฐ€ ์•„๋‹Œ ๋‹ค๋ฅธ thread์—์„œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค!

 

๊ทธ๋ž˜์„œ imageView์— image๋ฅผ ๋งตํ•‘ํ•ด์ฃผ๋Š” ์ž‘์—…์„ main queue๋กœ ์ด๋™์‹œ์ผœ ์ค๋‹ˆ๋‹ค!

๋งŒ์•ฝ main ํ๋กœ ๋ณด๋‚ด์ง€ ์•Š๋Š”๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ์š”?

 

Xcode์—์„œ ํ• ๋‹น๋œ thread๋ฅผ ์ธ์‹ํ•˜์—ฌ ๊ฒฝ๊ณ  ๋ฌธ๊ตฌ๋ฅผ ๋ณด์—ฌ์ค„๊ฑฐ์—์š”ใ… 

 

 

๋ฉ”์ธํ์—์„œ ๋‹ค๋ฅธ ํ๋กœ ๋ณด๋‚ผ ๋•Œ Sync๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์•ˆ๋œ๋‹ค

main thread์—์„œ sync ์‚ฌ์šฉํ•˜๋ฉด ์•ˆ๋ผ!

์ด๋ง ์ž์ฃผ ๋“ค์–ด ๋ณด์…จ์ฃ ?

 

๊ทธ ์ด์œ ๋Š” ํ•ด๋‹น task๋ฅผ ๋๋‚ ๋•Œ ๋™์•ˆ UI์ฒ˜๋ฆฌ๊ฐ€ ๋ฉˆ์ถฐ ๋ฒ„๋ฆฌ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค!

์™œ๋ƒ๊ตฌ์š”...? ๋ฐ”๋กœ main queue๋Š” ์ง๋ ฌ ํ์ด๊ณ  sync๋กœ ์ฒ˜๋ฆฌํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— 

ํ•ด๋‹น ์ผ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค(deadlock ๋ฐœ์ƒ)ใ… ใ… 

๊ทธ์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ main thread์—์„œ task๋ฅผ ๋‹ค๋ฅธ ํ๋กœ ๋ณด๋‚ผ๋•Œ์—๋„

sync๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์•ˆ๋˜๊ณ  ๋ฐ˜๋“œ์‹œ async๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค!!

 

 

ํ˜„์žฌ์˜ ํ์—์„œ ํ˜„์žฌ์˜ ํ๋กœ ๋ณด๋‚ผ ๋•Œ Sync๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์•ˆ๋œ๋‹ค

์ด ์ƒํ™ฉ์€ ์–ด๋–ค ์ƒํ™ฉ์ด๋ƒ

๊ทธ๋ฆผ์œผ๋กœ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค!

task1์„ sync๋กœ ํ์— ๋ณด๋‚ด๊ณ  ํ๊ฐ€ ๋‹ค์‹œ ํ•ด๋‹น ์Šค๋ ˆ๋“œ๋กœ ๋‹ค์‹œ task1์„ ๋ณด๋ƒˆ์Šต๋‹ˆ๋‹ค!

์ƒํ™ฉ์„ ์ฐจ๊ทผ์ฐจ๊ทผ ๋ณด์ž๊ตฌ์š”

 

task1์„ sync๋กœ ํ์— ๋ณด๋ƒˆ๋‹ค : thread2๋Š” task1์ด ๋๋‚  ๋•Œ ๊นŒ์ง€ ๋Œ€๊ธฐ์ž…๋‹ˆ๋‹ค.

ํ๊ฐ€ ๋‹ค์‹œ ํ•ด๋‹น ์Šค๋ ˆ๋“œ๋กœ ๋‹ค์‹œ task1์„ ๋ณด๋ƒˆ์Šต๋‹ˆ๋‹ค : thread2๋Š” ๋Œ€๊ธฐ์ค‘์ด๊ณ  ๋ฐ›์€ task1์€ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

 

์ด๋ ‡๊ฒŒ ๋˜๋ฉด ๊ต์ฐฉ์ƒํƒœ(Deadlock)๊ฐ€ ๋ฐœ์ƒํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

 

 

์ˆœํ™˜ ์ฐธ์กฐ ๋ฌธ์ œ๋ฅผ ์ฃผ์˜ํ•ด๋ผ

์ˆœํ™˜ ์ฐธ์กฐ๋ฉด... ๋ฐ”๋กœ ARC๋กœ ๋ถ€ํ„ฐ ๋ฐœ์ƒํ•˜๋Š” ๊ฐ•ํ•œ์ˆœํ•œ์ฐธ์กฐ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค!

ARC๋ฅผ ๋ชจ๋ฅด์‹ ๋‹ค๋ฉด ์—ฌ๊ธฐ๋ฅผ ํ™•์ธํ•ด ์ฃผ์„ธ์š”

์–ด๋–ค ์ƒํ™ฉ์ธ์ง€ ๋ณด์‹œ์ฃ !

 

์šฐ๋ฆฌ๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” DispatchQuque๋ฅผ ์ž์„ธํžˆ ๋ณด์‹œ๋ฉด

๊ฒฐ๊ตญ ํด๋กœ์ €๋กœ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๊ณ 

ํด๋กœ์ €์—์„œ ๊ฐ•ํ•œ ์ˆœํ™˜ ์ฐธ์กฐ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฐ์ฒด ์บก์ฒ˜ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

 

๊ทธ๋ ‡๊ฒŒ ๋•Œ๋ฌธ์— [weak self]๋ฅผ ํด๋กœ์ € ์‹œ์ž‘์— ๋ถ™์—ฌ์ค˜์•ผ ํ•ฉ๋‹ˆ๋‹ค!

DispatchQueue.global(qos: .utility).async { [weak self] in
	guard let self = self else { return }
    // ์ž‘์—… ๊ณ ๊ณ 
}

์š”๋ ‡๊ฒŒ ๋ง์ด์ฅฌใ…Žใ…Ž

 

 

๊ธ€ ์ฝ์–ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

 

 

์ฐธ์กฐ : https://www.inflearn.com/course/iOS-Concurrency-GCD-Operation/dashboard

 

iOS Concurrency(๋™์‹œ์„ฑ) ํ”„๋กœ๊ทธ๋ž˜๋ฐ, ๋™๊ธฐ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ ๊ทธ๋ฆฌ๊ณ  GCD/Operation - ๋””์ŠคํŒจ์น˜ํ์™€ ์˜คํผ๋ ˆ์ด์…˜

๋™์‹œ์„ฑ(Concurrency)ํ”„๋กœ๊ทธ๋ž˜๋ฐ - iOSํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ ํ•„์š”ํ•œ ๋™๊ธฐ, ๋น„๋™๊ธฐ์˜ ๊ฐœ๋… ๋ฐ ๊ทธ๋ฅผ ํ™•์žฅํ•œ GCD ๋ฐ Operation์— ๊ด€ํ•œ ๋ชจ๋“  ๋‚ด์šฉ์„ ๋‹ค๋ฃน๋‹ˆ๋‹ค., - ๊ฐ•์˜ ์†Œ๊ฐœ | ์ธํ”„๋Ÿฐ...

www.inflearn.com

 

 

 

๋Œ“๊ธ€
๊ณต์ง€์‚ฌํ•ญ
์ตœ๊ทผ์— ์˜ฌ๋ผ์˜จ ๊ธ€
์ตœ๊ทผ์— ๋‹ฌ๋ฆฐ ๋Œ“๊ธ€
Total
Today
Yesterday
๋งํฌ
ยซ   2026/03   ยป
์ผ ์›” ํ™” ์ˆ˜ ๋ชฉ ๊ธˆ ํ† 
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
๊ธ€ ๋ณด๊ด€ํ•จ