๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

swift ๋ฌธ๋ฒ•๐Ÿ–ค

(36)
[SWIFT] Resultํƒ€์ž… ์—๋Ÿฌ์ฒ˜๋ฆฌ๋ฅผ do catch๋ฌธ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ์‹์˜ ๋ถˆํŽธํ•จ์„ ํ•ด์†Œํ•œ resultํƒ€์ž… ๋“ฑ์žฅ - swift 5 ์ดํ›„ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ? ์„ฑ๊ณต/์‹คํŒจ์˜ ๊ฒฝ์šฐ๋ฅผ ๊น”๋”ํ•˜๊ฒŒ ์ฒ˜๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•œ ํƒ€์ž… ๊ฐœ๋ฐœ์ž์—๊ฒŒ ์—๋Ÿฌ์ฒ˜๋ฆฌ์— ๋Œ€ํ•œ ๋‹ค์–‘ํ•œ ์ฒ˜๋ฆฌ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์˜ต์…˜์„ ์ œ๊ณต (๊ธฐ์กด์˜ ์—๋Ÿฌ์ฒ˜๋ฆฌ ํŒจํ„ด์„ ์™„์ „ํžˆ ๋Œ€์ฒดํ•˜๋ ค๋Š” ๋ชฉ์  x) eunm Result where Failure : Error Success, Failure์„ ์ œ๋„ค๋ฆญ์œผ๋กœ ์ •์˜ ( ์šฐ๋ฆฌ๊ฐ€ ์‚ฌ์šฉํ•  ๋•Œ๋Š” ๊ตฌ์ฒด์ ์ธ ํƒ€์ž…์„ ๋„ฃ์–ด์„œ ์‚ฌ์šฉํ•˜๋ฉด ๋จ : ๋งŒ์•ฝ ๋กœ ์šฐ๋ฆฌ๊ฐ€ ์‚ฌ์šฉํ–ˆ๋‹ค๋ฉด ์šฐ๋ฆฌ๋Š” ์„ฑ๊ณตํ–ˆ์„๋•Œ ์—ฐ๊ด€๊ฐ’์œผ๋กœ Bool๊ฐ’์„ ์ „๋‹ฌํ•˜๊ณ , ์‹คํŒจํ–ˆ์„ ๋•Œ๋Š” Error๊ฐ’์„ ์ „๋‹ฌํ•œ๋‹ค๋Š” ๋œป์ด๋‹ค. ) case success(Success) case failuare(Failure) ์ œ๋„ค๋ฆญ์„ ์—ด๊ฑฐํ˜•์—์„œ ์“ฐ๋ ค๋ฉด ์—ฐ๊ด€๊ฐ’ ๋ฐ˜๋“œ..
[SWIFT] ๋น„๋™๊ธฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์•ฑ์˜ ์„ฑ๋Šฅ / ๋ฐ˜์‘์„ฑ / ์ตœ์ ํ™”๋ฅผ ์œ„ํ•ด ํ•„์š”ํ•œ ๊ฐœ๋… ์„œ๋ฒ„์— ๋ฐ์ดํ„ฐ๋ฅผ ์š”์ฒญํ•˜๋Š” ์ผ (๋„คํŠธ์›Œํฌ ํ†ต์‹ )์€ ๋ถ€ํ•˜๊ฐ€ ๋งŽ์ด ๊ฑธ๋ฆฌ๋Š” ์ผ์ด๋‹ค. ๋งŒ์•ฝ์— ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๋ฅผ ํ•˜์ง€ ์•Š์œผ๋ฉด ํ™”๋ฉด์ด ๋ฒ„๋ฒ…๊ฑฐ๋ฆฌ๋Š” ํ˜„์ƒ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค. ์•„์ดํฐ์˜ ํ™”๋ฉด์ฃผ์‚ฌ์œจ์€ 60Hz๋กœ 1์ดˆ์— 60๋ฒˆ ํ™”๋ฉด์„ ๋‹ค์‹œ ๊ทธ๋ฆฐ๋‹ค. (์–ด๋–ค ๋ฉ”์ปค๋‹ˆ์ฆ˜์— ์˜ํ•ด ๋™์ž‘) -> ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๋ฅผ ํ•˜์ง€ ์•Š์œผ๋ฉด ์ด๋Ÿฐ ๋ฉ”์ปค๋‹ˆ์ฆ˜์ด ์ œ๋Œ€๋กœ ๋™์ž‘ํ•˜์ง€ ๋ชปํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ™”๋ฉด์ด ๋ฒ„๋ฒ…๊ฑฐ๋ฆผ CPU ์ฝ”์–ด (Core) == ์“ฐ๋ ˆ๋“œ (thread) == ๋ฌผ๋ฆฌ์ ์œผ๋กœ ์ผ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ์—ฐ์‚ฐ์žฅ์น˜์˜ ๊ฐœ์ˆ˜ ํด๋Ÿญ (Clock) == ๊ฐœ๋ฐœ์ž๊ฐ€ ๋ณ„๋‹ค๋ฅธ ์ฒ˜๋ฆฌ๋ฅผ ํ•˜์ง€ ์•Š์œผ๋ฉด ์ž๋™์œผ๋กœ 1๋ฒˆ(๋ฉ”์ธ)์“ฐ๋ ˆ๋“œ์—์„œ๋งŒ ์ผ์„ ํ•œ๋‹ค. 1๋ฒˆ์“ฐ๋ ˆ๋“œ๋Š” ํ™”๋ฉด์„ ๋‹ค์‹œ ๊ทธ๋ ค์•ผํ•˜๋Š” ์—ญํ• ๋„ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉฐ, ์—…๋ฐ์ดํŠธ ์ฃผ๊ธฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. (์ง์ ‘ ๋“œ๋ฆฌ๋Š”๊ฑด ์•„..
[SWIFT] Defer๋ฌธ ํ• ์ผ์„ ๋ฏธ๋ฃจ๋Š” defer๋ฌธ์— ๋Œ€ํ•ด ์ดํ•ดํ•ด๋ณด์ž. ์ผ๋ฐ˜์ ์œผ๋กœ , defer๋ฌธ์€ ์–ด๋–ค ๋™์ž‘์˜ ๋งˆ๋ฌด๋ฆฌ ๋™์ž‘์„ ํŠน์ •ํ•˜๊ธฐ ์œ„ํ•ด์„œ ์‚ฌ์šฉ๋œ๋‹ค. defer๋ฌธ์€ ์ฝ”๋“œ์˜ ์‹คํ–‰์„ ์Šค์ฝ”ํ”„๊ฐ€ ์ข…๋ฃŒ๋˜๋Š” ์‹œ์ ์œผ๋กœ ์—ฐ๊ธฐ์‹œํ‚ค๋Š” ๋ฌธ๋ฒ• โŒ–๋“ฑ๋กํ•œ ์—ญ์ˆœ์œผ๋กœ ์‹คํ–‰ -> ์ผ๋ฐ˜์ ์œผ๋กœ ํ•˜๋‚˜์˜ ๋””ํผ๋ฌธ๋งŒ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Œ ํ•จ์ˆ˜๋ฟ๋งŒ ์•„๋‹ˆ๋ผ for๋ฌธ์—์„œ๋„ ์‚ฌ์šฉ๊ฐ€๋Šฅ ๋ฌธ๋ฒ• func ํ•จ์ˆ˜๋ช…() { defer { print("1") } print("2") }
[SWIFT] ์—๋Ÿฌ ์ฒ˜๋ฆฌ (Error Handling) ์—๋Ÿฌ(์˜ค๋ฅ˜)์˜ ์ข…๋ฅ˜ ์ปดํŒŒ์ผ ์˜ค๋ฅ˜ (๋ฌธ๋ฒ•์  ์—๋Ÿฌ) ์ฝ”๋“œ์˜ ์ˆ˜์ •์„ ํ†ตํ•ด ํ•ด๊ฒฐ ๋Ÿฐํƒ€์ž„ ์˜ค๋ฅ˜ (๋‹ค์–‘ํ•œ ์ด์œ ๋กœ ์•ฑ์ด ์‹คํ–‰๋˜๋Š” ๋™์•ˆ ๋ฐœ์ƒ -> ์•ฑ์ด ๊บผ์ง) ๋ฏธ๋ฆฌ ๋ฐœ์ƒ๊ฐ€๋Šฅํ•œ ์—๋Ÿฌ๋ฅผ ํŒŒ์•…, ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ฒ˜๋ฆฌํ•˜๋ฉด ์•ฑ์˜ ๊บผ์ง์„ ๋ง‰์„ ์ˆ˜ ์žˆ์Œ ์—๋Ÿฌ์ฒ˜๋ฆฌ๊ฐ€ ํ•„์š”ํ•œ ์˜ค๋ฅ˜ ์—๋Ÿฌ์ฒ˜๋ฆฌ๊ฐ€ ํ•„์š”ํ•œ ์ด์œ ? ์•ฑ์ด ๊ฐ‘์ž๊ธฐ ๊บผ์ง€๋Š” ํ˜„์ƒ์„ ์ œ์–ดํ•˜๊ธฐ ์œ„ํ•ด์„œ์ด๋‹ค. ์—๋Ÿฌ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ํ•จ์ˆ˜์˜ ์ฒ˜๋ฆฌ ๊ณผ์ •์—์„œ ์ผ์–ด๋‚จ ๋ฌธ๋ฒ•? func ํ•จ์ˆ˜๋ช… (ํŒŒ๋ผ๋ฏธํ„ฐ) throws -> ๋ฆฌํ„ดํƒ€์ž… { } ์—๋Ÿฌ์ฒ˜๋ฆฌ ๊ณผ์ • ์—๋Ÿฌ๋ฅผ ์—ด๊ฑฐํ˜•์œผ๋กœ ์ •์˜ํ•˜๋˜ , Error ํ”„๋กœํ† ์ฝœ ์ฑ„ํƒํ•ด์•ผํ•จ (์Šค์œ„ํ”„ํŠธ์˜ ์—๋Ÿฌ ํ”„๋กœํ† ์ฝœ ๋‚ด์— ํ†ตํ•ฉ๋จ) enum HeightError: Error { case maxHeight case minHeight } 2. ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ•ด์•ผํ•จ func ch..
[SWIFT] ๋”•์…”๋„ˆ๋ฆฌ (Dictionary) ๋Œ€๊ด„ํ˜ธ์˜ ๋ฌถ์Œ, ๊ฐ ์š”์†Œ(element)๋Š” ํ‚ค(Key)์™€ ๊ฐ’(value)์˜ ์Œ์„ ์ฝœ๋ก (:)์œผ๋กœ ์ฒ˜๋ฆฌ let dic: Dictionary = [Key๊ฐ’: Value๊ฐ’, Key๊ฐ’: Value๊ฐ’] let dic: [String: String] = [Key๊ฐ’: Value๊ฐ’, Key๊ฐ’: Value๊ฐ’] ๊ทœ์น™ 1. ํ‚ค ๊ฐ’์€ ์œ ์ผํ•ด์•ผํ•จ( ์ค‘๋ณต ๋ถˆ๊ฐ€๋Šฅ ), ๋ฐธ๋ฅ˜๊ฐ’์€ ์ค‘๋ณต ๊ฐ€๋Šฅ 2. ๋™์ผํ•œ ํƒ€์ž… ์Œ์˜ ๋ฐ์ดํ„ฐ๋งŒ ๋‹ด์„ ์ˆ˜ ์žˆ์Œ 3. ๋”•์…”๋„ˆ๋ฆฌ์˜ ๊ฐ’(Value)์— ๋”•์…˜๋ฆฌ ๋˜๋Š” ๋ฐฐ์—ด์„ ์‚ฌ์šฉํ•˜์—ฌ ์ค‘์ฒฉ๋„ ๊ฐ€๋Šฅ 4. ๋”•์…”๋„ˆ๋ฆฌ์˜ ํ‚ค(Key)๋Š” Hashableํ•ด์•ผํ•จ. (๊ฒ€์ƒ‰ ์†๋„ ๋น ๋ฆ„) ์–ด๋–ค ํƒ€์ž…์ด Hashable ํ• ๊นŒ? ํ•ด์‹œํ•จ์ˆ˜์— inpu๊ฐ’์œผ๋กœ ์“ฐ์ผ ์ˆ˜ ์žˆ๋Š” "ํƒ€์ž…" (Hashable ํ”„๋กœํ† ์ฝœ ์ฑ„ํƒ) โŒ–์Šค์œ„ํ”„ํŠธ์˜ ๊ธฐ๋ณธ ํƒ€์ž…์€ ๋ชจ๋‘ Ha..
[SWIFT] ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ ์ฐธ์กฐํ˜•์‹์€ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ๊ฐ€ ํ•„์š”ํ•˜๋‹ค. ๊ตฌ๋ถ„ ๊ฐ’ ํ˜•์‹ ์ฐธ์กฐ ํ˜•์‹ ํƒ€์ž… Value Type Reference Type ๋ฉ”๋ชจ๋ฆฌ ์ƒ์˜ ์ €์žฅ ์œ„์น˜ Stack (ํ•„์š”์‹œ์— ํ•ญ์ƒ ๋ฉ”๋ชจ๋ฆฌ์˜ ๊ฐ’์ด ๋ณต์‚ฌ๋˜์–ด ์ „๋‹ฌ ๊ฐ’์— ์ €์žฅ) Heap (ํ•„์š”์‹œ์— ํ•ญ์ƒ ๋ฉ”๋ชจ๋ฆฌ์˜ ์ฃผ์†Œ๋ฅผ ์ „๋‹ฌ ๊ฐ’์˜ ์ €์žฅ) (์ฃผ์†Œ๋Š” Stack์— ์ €์žฅ) ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ ๋ฐฉ์‹ ์Šคํƒ์˜ ์Šค์ฝ”ํ”„๊ฐ€ ์ข…๋ฃŒ๋˜๋ฉด ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์ž๋™ ์ œ๊ฑฐ RC(Refence Counting, ์ฐธ์กฐ ์ˆซ์ž)์„ ํ†ตํ•ด ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ด€๋ฆฌ ๊ฐ ํ˜•์‹์˜ ํƒ€์ž… ์˜ˆ์‹œ ์Šค์œ„ํ”„ํŠธ ๊ธฐ๋ณธ ํƒ€์ž… ํด๋ž˜์Šค, ํด๋กœ์ € ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ? ์ฝ”๋“œ (ํ”„๋กœ๊ทธ๋žจ) ๋ฐ์ดํ„ฐ ํž™ โญ๏ธ ์Šคํƒ ๋ช…๋ น์–ด / ํ”„๋กœ๊ทธ๋žจ ์ „์—ญ๋ณ€์ˆ˜ / ํƒ€์ž…(static/class) ๋ณ€์ˆ˜ ๋™์ ํ• ๋‹น (์ผ๋ฐ˜์ ์œผ๋กœ ์˜ค๋žซ๋™์•ˆ ๊ธด์‹œ๊ฐ„ ๋™์•ˆ ์ €์žฅ) (๋น„์–ด์žˆ๋Š” ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ฐพ์•„์„œ ํ• ๋‹นํ•˜๋Š” ํ–‰์œ„) ํ•จ์ˆ˜์‹คํ–‰์„ ์œ„..
[SWIFT] ์˜ต์…”๋„ ์ฒด์ด๋‹(Optional Chaining) ์˜ต์…”๋„์ด๋ž€? nil (๋น„์–ด์žˆ๋Š”, null๊ณผ ๊ฐ™์€ ๊ธฐ๋Šฅ) ๊ฐ’์„ ๋‹ด์„ ์ˆ˜ ์žˆ๋Š” ํƒ€์ž… ์˜ต์…”๋„ ์ฒด์ด๋‹ ์˜ต์…”๋„ ํƒ€์ž…์œผ๋กœ ์„ ์–ธ๋œ ๊ฐ’์— ์ ‘๊ทผํ•ด์„œ ์†์„ฑ, ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ์ ‘๊ทผ์—ฐ์‚ฐ์ž(.) ์•ž์— ?(๋ฌผ์Œํ‘œ)๋ฅผ ๋ถ™์—ฌ์•„ ํ•œ๋‹ค ๊ทœ์น™ 1) ๊ฒฐ๊ณผ๋Š” ํ•ญ์ƒ ์˜ต์…”๋„ ํƒ€์ž…์œผ๋กœ ๋ฆฌํ„ดํ•œ๋‹ค. 2) ์˜ต์…”๋„ ํŽ˜์ด๋‹ ๊ณผ์ •์—์„œ ๊ทธ ๊ฐ’ ์ค‘ ํ•˜๋‚˜๋ผ๋„ nil์„ ๋ฆฌํ„ดํ•œ๋‹ค๋ฉด, ์ด์–ด์ง€๋Š” ํ‘œํ˜„์‹์„ ํ‰๊ฐ€ํ•˜์ง€ ์•Š๊ณ  nil์„ ๋ฆฌํ„ดํ•œ๋‹ค. 3) ์ ‘๊ทผ ์—ฐ์‚ฐ์ž์˜ ์ ‘๊ทผ ์—ฐ์‚ฐ์ž ๋˜ํ•œ optionalํƒ€์ž…์ด๋ผ๋ฉด ๋งจ ๋งˆ์ง€๋ง‰์˜ ์ ‘๊ทผ ์—ฐ์‚ฐ์ž์—๋Š” ?๋ฅผ ์•ˆ๋ถ™์ธ๋‹ค. ํ•จ์ˆ˜ ํƒ€์ž… ๋˜ํ•œ ์˜ต์…”๋„๋กœ ์„ ์–ธ์ด ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ•จ์ˆ˜๋„ nil์ผ ์ˆ˜๋„ ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ cat?.myMaster?()?.name ์†Œ๊ด„ํ˜ธ ์•ž๊ณผ ๋’ค ๋ชจ๋‘ ?๊ฐ€ ๋ถ™๋Š” ์ฝ”๋“œ๋„ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค ์˜ต์…”๋„๋กœ ์„ ์–ธ์ด ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ํƒ€์ž…๋“ค์€ ์œ„์™€ ๊ฐ™..
[SWIFT] ๊ณ ์ฐจํ•จ์ˆ˜(Higher-order Function) map{}, filter{}, reduce{}, forEach{}, compactMap{}, flatmap{} ๊ณ ์ฐจํ•จ์ˆ˜๋ž€? ํ•จ์ˆ˜๋ฅผ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜, ํ•จ์ˆ˜์˜ ์‹คํ–‰๊ฒฐ๊ณผ๋กœ ํ•จ์ˆ˜๋ฅผ ๋ฆฌํ„ดํ•˜๋Š” ํ•จ์ˆ˜ f(f(x)) - Sequence, Collection ํ”„๋กœํ† ์ฝœ์„ ๋”ฐ๋ฅด๋Š” ์ปฌ๋ ‰์…˜( ๋ฐฐ์—ด, ๋”•์…”๋„ˆ๋ฆฌ,์„ธํŠธ ๋“ฑ)์— ๊ธฐ๋ณธ์ ์œผ๋กœ ๊ตฌํ˜„๋˜์–ด์žˆ๋Š” ํ•จ์ˆ˜์ด๋‹ค + Optional type๋„ ๊ตฌํ˜„๋˜์–ด ์žˆ์Œ 1) ๋ฐฐ์—ด.map { ํด๋กœ์ € (ํ•จ์ˆ˜) } ๊ธฐ์กด ๋ฐฐ์—ด ๋“ฑ์˜ ๊ฐ ์•„์ดํ…œ์„ ์ƒˆ๋กญ๊ฒŒ ๋งคํ•‘ํ•˜์—ฌ ์ƒˆ๋กœ์šด ๋ฐฐ์—ด์„ ๋ฆฌํ„ดํ•˜๋Š” ํ•จ์ˆ˜ ( ๋ฐฐ์—ด์˜ ์•„์ดํ…œ์„ ํ•œ๊ฐœ์”ฉ ๋˜์ ธ์ฃผ์–ด ํ•จ์ˆ˜ ๋‚ด์˜ ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰ํ•œ๋‹ค ) let numbers = [1, 2, 3, 4, 5] newNumbers = numbers.map { "์ˆซ์ž: \($0)" } print(newNumbers) ์‹คํ–‰ ๊ฒฐ๊ณผ : ["์ˆซ์ž: 1", "์ˆซ์ž: 2", "์ˆซ์ž: 3", "์ˆซ์ž: 4", "์ˆซ์ž: 5"] 2) ..