iOS

ยท iOS
๋ณธ ๊ฒŒ์‹œ๋ฌผ์€ ์•จ๋Ÿฐ์˜ ์ธํ”„๋Ÿฐ ๊ฐ•์˜๋ฅผ ๋“ฃ๊ณ  ์ž‘์„ฑํ•œ ๊ธ€ ์ž…๋‹ˆ๋‹ค. ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ณผ์ •์—์„œ 2๊ฐœ์˜ ์Šค๋ ˆ๋“œ๊ฐ€ ๋™์‹œ์— ๋ฉ”๋ชจ๋ฆฌ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ƒํ™ฉ์—์„œ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธฐ๋Š”๋ฐ.. ์ด๋Ÿฐ ๋ฌธ์ œ๋Š” Thread-Safety๋ฅผ ํ†ตํ•ด ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค. ๋‹จ์–ด์˜ ๋œป ๊ทธ๋Œ€๋กœ ์Šค๋ ˆ๋“œ๋ฅผ ์•ˆ์ „ํ•˜๊ฒŒ ์‚ฌ์šฉํ•œ๋‹ค. ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ๋ฅผ ๋™์‹œ์— ์‚ฌ์šฉํ•œ๋‹ค๊ณ  ํ•ด๋„ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธฐ์ง€ ์•Š๊ณ  ์•ˆ์ „ํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ํ•œ๋ฒˆ์— ํ•œ๊ฐœ์˜ ์Šค๋ ˆ๋“œ๋งŒ ์ž์›์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜์—ฌ ๊ฒฝ์Ÿ์ƒํ™ฉ์„ ๋ฐœ์ƒ์‹œํ‚ค์ง€ ์•Š๊ณ  ์•ˆ์ „ํ•˜๊ฒŒ ์‚ฌ์šฉํ•œ๋‹ค. ์ด๋ ‡๊ฒŒ ์‚ฌ์šฉํ•จ์„ Thread-Safetyํ•˜๊ฒŒ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ–ˆ๋‹ค๊ณ  ํ•œ๋‹ค. 1. ๊ฒฝ์Ÿ์ƒํ™ฉ (Race Condition) var a = 1 DispatchQueue.global().async { sleep(1) a += 1 } DispatchQueue.gl..
ยท iOS
๋ณธ ๊ฒŒ์‹œ๋ฌผ์€ ์•จ๋Ÿฐ์˜ ์ธํ”„๋Ÿฐ ๊ฐ•์˜๋ฅผ ๋“ฃ๊ณ  ์ž‘์„ฑํ•œ ๊ธ€ ์ž…๋‹ˆ๋‹ค. 1. Dispatch Group์˜ ๊ฐœ๋… ์•ž์„œ ํ•˜๋‚˜์˜ ์ž‘์—…์ด ๋๋‚˜๋ฉด ๊ทธ ์ž‘์—…์ด ๋๋‚˜๋Š” ์‹œ์ ์— ๋Œ€ํ•ด ์•Œ ์ˆ˜ ์žˆ์—ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ทธ๋Ÿฐ ์ž‘์—…๋“ค์€ ๋…๋ฆฝ์ ์ด์˜€๊ธฐ ๋•Œ๋ฌธ์— ์—ฌ๋Ÿฌ๊ฐ€์ง€ ์ž‘์—…์„ ๊ทธ๋ฃน์ง€์–ด ํ•˜๋‚˜์˜ ๊ทธ๋ฃน์œผ๋กœ ๋ฌถ์–ด ์ด๋Ÿฐ ๊ทธ๋ฃน์œผ๋กœ ๋ฌถ์ธ ์ž‘์—…์ด ๋๋‚˜๋Š” ์‹œ์ ์„ ์•Œ๊ณ  ์‹ถ์„ ๋•Œ ๋””์ŠคํŒจ์น˜ ๊ทธ๋ฃน์„ ์‚ฌ์šฉํ•œ๋‹ค. ์—ฌ๋Ÿฌ ์ž‘์—…์„ ๊ทธ๋ฃน์œผ๋กœ ๋ฌถ์ธ ์ž‘์—…์ด๋ผ ํ•˜๋ฉด ์ด๋ฏธ์ง€๋ฅผ ์—ฌ๋Ÿฌ๊ฐœ ๋‹ค์šด๋กœ๋“œ ๋ฐ›๊ณ  ์‹ถ์„ ๋•Œ ํ•˜๋‚˜์˜ ์ด๋ฏธ์ง€๋ฅผ ๋‹ค์šด๋กœ๋“œ ๋ฐ›๋Š”๊ฒƒ์„ ํ•˜๋‚˜์˜ ์ž‘์—…์ด๋ผ๊ณ  ๋ณด๋ฉด ์ด๋Ÿฐ ์ž‘์—…์„ ์—ฌ๋Ÿฌ๊ฐœ ๋ฌถ์–ด ์—ฌ๋Ÿฌ๊ฐœ์˜ ์ด๋ฏธ์ง€๋ฅผ ๋‹ค์šด๋กœ๋“œ ๋ฐ›๋Š” ๊ฒƒ์„ ํ•˜๋‚˜์˜ ๊ทธ๋ฃน์„ ๋ฌถ์–ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. 3๊ฐœ์˜ ๊ทธ๋ฃน์„ ๋ฌถ์ธ ์ž‘์—…์„ 3๊ฐœ์˜ ์Šค๋ ˆ๋“œ์—์„œ ์‚ฌ์šฉํ•œ ๊ฒฝ์šฐ ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ์—์„œ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•˜์ง€๋งŒ ๊ฐ ๊ทธ๋ฃน์˜ ์ž‘์—…์ด ๋๋‚œ ์‹œ์ ์„ ์•Œ ์ˆ˜ ์žˆ..
ยท iOS
๋ณธ ๊ฒŒ์‹œ๋ฌผ์€ ์•จ๋Ÿฐ์˜ ์ธํ”„๋Ÿฐ ๊ฐ•์˜๋ฅผ ๋“ฃ๊ณ  ์ž‘์„ฑํ•œ ๊ธ€ ์ž…๋‹ˆ๋‹ค. 1. ๋ฐ˜๋“œ์‹œ ๋ฉ”์ธํ์—์„œ ์ฒ˜๋ฆฌํ•ด์•ผํ•˜๋Š” ์ž‘์—… ์˜ˆ์ „์— ๋””์ŠคํŒจ์น˜ํ์— ๋Œ€ํ•ด ์–•๊ฒŒ ๊ณต๋ถ€ํ•  ๋•Œ ์Šคํƒ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ์—์„œ UI์™€ ๊ด€๋ จ๋œ ์ž‘์—…์€ ๋ฉ”์ธํ์—์„œ ์ฒ˜๋ฆฌํ•ด์•ผํ•œ๋‹ค๋Š” ๊ธ€์„ ๋ณธ ์ ์ด ์žˆ๋‹ค. ๊ทธ๋•Œ๋Š” ๊ทธ๋ƒฅ ๊ทธ๋ ‡๊ตฌ๋‚˜ ํ•˜๊ณ  ๋„˜์–ด๊ฐ”๋Š”๋ฐ ๊ทธ๋ƒฅ ๋‚ด ๋จธ๋ฆฌ์— "UI์ž‘์—… -> ๋ฉ”์ธ์—์„œ ์ฒ˜๋ฆฌํ•ด์•ผํ•จ" ์ด์ •๋„๋กœ๋งŒ ์ธ์‹ํ•˜๊ณ  ์žˆ์—ˆ๋‹ค. ์ด๋ฒˆ์— ๋น„๋™๊ธฐ์— ๋Œ€ํ•ด ์ข€ ๋” ์ž์„ธํžˆ ๊ณต๋ถ€ํ•˜๋ฉด์„œ UI๊ด€๋ จ ์ž‘์—…์€ ๋ฉ”์ธ์—์„œ ์ฒ˜๋ฆฌํ•ด์•ผํ•จ์„ ๋‹ค์‹œ ๋“ฃ๊ฒŒ ๋˜์—ˆ๊ณ , ๊ทธ ์ด์œ ๋„ ํ•จ๊ป˜ ์•Œ๊ฒŒ ๋˜์—ˆ๋‹ค. ์ƒ๊ฐํ•ด๋ณด๋ฉด ๊ฐ„๋‹จํ•˜๋‹ค. ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ๋กœ ๋ถ„์‚ฐํ•ด์„œ ์ฒ˜๋ฆฌํ•œ๋‹ค๋ฉด ์ž‘์—…์˜ ์ˆœ์„œ๊ฐ€ ์ผ์ •ํ•˜์ง€ ์•Š๊ณ , ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ์—์„œ ๋‚˜๋ˆ ์„œ ์ฒ˜๋ฆฌํ•˜๋ฉด์„œ ๊ฐ„์„ญ์ด ์ผ์–ด๋‚˜๊ฒŒ ๋˜๋ฉด์„œ ํ™”๋ฉด์ด ๊นœ๋นก๊ฑฐ๋ฆฌ๋Š” ๋“ฑ์˜ ์ œ๋Œ€๋กœ ๋œ ํ™”๋ฉด์„ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ œ๊ณตํ•˜๊ธฐ ์–ด๋ ค์šธ ์ˆ˜ ์žˆ๋‹ค. ๋ฉ”์ธํ์—..
ยท iOS
๋ณธ ๊ฒŒ์‹œ๋ฌผ์€ ์•จ๋Ÿฐ์˜ ์ธํ”„๋Ÿฐ ๊ฐ•์˜๋ฅผ ๋“ฃ๊ณ  ์ž‘์„ฑํ•œ ๊ธ€ ์ž…๋‹ˆ๋‹ค. ์ž‘์—…์„ ๋ถ„์‚ฐ์ฒ˜๋ฆฌํ•˜๋Š” ๊ณผ์ •์—์„œ ํ•„์š”ํ•œ ํ๋Š” ํฌ๊ฒŒ GCD์™€ Operation์œผ๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋‹ค. ์—ฌ๊ธฐ์„œ GCD ์ฆ‰, ๋””์ŠคํŒจ์น˜ํ์˜ ์ข…๋ฅ˜๋Š” ๋ฉ”์ธํ, ๊ธ€๋กœ๋ฒŒํ, ํ”„๋ผ์ด๋น—ํ๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋Š”๋‹ค. ์ด๋Ÿฌํ•œ ์ข…๋ฅ˜์˜ ํ๋“ค์€ ์•Œ์•„์„œ ์Šค๋ ˆ๋“œ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์ฒ˜๋ฆฌํ•œ๋‹ค. 1. ๋ฉ”์ธํ (main) ๋จผ์ €, ๊ฐ€์žฅ ๊ธฐ๋ณธ์ด ๋˜๋Š” ๋ฉ”์ธํ์ด๋‹ค. ๋ฉ”์ธ์ด๋ผ๋Š” ์ด๋ฆ„์— ๊ฑธ๋งž๊ฒŒ ๋”ฑ ํ•œ๊ฐœ๋งŒ ์กด์žฌํ•˜๋ฉฐ, Serial์ด๋‹ค. 2. ๊ธ€๋กœ๋ฒŒํ(global) ๋ฉ”์ธ๊ณผ ๋‹ค๋ฅด๊ฒŒ 6๊ฐœ๊ฐ€ ์กด์žฌํ•˜๋ฉฐ ๊ธฐ๋ณธ์„ค์ •์œผ๋กœ๋Š” Concurrent์ด๋‹ค. ์กด์žฌํ•˜๋Š” 6๊ฐœ์˜ ํ๋Š” Qos์— ๋”ฐ๋ผ ๋‚˜๋ˆ„์–ด์ง„๋‹ค. ์—ฌ๊ธฐ์„œ Qos๋ž€ Quality of service๋กœ ์„œ๋น„์Šค ํ’ˆ์งˆ์„ ์˜๋ฏธํ•œ๋‹ค. // ๊ฑฐ์˜ ์ฆ‰์‹œ ์ฒ˜๋ฆฌํ•ด์•ผํ•˜๋Š” ์ž‘์—…(UI์—…๋ฐ์ดํŠธ, ์• ๋‹ˆ๋ฉ”์ด์…˜, ..
ยท iOS
๋ณธ ๊ฒŒ์‹œ๋ฌผ์€ ์•จ๋Ÿฐ์˜ ์ธํ”„๋Ÿฐ ๊ฐ•์˜๋ฅผ ๋“ฃ๊ณ  ์ž‘์„ฑํ•œ ๊ธ€ ์ž…๋‹ˆ๋‹ค. ๋„คํŠธ์›Œํฌ ํ†ต์‹ ์„ ์œ„ํ•ด ๋น„๋™๊ธฐ๋ฅผ ์ ‘ํ•˜๊ณ  ์‚ฌ์šฉํ•˜์˜€์ง€๋งŒ ์›๋ฆฌ๋ฅผ ์ œ๋Œ€๋กœ ํŒŒ์•…ํ•˜์ง€ ๋ชปํ•˜๊ณ  ์ฝ”๋“œ๋งŒ ๋ณต์‚ฌํ•ด์„œ ๋™์ž‘ํ•˜๋Š” ๋‚˜๋ฅผ ๋ฐœ๊ฒฌํ•˜๊ณ  ๋น„๋™๊ธฐ์— ๋Œ€ํ•œ ๋‘๋ ค์›€์„ ์—†์• ๊ธฐ ์œ„ํ•ด ๋ณธ ๊ฐ•์˜๋ฅผ ์ˆ˜๊ฐ•ํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ•˜์˜€๋‹ค. ์ž๊ฐ€์ง„๋‹จํ‘œ๋ฅผ ์ฝ์–ด๋ดค์„ ๋•Œ ๋Œ€๋ถ€๋ถ„ ๋‚ด๊ฐ€ ์–ด๋ ค์›Œํ•˜๋Š” ๋‚ด์šฉ์œผ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์—ˆ๊ณ , ๋‚ด๊ฐ€ ์‚ฌ์šฉํ•˜๋ฉด์„œ ๊ถ๊ธˆํ–ˆ๋˜ ๋‚ด์šฉ๋“ค์ด ๋งŽ์ด ์žˆ์—ˆ๋‹ค. ์™œ ๋™์‹œ์„ฑ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด ํ•„์š”ํ• ๊นŒ? ๋ฌด์–ธ๊ฐ€๋ฅผ ํ•™์Šตํ•˜๊ธฐ์— ์•ž์„œ ์ค‘์š”ํ•œ๊ฑด ์ด ๊ฐœ๋…์ด ์™œ ๋“ฑ์žฅํ–ˆ์„๊นŒ๋ฅผ ๊ณ ๋ฏผํ•ด๋ณด๋Š” ์‹œ๊ฐ„์ด๋ผ๊ณ  ์ƒ๊ฐํ•œ๋‹ค. ๋ชจ๋“  ๊ฐœ๋…๋“ค์€ ์•„๋ฌด ์ด์œ  ์—†์ด ๋“ฑ์žฅํ•œ๊ฒƒ์ด ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ทธ ์ด์œ ๋ฅผ ์•„๋Š”๊ฒƒ์€ ์•ž์œผ๋กœ์˜ ํ•™์Šต ๋‚ด์šฉ์— ํฐ ๋ฐ‘๊ฑฐ๋ฆ„์ด ๋˜์–ด ์ค„ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•œ๋‹ค. ๋™์‹œ์„ฑ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด ๋‚ด๊ฒŒ ๋‚ฏ์„ค๊ฒŒ ๋Š๊ปด์กŒ๋˜ ์ด์œ ๊ฐ€ ์ด๊ฒƒ์˜ ํ•„์š”์„ฑ์„ ๋ชธ์†Œ ๊นจ๋‹ซ..
foreground์ƒํƒœ ์•ฑ์ด ์‹คํ–‰๋˜์–ด ์‚ฌ์šฉ์ž๊ฐ€ ์•ฑ์„ ๋ณด๊ณ  ์žˆ๋Š” ์ƒํƒœ background์ƒํƒœ ์•ฑ์ด ์‹คํ–‰๋˜์–ด ์žˆ์ง€๋งŒ ์‚ฌ์šฉ์ž๊ฐ€ ์•ฑ์„ ๋ณด๊ณ  ์žˆ์ง€๋Š” ์•Š์€ ์ƒํƒœ (ex. ์Œ์•… ์žฌ์ƒ ์ค‘ ๋‹ค๋ฅธ ํ™”๋ฉด์œผ๋กœ ์ „ํ™˜) ** background ์ƒํƒœ๋ผ๊ณ  ํ•ด๋„ ์•ฑ์ด ์‹คํ–‰ ์ค‘์ด์ง€ ์•Š์€๊ฑด ์•„๋‹ˆ๋‹ค. foreground์— ์žˆ์„ ๋•Œ์—๋Š”.. ๋ฉ”๋ชจ๋ฆฌ ๋ฐ ๊ธฐํƒ€ ์‹œ์Šคํ…œ ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•ด์„œ background๋ณด๋‹ค ๋†’์€ ์šฐ์„ ์ˆœ์œ„๋ฅผ ๊ฐ€์ง€๋ฉฐ ์‹œ์Šคํ…œ์€ ์ด๋Ÿฌํ•œ ๋ฆฌ์†Œ์Šค๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•„์š”์— ๋”ฐ๋ผ background ์•ฑ์„ ์ข…๋ฃŒํ•œ๋‹ค. background์— ์žˆ์„ ๋•Œ์—๋Š” ๊ฐ€๋Šฅํ•œ ์ ์€ ๋ฉ”๋ชจ๋ฆฌ๊ณต๊ฐ„์„ ์‚ฌ์šฉํ•ด์•ผํ•˜๋ฉฐ(์‹œ์Šคํ…œ ๋ฆฌ์†Œ์Šค ํ•ด์ œ, ๋ฉ”๋ชจ๋ฆฌ์—์„œ ํ•ด์ œ ํ›„ ๋ฐ์ดํ„ฐ๋ฅผ ๋””์Šคํฌ์— ์ž‘์„ฑ) ์šฐ์„ ์ˆœ์œ„์— ์˜ํ•ด foreground task๋ณด๋‹ค ๋” ๋‚ฎ์€ ์ž์›์„ ํ• ๋‹น ๋ฐ›๋Š”๋‹ค. ์ถœ์ฒ˜: htt..
@main์€ ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ์‹œ์ž‘ ์‹œ ์ง„์ž…์ ์œผ๋กœ ํƒ€์ž…์„ ์ง€์ •ํ•˜๊ธฐ ์œ„ํ•œ Swift ์–ธ์–ด์˜ ๊ธฐ๋Šฅ์ด๋‹ค. ์‚ฌ์šฉ์ž๋Š” ํƒ‘ ๋ ˆ๋ฒจ์˜ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๋Œ€์‹  @main๋‹จ์ผ ์œ ํ˜•์˜ ์†์„ฑ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ณ , ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ํ”„๋กœํ† ์ฝœ์ด๋‚˜ ํด๋ž˜์Šค ์ƒ์†์„ ํ†ตํ•ด ๋งž์ถคํ˜• ์ง„์ž…์  ๋™์ž‘์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋‹ค. ** AppDelegate์—์„œ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. @main vs @UIApplicationMain 1. ๊ตฌ์กฐ์ฒด์—์„œ @main ๋Œ€์‹  @UIApplicationMain๋ฅผ ์“ด๋‹ค๋ฉด class ์„ ์–ธ์—๋งŒ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒ! 2. @UIApplicationMain ๋Œ€์‹  @main์„ ์‚ฌ์šฉํ•จ์œผ๋กœ ํƒ€์ž… ๊ธฐ๋ฐ˜์˜ ์Šค์œ„ํ”„ํŠธ ์ฝ”๋“œ์—์„œ ์ด์ƒ์ ์ธ ์ง„์ž…์ ์„ ์•Œ๋ ค์ฃผ๋ฉฐ main() ํ•จ์ˆ˜๋Š” ์ผ๋ฐ˜ ์ •์  ๋ฉ”์„œ๋“œ์ด๋ฏ€๋กœ ํ”„๋กœํ† ์ฝœ์—์„œ ํ™•์žฅ ๋ฉ”์„œ๋“œ ๋˜๋Š” ๊ธฐ๋ณธ ํด๋ž˜์Šค..
UIApplication ์‹ฑ๊ธ€ํ„ด ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋จ UIApplication์ด๋ž€? iOS์—์„œ ์‹คํ–‰๋˜๋Š” ์•ฑ์˜ ์ค‘์•™ ์ง‘์ค‘ ์ œ์–ด ๋ฐ ์กฐ์ • ์ง€์  1. ์•ฑ ์‹œ์ž‘ -> UIApplicationMain()ํ˜ธ์ถœ -> ์‹ฑ๊ธ€ํ†ค UIApplication ๊ฐ์ฒด ์ƒ์„ฑ -> sharedํด๋ž˜์Šค ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ -> ๊ฐ์ฒด์— ์ ‘๊ทผ => ์•ฑ ์‹œ์ž‘ํ•˜๋ฉด UIApplicationMain()์ด shared app instance๋ฅผ ๋งŒ๋“ ๋‹ค. ์ฐธ๊ณ  https://github.com/jwonyLee/TIL/blob/master/iOS/Interview/UIApplicationMain.md https://jinshine.github.io/2018/05/28/iOS/%EC%95%B1%EC%9D%98%20%EC%83%9D%EB%AA%85%EC%A3%BC%EA%B..
๋ฆด๋ฆฌ๐Ÿฐ
'iOS' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๊ธ€ ๋ชฉ๋ก (4 Page)