๋ณธ ๊ฒ์๋ฌผ์ ์จ๋ฐ์ ์ธํ๋ฐ ๊ฐ์๋ฅผ ๋ฃ๊ณ ์์ฑํ ๊ธ ์
๋๋ค. ์์
์ ์ฒ๋ฆฌํ๋ ๊ณผ์ ์์ 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๊ฐ์ ์ค๋ ๋์์ ์ฌ์ฉํ ๊ฒฝ์ฐ ์ฌ๋ฌ ์ค๋ ๋์์ ์์
์ ์ฒ๋ฆฌํ์ง๋ง ๊ฐ ๊ทธ๋ฃน์ ์์
์ด ๋๋ ์์ ์ ์ ์ ์..
๋ณธ ๊ฒ์๋ฌผ์ ์จ๋ฐ์ ์ธํ๋ฐ ๊ฐ์๋ฅผ ๋ฃ๊ณ ์์ฑํ ๊ธ ์
๋๋ค. 1. ๋ฐ๋์ ๋ฉ์ธํ์์ ์ฒ๋ฆฌํด์ผํ๋ ์์
์์ ์ ๋์คํจ์นํ์ ๋ํด ์๊ฒ ๊ณต๋ถํ ๋ ์คํ์ค๋ฒํ๋ก์ฐ์์ UI์ ๊ด๋ จ๋ ์์
์ ๋ฉ์ธํ์์ ์ฒ๋ฆฌํด์ผํ๋ค๋ ๊ธ์ ๋ณธ ์ ์ด ์๋ค. ๊ทธ๋๋ ๊ทธ๋ฅ ๊ทธ๋ ๊ตฌ๋ ํ๊ณ ๋์ด๊ฐ๋๋ฐ ๊ทธ๋ฅ ๋ด ๋จธ๋ฆฌ์ "UI์์
-> ๋ฉ์ธ์์ ์ฒ๋ฆฌํด์ผํจ" ์ด์ ๋๋ก๋ง ์ธ์ํ๊ณ ์์๋ค. ์ด๋ฒ์ ๋น๋๊ธฐ์ ๋ํด ์ข ๋ ์์ธํ ๊ณต๋ถํ๋ฉด์ UI๊ด๋ จ ์์
์ ๋ฉ์ธ์์ ์ฒ๋ฆฌํด์ผํจ์ ๋ค์ ๋ฃ๊ฒ ๋์๊ณ , ๊ทธ ์ด์ ๋ ํจ๊ป ์๊ฒ ๋์๋ค. ์๊ฐํด๋ณด๋ฉด ๊ฐ๋จํ๋ค. ๋ค๋ฅธ ์ค๋ ๋๋ก ๋ถ์ฐํด์ ์ฒ๋ฆฌํ๋ค๋ฉด ์์
์ ์์๊ฐ ์ผ์ ํ์ง ์๊ณ , ๋ค๋ฅธ ์ค๋ ๋์์ ๋๋ ์ ์ฒ๋ฆฌํ๋ฉด์ ๊ฐ์ญ์ด ์ผ์ด๋๊ฒ ๋๋ฉด์ ํ๋ฉด์ด ๊น๋นก๊ฑฐ๋ฆฌ๋ ๋ฑ์ ์ ๋๋ก ๋ ํ๋ฉด์ ์ฌ์ฉ์์๊ฒ ์ ๊ณตํ๊ธฐ ์ด๋ ค์ธ ์ ์๋ค. ๋ฉ์ธํ์..
๋ณธ ๊ฒ์๋ฌผ์ ์จ๋ฐ์ ์ธํ๋ฐ ๊ฐ์๋ฅผ ๋ฃ๊ณ ์์ฑํ ๊ธ ์
๋๋ค. ์์
์ ๋ถ์ฐ์ฒ๋ฆฌํ๋ ๊ณผ์ ์์ ํ์ํ ํ๋ ํฌ๊ฒ GCD์ Operation์ผ๋ก ๋๋ ์ ์๋ค. ์ฌ๊ธฐ์ GCD ์ฆ, ๋์คํจ์นํ์ ์ข
๋ฅ๋ ๋ฉ์ธํ, ๊ธ๋ก๋ฒํ, ํ๋ผ์ด๋นํ๋ก ๋๋ ์ ์๋๋ค. ์ด๋ฌํ ์ข
๋ฅ์ ํ๋ค์ ์์์ ์ค๋ ๋๋ฅผ ์์ฑํ๊ณ ์ฒ๋ฆฌํ๋ค. 1. ๋ฉ์ธํ (main) ๋จผ์ , ๊ฐ์ฅ ๊ธฐ๋ณธ์ด ๋๋ ๋ฉ์ธํ์ด๋ค. ๋ฉ์ธ์ด๋ผ๋ ์ด๋ฆ์ ๊ฑธ๋ง๊ฒ ๋ฑ ํ๊ฐ๋ง ์กด์ฌํ๋ฉฐ, Serial์ด๋ค. 2. ๊ธ๋ก๋ฒํ(global) ๋ฉ์ธ๊ณผ ๋ค๋ฅด๊ฒ 6๊ฐ๊ฐ ์กด์ฌํ๋ฉฐ ๊ธฐ๋ณธ์ค์ ์ผ๋ก๋ Concurrent์ด๋ค. ์กด์ฌํ๋ 6๊ฐ์ ํ๋ Qos์ ๋ฐ๋ผ ๋๋์ด์ง๋ค. ์ฌ๊ธฐ์ Qos๋ Quality of service๋ก ์๋น์ค ํ์ง์ ์๋ฏธํ๋ค. // ๊ฑฐ์ ์ฆ์ ์ฒ๋ฆฌํด์ผํ๋ ์์
(UI์
๋ฐ์ดํธ, ์ ๋๋ฉ์ด์
, ..
๋ณธ ๊ฒ์๋ฌผ์ ์จ๋ฐ์ ์ธํ๋ฐ ๊ฐ์๋ฅผ ๋ฃ๊ณ ์์ฑํ ๊ธ ์
๋๋ค. ๋คํธ์ํฌ ํต์ ์ ์ํด ๋น๋๊ธฐ๋ฅผ ์ ํ๊ณ ์ฌ์ฉํ์์ง๋ง ์๋ฆฌ๋ฅผ ์ ๋๋ก ํ์
ํ์ง ๋ชปํ๊ณ ์ฝ๋๋ง ๋ณต์ฌํด์ ๋์ํ๋ ๋๋ฅผ ๋ฐ๊ฒฌํ๊ณ ๋น๋๊ธฐ์ ๋ํ ๋๋ ค์์ ์์ ๊ธฐ ์ํด ๋ณธ ๊ฐ์๋ฅผ ์๊ฐํ๊ธฐ๋ก ๊ฒฐ์ ํ์๋ค. ์๊ฐ์ง๋จํ๋ฅผ ์ฝ์ด๋ดค์ ๋ ๋๋ถ๋ถ ๋ด๊ฐ ์ด๋ ค์ํ๋ ๋ด์ฉ์ผ๋ก ๊ตฌ์ฑ๋์ด ์์๊ณ , ๋ด๊ฐ ์ฌ์ฉํ๋ฉด์ ๊ถ๊ธํ๋ ๋ด์ฉ๋ค์ด ๋ง์ด ์์๋ค. ์ ๋์์ฑ ํ๋ก๊ทธ๋๋ฐ์ด ํ์ํ ๊น? ๋ฌด์ธ๊ฐ๋ฅผ ํ์ตํ๊ธฐ์ ์์ ์ค์ํ๊ฑด ์ด ๊ฐ๋
์ด ์ ๋ฑ์ฅํ์๊น๋ฅผ ๊ณ ๋ฏผํด๋ณด๋ ์๊ฐ์ด๋ผ๊ณ ์๊ฐํ๋ค. ๋ชจ๋ ๊ฐ๋
๋ค์ ์๋ฌด ์ด์ ์์ด ๋ฑ์ฅํ๊ฒ์ด ์๋๊ธฐ ๋๋ฌธ์ ๊ทธ ์ด์ ๋ฅผ ์๋๊ฒ์ ์์ผ๋ก์ ํ์ต ๋ด์ฉ์ ํฐ ๋ฐ๊ฑฐ๋ฆ์ด ๋์ด ์ค ๊ฒ์ด๋ผ๊ณ ์๊ฐํ๋ค. ๋์์ฑ ํ๋ก๊ทธ๋๋ฐ์ด ๋ด๊ฒ ๋ฏ์ค๊ฒ ๋๊ปด์ก๋ ์ด์ ๊ฐ ์ด๊ฒ์ ํ์์ฑ์ ๋ชธ์ ๊นจ๋ซ..
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..