๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐ŸŽ iOS/iOS

[iOS ๋ฉด์ ‘์งˆ๋ฌธ] GCD๋ž€? - ๊ฐœ๋…

by Fomagran ๐Ÿ’ป 2020. 12. 18.
728x90
๋ฐ˜์‘ํ˜•

์•ˆ๋…•ํ•˜์„ธ์š” Foma ์ž…๋‹ˆ๋‹ค!

 

์˜ค๋Š˜ ์•Œ์•„๋ณผ ์ฃผ์ œ๋Š” GCD(Grand Central Dispatch)์ž…๋‹ˆ๋‹ค.

 

๋ฐ”๋กœ ์‹œ์ž‘ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

Multi Threading


๋จผ์ € GCD ๋ฅผ ์•Œ๊ธฐ ์œ„ํ•ด์„  ๋ฉ€ํ‹ฐ์“ฐ๋ ˆ๋”ฉ ์ด๋ผ๋Š” ๊ฐœ๋…์„ ์•Œ๊ณ ์žˆ์–ด์•ผํ•ฉ๋‹ˆ๋‹ค.

 

์™œ๋ƒํ•˜๋ฉด GCD ๊ฐ€ ์• ํ”Œ์—์„œ ์ œ๊ณตํ•˜๋Š” API์ธ๋ฐ ์ด๊ฒƒ์€ ๋ฉ€ํ‹ฐ์“ฐ๋ ˆ๋”ฉ ์ฒ˜๋ฆฌ๋ฅผ ์‰ฝ๊ณ  ํŽธํ•˜๊ฒŒ ํ•ด์ฃผ๋Š” ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

 

๋ฉ€ํ‹ฐ์“ฐ๋ ˆ๋“œ ๋Š” ์—ฌ๋Ÿฌ๊ฐœ์˜ ์“ฐ๋ ˆ๋“œ๊ฐ€ ๋™์‹œ์— ์ง„ํ–‰๋˜๋Š” ๊ฒƒ์ธ๋ฐ์š”.

 

์™œ ๋ฉ€ํ‹ฐ์“ฐ๋ ˆ๋“œ ๊ฐ€ ํ•„์š”ํ• ๊นŒ์š”?

 

๋ณดํ†ต์˜ ์ž‘์—…๋“ค์€ ๋Œ€ํ‘œ์ ์œผ๋กœ UI๊ด€๋ จ ์ž‘์—…๋“ค์€ ๋ฉ”์ธ์“ฐ๋ ˆ๋“œ์—์„œ ์ง„ํ–‰๋ฉ๋‹ˆ๋‹ค.

 

๊ทธ๋ฆฌ๊ณ  ์ด๋Ÿฌํ•œ ์ž‘์—…๋“ค์€ ๋Œ€๋ถ€๋ถ„ ์ˆœ์ฐจ์ (sync)์œผ๋กœ ์ด๋ฃจ์–ด์ ธ์žˆ์ฃ .

 

ํ•˜์ง€๋งŒ ์ˆœ์„œ์—†์ด ๋™์‹œ(async)์— ์ด๋ค„์ ธ์•ผ ํ•  ๊ฒƒ๋“ค์ด ์žˆ์ฃ ?

 

์˜ˆ๋ฅผ ๋“ค๋ฉด ์ด๋ฏธ์ง€ ๋‹ค์šด๋กœ๋“œ๊ฐ™์€ ๊ฒฝ์šฐ ๋™์‹œ์— ๋‹ค์šด๋กœ๋”ฉ์„ ์‹œ์ž‘ํ•ด์„œ ๋จผ์ € ๋๋‚œ ์ด๋ฏธ์ง€๋Š” ๋จผ์ € ๋‹ค์šด๋กœ๋“œ ๋˜๋„๋ก ํ•ด์•ผํ• ๊ฑฐ์—์š”.

 

