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

๐Ÿ“ ๊ธฐ๋ก/TIL

(13)
[TIL] 20240102 Closure ํด๋กœ์ €๋Š” ์ผ์ •๊ธฐ๋Šฅ์„ ํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ํ•˜๋‚˜์˜ ๋ธ”๋ก์œผ๋กœ ๋ชจ์•„๋†“์€ ๊ฒƒ์„ ๋งํ•ฉ๋‹ˆ๋‹ค. ์‹คํ–‰๊ฐ€๋Šฅํ•œ ์ฝ”๋“œ๋ธ”๋Ÿญ์ด๋ผ๊ณ ๋„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•จ์ˆ˜๋„ ํด๋กœ์ €์˜ ํ•œ ํ˜•ํƒœ (ํ•จ์ˆ˜๋Š” ์ด๋ฆ„์ด ์žˆ๋Š” ํด๋กœ์ €) ํด๋กœ์ €๋ผ๋Š” ๊ฐœ๋… ์•ˆ์— ํ•จ์ˆ˜๊ฐ€ ํฌํ•จ๋˜๋Š” ๊ฒƒ์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. → ํ•จ์ˆ˜: named Closure , ์ด์™ธ์˜ ํด๋กœ์ €๋“ค์€ ๋‹ค (unamed) Closure ํด๋กœ์ €๋Š” ์ผ๊ธ‰๊ฐ์ฒด์˜ ํŠน์„ฑ์„ ๊ฐ€์ง€๊ณ  ์žˆ์Œ ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ๋ณ€์ˆ˜๋‚˜ ์ƒ์ˆ˜์— ๋Œ€์ž…ํ•˜๊ณ , ๋ฐ˜ํ™˜(return)๊ฐ€๋Šฅํ•˜๋ฉฐ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค. == ์ „๋‹ฌ์ธ์ž, ๋ณ€์ˆ˜, ์ƒ์ˆ˜ ๋“ฑ์— ์ €์žฅ ๋ฐ ์ „๋‹ฌ์ด ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ๋œป ํ•จ์ˆ˜์™€ ๋‹ค๋ฅด๊ฒŒ ์ด๋ฆ„์ •์˜๊ฐ€ ํ•„์š”ํ•˜์ง€๋Š” ์•Š์ง€๋งŒ, ๋งค๊ฐœ๋ณ€์ˆ˜ ์ „๋‹ฌ๊ณผ ๋ฐ˜ํ™˜ ๊ฐ’์ด ์กด์žฌํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์ด ๋™์ผ ํด๋กœ์ € ํ‘œํ˜„์‹ { (parameters) -> ReturnType in ..
[TIL] 20231215 Trouble Shooting - ์‹ฑ๊ธ€ํ„ด ์ธ์Šคํ„ด์Šค์˜ ์ดˆ๊ธฐํ™” ์‹œ์  ์ผ๋‹จ ๋จธ๋ฆฌ๋ถ€ํ„ฐ ๋ฐ•๊ณ  ์‹œ์ž‘ํ•˜๊ฒ ์Šด๋‹ˆ๋‹ค............. ์™œ๋ƒ๋ฉด... ์ „์— ์ผ๋˜ ํ”„๋กœํผํ‹ฐ ์ดˆ๊ธฐํ™” ๊ด€๋ จ ์ด์Šˆ ํ•ด๊ฒฐ๊ธฐ์— ๋Œ€ํ•œ ๊ธ€์—์„œ ์ž˜๋ชป๋œ ์ ์„ ์ฐพ์•„๊ฐ€์ง€๊ตฌ... ์ •์ •ํ•˜๊ณ ์ž... ๋‹ค์‹œ ๊ธ€์„ ์“ฐ๊ฒŒ ๋๊ธฐ ๋•Œ๋ฌธ.. [TIL] 20231207 Trouble Shooting - ์‹ฑ๊ธ€ํ„ด ์ธ์Šคํ„ด์Šค์˜ ์ดˆ๊ธฐํ™” ์‹œ์  ๋ถ€์บ  ๋™๋ฃŒ๋ถ„์—๊ฒŒ ๋ฐ›์€ ์งˆ๋ฌธ! ์‹ฑ๊ธ€ํ„ด ์ธ์Šคํ„ด์Šค๋Š” ๋‹ค๋ฅธ ํด๋ž˜์Šค์—์„œ ์ „์—ญ ๋ณ€์ˆ˜๋‚˜ ์ƒ์ˆ˜์— ํ• ๋‹นํ•ด๋‘๊ณ  ํ•ด๋‹น ๋ณ€์ˆ˜๋‚˜ ์ƒ์ˆ˜์— ์ ‘๊ทผํ•ด์„œ ์‚ฌ์šฉํ•˜๋ฉด ์•ˆ๋˜๋‚˜ janechoi.tistory.com ํ•˜ํ•˜ ๋ธ”๋กœ๊ทธ์— ์ ˆ๋Œ€์ ˆ๋Œ€ ์• ๋งคํ•œ ์ •๋ณด๋‚˜,, ์ž˜ ๋ชจ๋ฅด๋Š” ๊ฒƒ์— ๋Œ€ํ•ด์„œ๋Š” ์“ฐ์ง€๋ง์ž! ๋ผ๋Š” ์ƒ๊ฐ์œผ๋กœ ์ •๋ฆฌ๋ฅผ ํ•ด์™”์—ˆ๋Š”๋ฐ ํ•œ๋ฒˆ๋งŒ ๋ด์ฃผ์‹ญ์…” ์˜ˆ.. TIL์€ ๋ด์ฃผ์„ธ์—ฌ... ๋‹ค์‹œ ์ •์ • ๋“ค์–ด๊ฐ€๊ฒ ์Šต๋‹ˆ..
[TIL] 20231207 Trouble Shooting - ์‹ฑ๊ธ€ํ„ด ์ธ์Šคํ„ด์Šค์˜ ์ดˆ๊ธฐํ™” ์‹œ์  ๋ถ€์บ  ๋™๋ฃŒ๋ถ„์—๊ฒŒ ๋ฐ›์€ ์งˆ๋ฌธ! ์‹ฑ๊ธ€ํ„ด ์ธ์Šคํ„ด์Šค๋Š” ๋‹ค๋ฅธ ํด๋ž˜์Šค์—์„œ ์ „์—ญ ๋ณ€์ˆ˜๋‚˜ ์ƒ์ˆ˜์— ํ• ๋‹นํ•ด๋‘๊ณ  ํ•ด๋‹น ๋ณ€์ˆ˜๋‚˜ ์ƒ์ˆ˜์— ์ ‘๊ทผํ•ด์„œ ์‚ฌ์šฉํ•˜๋ฉด ์•ˆ๋˜๋‚˜์š”??? ์˜ค์—ฅ?? ๋˜๋Š”๋ฐ์—ด,, but ๋™๋ฃŒ์˜ ํ”Œ์ ์—์„œ ๋Ÿฐํƒ€์ž„ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๊ณ  ์žˆ์—ˆ์Œ... whyrano.... ์ฝ”๋“œ๋ฅผ ๋ด…์‹œ๋‹ค. ๋ ˆ์ญˆ๊ณ . (์ œ๊ฐ€ ์ง  ์ฝ”๋“œ๊ฐ€ ์•„๋‹ˆ๋‹ˆ ์ฝ”๋“œ ๋ธ”๋Ÿญ์ด ์•„๋‹Œ ์Šค์ƒท์œผ๋กœ ๋ณด์—ฌ๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค..!) GamePlayer๋ผ๋Š” ํด๋ž˜์Šค์—์„œ static ํ”„๋กœํผํ‹ฐ๋กœ ํ•ด๋‹น ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•ด๋‘๊ณ , init() ์ƒ์„ฑ์ž์— private์œผ๋กœ ์ ‘๊ทผ์ œ์–ด๋ฅผ ํ•จ์œผ๋กœ์จ ํ•ด๋‹น ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๋Š” ํ•˜๋‚˜๋งŒ ์ƒ์„ฑ๋จ์„ ๋ณด์žฅํ•ด์ฃผ์…จ์Œ!!! ์‹ฑ๊ธ€ํ„ด ํŒจํ„ด์„ ์‚ฌ์šฉํ•ด์„œ ํด๋ž˜์Šค๋ฅผ ์•„์ฃผ ์ž˜ ์ƒ์„ฑํ•˜์…จ์ฃ ?? ์ด์ œ GamePlayer ๋ผ๋Š” ํด..
[TIL] 20231206 Understanding Swift Performance Swift ์„ฑ๋Šฅ ์ดํ•ดํ•˜๊ธฐ!!! Swift์˜ ๋‹ค์–‘ํ•œ ์ถ”์ƒํ™” ๋ฉ”์ปค๋‹ˆ์ฆ˜์ด ์„ฑ๋Šฅ์— ๋ฏธ์น˜๋Š” ์˜ํ–ฅ์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž. ์ƒํ™ฉ์— ๋”ฐ๋ผ ์ ์ ˆํ•œ ๋ชจ๋ธ๋ง ๋ฐฉ๋ฒ•์„ ์„ ํƒํ•ด ์„ฑ๋Šฅ์„ ๋†’์ผ ์ˆ˜ ์žˆ์Œ!! Swift์˜ ์ถ”์ƒํ™” ๋ฉ”์ปค๋‹ˆ์ฆ˜์ด ์„ฑ๋Šฅ์— ๋ฏธ์น˜๋Š” ์˜ํ–ฅ์„ ์ดํ•ดํ•˜๋Š” ๊ฐ€์žฅ ์ข‹์€ ๋ฐฉ๋ฒ•์€ ๊ธฐ๋ณธ ๊ตฌํ˜„์„ ์ดํ•ดํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ์ถ”์ƒํ™”๋ฅผ ๊ตฌ์ถ•ํ•˜๊ณ , ์ถ”์ƒํ™” ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ์„ ํƒํ•  ๋•Œ ์„ธ ๊ฐ€์ง€ ์ธก๋ฉด์„ ๊ณ ๋ คํ•ด์•ผ ํ•œ๋‹ค. 1. ๋‚ด ์ธ์Šคํ„ด์Šค๊ฐ€ ์Šคํƒ(Stack)์— ํ• ๋‹น๋  ๊ฒƒ์ธ๊ฐ€? ์•„๋‹ˆ๋ฉด ํž™(Heap)์— ํ• ๋‹น๋  ๊ฒƒ์ธ๊ฐ€? 2. ์ด ์ธ์Šคํ„ด์Šค๋ฅผ ์ „๋‹ฌํ•  ๋•Œ ๋ ˆํผ๋Ÿฐ์Šค ์นด์šดํŒ…(Reference Counting) ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ์–ผ๋งˆ๋‚˜ ๋ฐœ์ƒํ•˜๋Š”๊ฐ€? 3. ์ด ์ธ์Šคํ„ด์Šค์—์„œ ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ, Static Dispatch๋ฅผ ํ†ตํ•ด ..
[TIL] 20231205 KVO(Key-value observing) [๊ณต์‹ ๋ฌธ์„œ ๋ฒˆ์—ญ] Key-value observing์€ ๋‹ค๋ฅธ ๊ฐœ์ฒด์˜ ์†์„ฑ์— ๋Œ€ํ•œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๊ฐœ์ฒด์—๊ฒŒ ์•Œ๋ฆด ๋•Œ ์‚ฌ์šฉํ•˜๋Š” Cocoa ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํŒจํ„ด์ž…๋‹ˆ๋‹ค. ๋ชจ๋ธ ๊ฐ„, ๋ทฐ ๊ฐ„ ๋“ฑ ๋…ผ๋ฆฌ์ ์œผ๋กœ ๋ถ„๋ฆฌ๋œ ์•ฑ์˜ ๋ถ€๋ถ„ ๊ฐ„์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ „๋‹ฌํ•˜๋Š” ๋ฐ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. Key-value observing์€ ์˜ค์ง NSObject์—์„œ ์ƒ์†๋˜๋Š” ํด๋ž˜์Šค์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ •๋ฆฌ Key-value Observing์€ Cocoa ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํŒจํ„ด ํ”„๋กœํผํ‹ฐ๊ฐ€ ๋ณ€๊ฒฝ๋˜๋ฉด ์ด ์‚ฌํ•ญ์„ ๋‹ค๋ฅธ ๊ฐ์ฒด์— ์•Œ๋ฆฌ๋Š” ๋ฐ์— ์‚ฌ์šฉ๋จ ๋ชจ๋ธ๊ณผ ๋ทฐ ์ฒ˜๋Ÿผ ๊ธฐ๋Šฅ์ ์œผ๋กœ ๋ถ„๋ฆฌ๋˜์–ด ์žˆ๋Š” ๋ถ€๋ถ„์—์„œ์˜ ์ •๋ณด ์ „๋‹ฌ์— ์ ํ•ฉ KVO๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๊ฐ์ฒด๊ฐ€ NSObject๋ฅผ ์ƒ์†๋ฐ›์•„์•ผ ํ•จ ์‚ฌ์šฉ ๋ฐฉ๋ฒ• 1. @objc dynamic v..
[TIL] 20231204 H.I.G (Human Interface Guidelines) The HIG contains guidance and best practices that can help you design a great experience for any Apple platform. HIG๋Š” ๋ชจ๋“  ์• ํ”Œ ํ”Œ๋žซํผ์„ ์œ„ํ•œ ํ›Œ๋ฅญํ•œ ๊ฒฝํ—˜์„ ์„ค๊ณ„ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋  ์ˆ˜ ์žˆ๋Š” ์ง€์นจ๊ณผ ๋ชจ๋ฒ” ์‚ฌ๋ก€๊ฐ€ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค. HIG ๋ฌธ์„œ๋ฅผ ํ™•์ธํ•ด์•ผ ํ•˜๋Š” ์ด์œ ? Apple์˜ ํ”Œ๋žซํผ์— ๋งž๋Š” UI/UX๋ฅผ ์œ ์ €์—๊ฒŒ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•ด! HIG๋ฅผ ๋„ˆ๋ฌด ์‹ฌํ•˜๊ฒŒ ์œ„๋ฐฐํ•œ ์•ฑ์˜ ๊ฒฝ์šฐ ์‹ฌ์‚ฌ์—์„œ ๋ฆฌ์  ๋‹นํ•  ์ˆ˜ ์žˆ์Œ ์•„์ดํฐ ๊ธฐ๋ณธ ์•ฑ ์‹œ๊ณ„ UI/UX ๋ถ„์„ ํ™”๋ฉด 1 - ์•Œ๋žŒ ๋ชฉ๋ก Navigation bars (Components > Navigation and search > Navig..
[TIL] 20231130 ์ฝ”๋“œ ๋ฆฌ๋ทฐ ๋‹ต๋ณ€ ์ž‘์„ฑํ•˜๋ฉด์„œ ์ •๋ฆฌํ•œ ๋‚ด์šฉ if let vs. guard let 1. ์ƒ์ˆ˜(let)์˜ ์‚ฌ์šฉ๋ฒ”์œ„๊ฐ€ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ์˜ต์…”๋„ ๋ฐ”์ธ๋”ฉ๋œ ์ƒ์ˆ˜์˜ scope๊ฐ€ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ์ฆ‰, ์ƒ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฒ”์œ„๊ฐ€ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. if let ๊ฐ™์€ ๊ฒฝ์šฐ, ์˜ต์…”๋„ ๋ฐ”์ธ๋”ฉ๋œ ์ƒ์ˆ˜๋ฅผ if๋ฌธ ๋ฐ–์—์„œ ์“ฐ๋Š” ๊ฒƒ์ด ๋ถˆ๊ฐ€ํ•˜๊ณ  guard let์˜ ๊ฒฝ์šฐ์—๋Š” ํ•ด๋‹น ์ƒ์ˆ˜๋ฅผ ํ•จ์ˆ˜ ๋‚ด์—์„œ ์ง€์—ญ ์ƒ์ˆ˜์ฒ˜๋Ÿผ ์ž์œ ๋กญ๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. (๋‹จ, else๋ฌธ์—์„œ๋Š” ์‚ฌ์šฉ๋ถˆ๊ฐ€) 2. else์˜ ์ƒ๋žต ๊ฐ€๋Šฅ ์—ฌ๋ถ€์— ์ฐจ์ด๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. if let์€ ํ•ด๋‹น ์กฐ๊ฑด์ด true์ธ ๊ฒฝ์šฐ๋ฅผ ๊ฐ•์กฐํ•˜๋Š” ๋ฌธ๋ฒ•์ž…๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— else๊ตฌ๋ฌธ์„ ๊ผญ ์จ์ฃผ์ง€ ์•Š์•„๋„ ๋ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ, guard let์˜ ๊ฒฝ์šฐ nil์ธ ๊ฒฝ์šฐ์— ๋ฌด์กฐ๊ฑด ํ•จ์ˆ˜๋ฅผ ์ข…๋ฃŒ์‹œ์ผœ๋ฒ„๋ฆฌ๊ธฐ ๋•Œ๋ฌธ์— else ๊ตฌ๋ฌธ์„ ๊ผญ ์จ์ฃผ์–ด..
[TIL] 20231129 Protocol์„ ํ™œ์šฉํ•œ ์ถ”์ƒํ™” (์ฝ”๋“œ ๋ฆฌํŒฉํ† ๋ง) ์ด๋ฒˆ์ฃผ ์ƒˆ์‹น ๊ณผ์ œ์—์„œ PR์„ ์˜ฌ๋ฆฐ ํ›„์— ์•„์ด๋””์–ด๊ฐ€ ๋– ์˜ฌ๋ผ ์–ด์ œ ํ”„๋กœํ† ์ฝœ ๋” ์ž˜์“ฐ๊ธฐ!! ์— ๋Œ€ํ•œ ๋‚ด์šฉ์„ ์–ด์ œ ์ •๋ฆฌํ–ˆ๋Š”๋ฐ, ํ•ด๋‹น ๋‚ด์šฉ์„ ์ ์šฉํ•ด์„œ ์˜ค๋Š˜ ์ฝ”๋“œ ๋ฆฌํŒฉํ† ๋ง์„ ํ•ด๋ดค๋‹ค. ์ฃผ์š” ๋ณ€๊ฒฝ ์‚ฌํ•ญ protocol extension ์„ ํ™œ์šฉํ•œ ๋ฉ”์„œ๋“œ ๊ธฐ๋ณธ ๊ตฌํ˜„ Playable ํ”„๋กœํ† ์ฝœ extension์„ ํ†ตํ•ด ๊ณตํ†ต์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ๊ธฐ๋ณธ ๊ตฌํ˜„ํ•ด ์ถ”์ƒํ™”ํ–ˆ์Šต๋‹ˆ๋‹ค. validateUserInput() - ์‚ฌ์šฉ์ž ์ž…๋ ฅ ๊ฐ’ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ๋ฉ”์„œ๋“œ ์‚ฌ์šฉ์ž ์ž…๋ ฅ ๊ฐ’ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ๋กœ์ง์˜ ๊ฒฝ์šฐ ๊ฐ€์œ„๋ฐ”์œ„๋ณด, ๋ฌต์ฐŒ๋น  ๋‘ ๊ฒŒ์ž„์—์„œ ๋™์ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— extension์— ๊ธฐ๋ณธ ๊ตฌํ˜„ํ•จ์œผ๋กœ์จ ๊ฐ ํด๋ž˜์Šค ๋‚ด์—์„œ ๊ฐ™์€ ๊ธฐ๋Šฅ์„ ํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ๊ตฌํ˜„ํ•˜์ง€ ์•Š์•„๋„ ๋˜๋„๋ก ํ•ด์„œ ์ค‘๋ณต๋œ ์ฝ”๋“œ๋ฅผ ํ•˜๋‚˜๋กœ ๋ฌถ์—ˆ์Šต๋‹ˆ๋‹ค..