iOS/Interview Questions

1. heap๋ณด๋‹ค๋Š” stack์— ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹น class๋ณด๋‹จ struct๋‚˜ enum์„ ์‚ฌ์šฉํ•œ๋‹ค. class๋Š” heapํ• ๋‹น, struct๋‚˜ enum์€ stackํ• ๋‹น์ด๋ฏ€๋กœ ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น class: heap struct: stack enum: stack heap โ‡’ ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์€ ์˜์—ญ์„ ์ฐพ์•„ ํ• ๋‹นํ•˜๋Š” ๋ฐฉ์‹(๋™์ ํ• ๋‹น)์ด๋ฏ€๋กœ ์ข€ ๋ณต์žกํ•จ (์†๋„๊ฐ€ ๋Š๋ฆผ) stack โ‡’ LIFO ๋ฐฉ์‹์ด๋ฏ€๋กœ ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ๊ฐ€ ๋‹จ์ˆœํ•จ (์†๋„๊ฐ€ ๋น ๋ฆ„, O(1)) 2. ์ •์  ๋””์ŠคํŒจ์น˜(static Dispatch)๋ฅผ ์ง€ํ–ฅ ์ผ๋ฐ˜์ ์œผ๋กœ swift์—์„œ๋Š” dynamic dispatch๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ๋˜์–ด์žˆ์Œ ํด๋ž˜์Šค(๋ฉ”์„œ๋“œ, ํ”„๋กœํผํ‹ฐ)๋ฅผ ์„ ์–ธํ•  ๋•Œ ์ƒ์†๋˜์ง€ ์•Š๋Š” ํด๋ž˜์Šค์— final์„ ๋ถ™์ด๋ฉด ์„ฑ๋Šฅ์ด ํ–ฅ์ƒ๋จ ํด๋ž˜์Šค๋Š” dynamic dispatch..
struct ๊ฐ’ ํƒ€์ž… (๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•  ๋•Œ ๊ฐ’์„ ๋ณต์‚ฌํ•˜์—ฌ ์ „๋‹ฌ) ์ƒ์† ๋ถˆ๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์ž๋™์ œ๊ฑฐ โ‡’ ํ•จ์ˆ˜ ์ข…๋ฃŒ(์ง€์—ญ๋ณ€์ˆ˜, ๋งค๊ฐœ๋ณ€์ˆ˜), ํ”„๋กœ๊ทธ๋žจ ์ข…๋ฃŒ(static, ์ „์—ญ๋ณ€์ˆ˜) ์ธ์Šคํ„ด์Šค ์ƒ์ˆ˜๋กœ ์„ ์–ธ์‹œ ์ €์žฅ์†์„ฑ ์ „๋ถ€ ์ƒ์ˆ˜๋กœ ์„ ์–ธ ๋ฉ”์„œ๋“œ ๋‚ด์—์„œ ์†์„ฑ ๋ณ€๊ฒฝ ๋ถˆ๊ฐ€๋Šฅ ์†Œ๋ฉธ์ž ์—†์Œ class ์ฐธ์กฐ ํƒ€์ž… (๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•  ๋•Œ ๊ฐ’์˜ ๋ฉ”๋ชจ๋ฆฌ ์œ„์น˜๋ฅผ ์ „๋‹ฌ) ์ƒ์† ๊ฐ€๋Šฅ ARC๋กœ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ ์ธ์Šคํ„ด์Šค ์ƒ์ˆ˜๋กœ ์„ ์–ธํ•ด๋„ ๊ฐ€๋ฅดํ‚ค๋Š” let/ var ์„ ์–ธ์— ๋”ฐ๋ฆ„ ๋ฉ”์„œ๋“œ ๋‚ด์—์„œ ์†์„ฑ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ ์†Œ๋ฉธ์ž ์žˆ์Œ ๊ฐ์ฒด ๋Œ€์‹  ์ธ์Šคํ„ด์Šค๋ผ๋Š” ์šฉ์–ด ์‚ฌ์šฉ enum ํ•œ์ •๋œ ์‚ฌ๋ก€(case) ์•ˆ์—์„œ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋Š” ํƒ€์ž… (์š”์ผ, ์„ฑ๋ณ„ ..) ์ผ€์ด์Šค๊ฐ€ ์„ ํƒ๊ฐ€๋Šฅํ•œ ๊ฐ€์ง“ ์ˆ˜๋กœ ์ •ํ•ด์ ธ ์žˆ์„ ๋•Œ ์ •์˜ โ‡’ ๋‹ค๋ฅธ๊ฒƒ ๋„ฃ์œผ๋ฉด ํƒ€์ž… ์—๋Ÿฌ ์ƒ์† ๋ถˆ๊ฐ€๋Šฅ ๊ณตํ†ต์  ๊ฐœ๋ฐœ์ž๊ฐ€ ๋งˆ์Œ๋Œ€๋กœ ๋งŒ๋“ค..
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..
App thinning ๐Ÿคช ์•ฑ์Šคํ† ์–ด์™€ ์šด์˜์ฒด์ œ๊ฐ€ ๋””๋ฐ”์ด์Šค์— ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์„ค์น˜๋ ๋•Œ, ์•ฑ์ด ๋””๋ฐ”์ด์Šค์— ๋งž๊ฒŒ ์„ค์น˜๋˜๋„๋ก ํ•˜๋Š” ์„ค์น˜ ์ตœ์ ํ™” ๊ธฐ์ˆ ์„ ์˜๋ฏธํ•œ๋‹ค. ์ตœ์†Œํ•œ์˜ ๋””์Šคํฌ ์‚ฌ์šฉ๊ณผ ๋น ๋ฅธ ๋‹ค์šด๋กœ๋“œ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค. => ๋” ๋น ๋ฅธ ๋‹ค์šด๋กœ๋“œ์™€ ๋” ๋งŽ์€ ๊ณต๊ฐ„์œผ๋กœ ๋” ๋‚˜์€ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ์ œ๊ณตํ•œ๋‹ค. ์ข…๋ฅ˜ ๐Ÿ™‚ 1. Slicing ์•ฑ์ด ์ง€์›ํ•˜๋Š” ์—ฌ๋Ÿฌ ๋””๋ฐ”์ด์Šค์— ๋Œ€ํ•ด ๊ฐ๊ฐ ์กฐ๊ฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฒˆ๋“ค์„ ์ƒ์„ฑํ•˜๊ณ , ํ•ด๋‹น ๋””๋ฐ”์ด์Šค์— ๊ฐ€์žฅ ์ ํ•ฉํ•œ ์กฐ๊ฐ์„ ์ „๋‹ฌํ•˜๋Š” ๊ธฐ์ˆ ์ด๋‹ค. ๊ฐœ๋ฐœ์ž๊ฐ€ App store connect์— ์—…๋กœ๋“œํ•˜๋ฉด, ์•ฑ ์Šคํ† ์–ด์—์„œ ๋””๋ฐ”์ด์Šค ํŠน์„ฑ์— ๋”ฐ๋ผ ๋‹ค์–‘ํ•œ ๋ฒ„์ „์˜ ์กฐ๊ฐ๋“ค์„ ์ƒ์„ฑํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์‚ฌ์šฉ์ž๊ฐ€ ๊ทธ ์กฐ๊ฐ ์ค‘์—์„œ ๊ฐ€์žฅ ์•Œ๋งž์€ ์กฐ๊ฐ(app variant)์„ ๋‹ค์šด๋กœ๋“œ ๋ฐ›๋Š” ๊ฒƒ์ด๋‹ค. ์‚ฌ์ง„๊ณผ ๊ฐ™์ด ์—ฌ๋Ÿฌ ์กฐ๊ฐ์œผ๋กœ ๋‚˜๋‰œ ๋ฒˆ๋“ค์„ ํ•„์š”ํ•œ ๊ฒƒ..
UIViewController UIKit ์•ฑ์˜ ๋ทฐ ๊ณ„์ธต ๊ตฌ์กฐ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๊ฐ์ฒด ํ™”๋ฉด ํ•˜๋‚˜๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๋‹จ์œ„ ๋ชจ๋“  ์•ฑ์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ํ•˜๋‚˜ ์ด์ƒ์˜ ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Œ ์–ด๋–ค์—ญํ• ?๐Ÿค” ๋ทฐ์˜ ๊ณ„์ธต์„ ๊ด€๋ฆฌํ•˜๋ฉด์„œ ๋ฐ์ดํ„ฐ๋ฅผ ํ™”๋ฉด์— ์–ด๋–ป๊ฒŒ ๋ฟŒ๋ฆด์ง€ ๊ด€๋ฆฌํ•˜๋Š” ๋งค๊ฐœ์ฒด ์—ญํ• ! ๋ทฐ์— ๋Œ€ํ•œ ๋ฆฌ์†Œ์Šค๋ฅผ ๊ด€๋ฆฌํ•จ (์ด๋ฏธ์ง€, ์Œ์„ฑ, ์ง„๋™, ๋ฉ”๋ชจ๋ฆฌ์™€ ๊ฐ™์€ ๋ฆฌ์†Œ์Šค) ํ™”๋ฉด ์‚ฌ์ด์ฆˆ, ํ™”๋ฉด ํšŒ์ „์— ๋Œ€ํ•œ ๋Œ€์‘์„ ํ•จ => ์š”๋Ÿฐ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๊ธฐ๋Šฅ์„ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ViewController์˜ ์—ญํ• ์ด ๋งŽ์•„์ง€๋ฉด์„œ ๋””์ž์ธํŒจํ„ด๋“ค ์‚ฌ์šฉ (Model, View, ViewController) ๋ทฐ๋Š” ๋™์ž‘ ํ™”๋ฉด์—์„œ๋Š” Storyboard๋กœ ๊ตฌ์„ฑํ•œ ํ™”๋ฉด๋งŒ ๋ณด์ด์ง€๋งŒ, ์‹ค์ œ๋กœ๋Š” ์‚ฌ์ง„๊ณผ ๊ฐ™์€ ๊ตฌ์กฐ๋กœ ๋งŽ์€ ์ธต์œผ๋กœ ์Œ“์—ฌ์žˆ๋‹ค. UIWindowScene -> UIWindow -> UITran..
UserDefaults ์• ํ”Œ์—์„œ ๊ธฐ๋ณธ ์ œ๊ณต๋จ key-value ์Œ์œผ๋กœ ์ €์žฅํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค ๋Ÿฐํƒ€์ธ ํ™˜๊ฒฝ์—์„œ๋งŒ ๋™์ž‘ํ•˜๋ฉด์„œ ์•ฑ์ด ์‹คํ–‰๋˜๋Š” ๋™์•ˆ ๊ธฐ๋ณธ์ €์žฅ์†Œ์— ์ ‘๊ทผํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ๊ธฐ๋กํ•˜๊ณ  ๊ฐ€์ ธ์˜ค๋Š” ์—ญํ• ์„ ํ•จ ๋Œ€์šฉ๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ๋ณด๋‹ค ๋‹จ์ผ ๋ฐ์ดํ„ฐ(ex ์‚ฌ์šฉ์ž ๊ธฐ๋ณธ ์„ค์ •, ๋กœ๊ทธ์ธ ์—ฌ๋ถ€ ๋“ฑ)๋ฅผ ์ €์žฅํ•˜๋Š”๋ฐ ๋” ์ ํ•ฉ ์‹ฑ๊ธ€ํ†ค ํŒจํ„ด์œผ๋กœ ์„ค๊ณ„๋˜์–ด ์•ฑ ์ „์ฒด์— ๋‹จ ํ•˜๋‚˜์˜ ์ธ์Šคํ„ด์Šค๋งŒ ์กด์žฌ CoreData ์• ํ”Œ์—์„œ ๊ธฐ๋ณธ ์ œ๊ณต๋จ UserDefaults์™€ ๋น„๊ตํ•˜์—ฌ ์ข€ ๋” ๋ฐฉ๋Œ€ํ•˜๊ณ  ๋ณต์žกํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š”๋ฐ ์ ํ•ฉ Data Model์„ ์ƒ์„ฑํ•œ ํ›„ Entity๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. SQLite ์• ํ”Œ์—์„œ ๊ธฐ๋ณธ ์ œ๊ณต๋˜๋Š”๊ฒƒ์ด ์•„๋‹Œ ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๋ฉฐ, ๋น„๊ต์  ๊ฐ€๋ฒผ์šด ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ๊ฐ€ ํ•„์š”ํ• ๋•Œ ์ ํ•ฉ CoreData๋Š” ํ”„๋ ˆ์ž„์›Œํฌ์ธ๊ฒƒ์— ๋ฐ˜ํ•ด SQLite๋Š” ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค์ž„ C..
๋ฆด๋ฆฌ๐Ÿฐ
'iOS/Interview Questions' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๊ธ€ ๋ชฉ๋ก