๋งŒ์•ฝ ์ˆœ์ฐจ์ ์œผ๋กœ ์ง„ํ–‰ํ•œ๋‹ค๋ฉด ์•„์ฃผ ํฐ ์šฉ๋Ÿ‰์˜ ์ด๋ฏธ์ง€๊ฐ€ ์ „์— ์žˆ๋‹ค๋ฉด ๋’ค์˜ ์ด๋ฏธ์ง€๊ฐ€ ์ง„ํ–‰์กฐ์ฐจ ๋˜์ง€ ์•Š๊ฒ ์ฃ .

 

๋˜ ๋‹ค๋ฅธ ์˜ˆ๋Š” ์ธ์Šคํƒ€๊ทธ๋žจ์ธ๋ฐ์š”. ์ธ์Šคํƒ€๊ทธ๋žจ์—์„œ ๋งŒ์•ฝ ์–ด๋–ค ์œ ์ €๊ฐ€ ํฌ์ŠคํŠธ๋ฅผ ์˜ฌ๋ ธ๋Š”๋ฐ ๊ทธ๊ฒŒ ํ™”๋ฉด์— ๋ฐฐ์น˜๋ ๋•Œ๊นŒ์ง€

 

ํ˜„์žฌ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” ์œ ์ €๊ฐ€ ๊ธฐ๋‹ค๋ ค์•ผ ํ•œ๋‹ค๋ฉด ๊ทธ ์œ ์ €๋Š” ๋Š์ด์—†์ด ๊ธฐ๋‹ค๋ ค์•ผ ํ• ๊ฒƒ์ž…๋‹ˆ๋‹ค.

 

์ด๊ฒƒ์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋ฉ”์ธ์“ฐ๋ ˆ๋“œ๊ฐ€ ์•„๋‹Œ ๋˜ ๋‹ค๋ฅธ ๊ณณ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๊ณ  ๊ทธ๋™์•ˆ ๋ฉ”์ธ์“ฐ๋ ˆ๋“œ์—์„œ๋Š” ์œ ์ €๊ฐ€ ์•ฑ์„ ์‚ฌ์šฉํ•  ์ˆ˜

 

์žˆ๋„๋ก ํ•ด์•ผํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

 

Dispatch Queue


 

๊ทธ๋ ‡๋‹ค๋ฉด GCD ๊ฐ€ ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ์–ด๋–ป๊ฒŒ ํ•ด๊ฒฐํ•ด์ค„๊นŒ์š”?

 

GCD ์—๋Š” DispatchQueue๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. 

 

์ด DispatchQueue ๋Š” ๊ณต์‹ ๋ฌธ์„œ์— ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ •์˜๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

 

ํ•ด์„ํ•˜์ž๋ฉด "์•ฑ์˜ ๋ฉ”์ธ์Šค๋ ˆ๋“œ ๋˜๋Š” ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์Šค๋ ˆ๋“œ์—์„œ ์ž‘์—… ์‹คํ–‰์„ ์ˆœ์ฐจ์  ๋˜๋Š” ๋™์‹œ์— ๊ด€๋ฆฌํ•˜๋Š” ๊ฐœ์ฒด์ž…๋‹ˆ๋‹ค." ๋ผ๊ณ  ๋˜์–ด์žˆ๋„ค์š”.

 

Dispatch Queue๋Š” 2๊ฐ€์ง€ ํ๊ฐ€ ์žˆ๋Š”๋ฐ์š”.

 

์ˆœ์ฐจ์ ์œผ๋กœ ์ž‘์—…์„ ์‹คํ–‰ํ•˜๋Š” Serial Dispatch Queue ๊ฐ€ ์žˆ๊ณ (์ˆœ์ฐจ์ ์œผ๋กœ ์ž‘์—…์„ ํ•œ๋‹ค๋Š” ์˜๋ฏธ๋Š” Queue์•ˆ์—์„œ ์ˆœ์ฐจ์ ์œผ๋กœ ์‹คํ–‰๋œ๋‹ค๋Š” ๋œป์ž…๋‹ˆ๋‹ค.)

 

๋™์‹œ์— ์ž‘์—…์„ ์ง„ํ–‰ํ•˜๋Š” Concurrent Dispatch Queue ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. 

 

