๐ ๊ธฐ๋ก/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์ ๊ธฐ๋ณธ ๊ตฌํํจ์ผ๋ก์จ ๊ฐ ํด๋์ค ๋ด์์ ๊ฐ์ ๊ธฐ๋ฅ์ ํ๋ ํจ์๋ฅผ ๊ตฌํํ์ง ์์๋ ๋๋๋ก ํด์ ์ค๋ณต๋ ์ฝ๋๋ฅผ ํ๋๋ก ๋ฌถ์์ต๋๋ค.. ์ด์ 1 2 ๋ค์