์ด ๋‘๊ฐœ์˜ ํ๋Š” ๋‹ค๋ฅธ ๋ง๋กœ๋Š” Main Queue๊ณผ Global Queue์ด๋ผ๊ณ  ๋ถˆ๋ฆฌ๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค.

 

MainQueue


์šฐ์„  ๋ฉ”์ธํ๋Š” ์‹œ์Šคํ…œ ์ž‘๋™์‹œ ์ž๋™์œผ๋กœ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.

 

์ด๋Ÿฌํ•œ ๋ฉ”์ธํ์—์„œ ์šฐ๋ฆฌ๋Š” ๋Œ€๊ฐœ์˜ ์ž‘์—…์„ ์ง„ํ–‰ํ•˜์ฃ .

 

๋ณดํ†ต์€ ์ˆœ์ฐจ์ ์œผ๋กœ ์ž‘์—…์ด ์ง„ํ–‰๋ฉ๋‹ˆ๋‹ค.

 

UI๊ด€๋ จ ์ž‘์—…์€ ์ด ๋ฉ”์ธํ์—์„œ ๋ฌด์กฐ๊ฑด ๋™์ž‘๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Global Queue


๊ธ€๋กœ๋ฒŒํ๋Š” ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ๋™์ž‘ํ•˜๋Š” ํ์ž…๋‹ˆ๋‹ค.

 

๋Œ€๊ฐœ ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ๋Š” ๋ฐ์ดํ„ฐ๋‚˜ ๋„คํŠธ์›Œํฌ ํ†ต์‹  ๋“ฑ ๋๋‚˜๋Š” ์‹œ๊ฐ„์„ ์ •ํ™•ํžˆ ์•Œ ์ˆ˜ ์—†์„ ๋•Œ

 

๋ฉ”์ธํ์—์„œ ๋™์ž‘ํ•˜๋Š” ์ž‘์—…๋“ค์— ์˜ํ–ฅ์„ ๋ผ์น˜์ง€ ์•Š์•„์•ผํ• ๋•Œ ์‚ฌ์šฉ๋˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

 

๊ทธ๋Ÿฌ๋ฏ€๋กœ ๋๋‚˜๋Š” ์‹œ๊ฐ„์„ ์ •ํ™•ํžˆ ์•Œ ์ˆ˜๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

 

์ด๋ฅผ ์œ„ํ•ด์„œ Qos(Quality Of Service)๋ฅผ ์ด์šฉํ•ด ์šฐ์„ ์ˆœ์œ„๋ฅผ ์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค,

 

Quality Of Service


Qos๋Š” ์•„๋ž˜์ฒ˜๋Ÿผ ์šฐ์„  ์ˆœ์œ„์— ๋”ฐ๋ผ 5๊ฐ€์ง€๋กœ ์‚ฌ์šฉํ• ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

1.Userinteractive - ๋ฐ”๋กœ ์ˆ˜ํ–‰๋˜์–ด์•ผ ํ•  ๊ฒƒ (๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ฒƒ)

 

2.Userintiated-Userinteractive๋ณด๋‹จ ๋œ ์ค‘์š”ํ•˜์ง€๋งŒ ์‚ฌ์šฉ์ž๊ฐ€ ๊ธฐ๋‹ค๋ฆฌ๊ณ  ์žˆ๋Š” ๊ฒƒ

 

3.Userdefault - ์šฐ์„  ์ˆœ์œ„๋ฅผ ์‹ ๊ฒฝ์“ฐ์ง€ ์•Š๋Š” ๊ฒƒ(์ค‘์š”ํ•œ ์ •๋„๊ฐ€ ์ƒ๊ด€์—†๋Š”๊ฒƒ)

 

4.Utility - ์‹œ๊ฐ„์ด ์ข€ ๊ฑธ๋ ค์„œ ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๋Š” ๊ฒƒ

 

5.background - ์‚ฌ์šฉ์žํ•œํ…Œ ๋‹น์žฅ ์ธ์‹๋  ํ•„์š”๊ฐ€ ์—†๋Š”๊ฒƒ

728x90
๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€