Swift, OS ๋ฉด์ ์ง๋ฌธ ์ ๋ฆฌ ํ๋กํผํฐ์ ์ข ๋ฅ์ ๋ํด ์ค๋ช ํ์์ค. ๋จผ์ ์ ์ฅํ๋กํผํฐ๋ ํด๋์ค์ ๊ตฌ์กฐ์ฒด์์๋ง ์ฌ์ฉํ ์ ์๊ณ , ๊ฐ์ ์ ์ฅํ๊ธฐ ์ํด ์ ์ธ๋๋ ์์ ๋๋ ๋ณ์์ด๋ฉฐ ์ง์ฐ ์ ์ฅ ํ๋กํผํฐ๋ ํ๋กํผํฐ๊ฐ ํธ์ถ๋๊ธฐ ์ ๊น์ง๋ ์ด๊ธฐํ๋์ง ์๊ณ ์๋ค๊ฐ, ํ๋กํผํฐ๊ฐ ํธ์ถ๋๋ ์๊ฐ์ ์ด๊ธฐํ๋๋ ์ ์ฅ ํ๋กํผํฐ์ ๋๋ค. ์ง์ฐ ์ ์ฅ ํ๋กํผํฐ๋ ์ฒ์ ์ฌ์ฉ๋๊ธฐ ์ ์๋ ๊ฐ์ ๊ฐ์ง ์๋ ํ๋กํผํฐ์ด๊ธฐ๋๋ฌธ์ var๋ก ์ ์ธํด์ผํฉ๋๋ค. ์ฐ์ฐ ํ๋กํผํฐ๋ ํด๋์ค, ๊ตฌ์กฐ์ฒด, ์ด๊ฑฐํ์์ ์ฌ์ฉ๋๋ฉฐ, ์ ์ฅํ๋กํผํฐ์ ๋ฌ๋ฆฌ ์ ์ฅ ๊ณต๊ฐ์ ๊ฐ์ง ์๊ณ , ๋ค๋ฅธ ์ ์ฅ ํ๋กํผํฐ์ ๊ฐ์ ์ฝ์ด ์ฐ์ฐ์ ์คํํ๊ฑฐ๋, ํ๋กํผํฐ๋ก ์ ๋ฌ๋ฐ์ ๊ฐ์ ๋ค๋ฅธ ํ๋กํผํฐ์ ์ ์ฅํ๊ธฐ ๋๋ฌธ์ ํญ์ var๋ก ์ ์ธ๋์ด์ผ ํฉ๋๋ค. getter์ setter๋ฅผ ์ฌ์ฉํ๋ฉฐ get-only๋ ๊ฐ๋ฅํ์ง๋ง set-only๋ ๋ถ๊ฐ๋ฅํฉ๋๋ค. ์ ์ฅํ๋กํผํฐ์ ์ฐ์ฐ ํ๋กํผํฐ๋ ์ผ๋ฐ์ ์ผ๋ก ํน์ ํ์ ์ ์ธ์คํด์ค์ ์ฐ๊ฒฐ๋๋๋ฐ, ํ์ ํ๋กํผํฐ๋ ํ์ ์์ฒด์ ์ฐ๊ฒฐ๋ฉ๋๋ค. ํ์ ํ๋กํผํฐ๋ ์ ์ฅ ํ์ ํ๋กํผํฐ์ ์ฐ์ฐ ํ์ ํ๋กํผํฐ๊ฐ ์์ผ๋ฉฐ, ์ ์ฅ ํ์ ํ๋กํผํฐ๋ static ํค์๋๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ธํ๊ณ ์ด๊น๊ฐ์ด ์์ด์ผํ๋ฉฐ, ๋ณ์์ ์์ ๋ชจ๋ ์ ์ธ๊ฐ๋ฅํฉ๋๋ค. ์ฐ์ฐ ํ์ var๋ก๋ง ์ ์๊ฐ ๊ฐ๋ฅํ๊ณ , class๋ก ์ ์ธ์์๋ ์ค๋ฒ๋ผ์ด๋ฉ์ด ๊ฐ๋ฅํ๋ฉฐ, static์ผ๋ก ์ ์ธํ ์์๋ ์ค๋ฒ๋ผ์ด๋ฉ์ด ๋ถ๊ฐ๋ฅํฉ๋๋ค. hugging, resistance์ ๋ํด์ ์ค๋ช ํ์์ค. ๋ ์ค๋ธ์ ํธ๋ฅผ ๋ฐฐ์นํ ๋ ๊ณต๊ฐ์ด ๋จ์ ๊ฒฝ์ฐ ๋ฌด์์ด ์ปค์ง ์ง ์ค์ ํด์ฃผ๋ ๊ฒ์ด hugging priority ์ ๋๋ค. A์ค๋ธ์ ํธ๋ฅผ 250์ผ๋ก ์ค์ ํ๊ณ B์ค๋ธ์ ํธ๋ฅผ 251๋ก ์ค์ ํ ์ ์ฐ์ ์์๊ฐ ๋ ๋ฎ์ A์ค๋ธ์ ํธ๊ฐ ๋จ์ ๊ณต๊ฐ์ ์ฑ์ฐ๊ธฐ ์ํด ๊ทธ๋งํผ ์ปค์ง๋๋ค. resistance๋ ๊ณต๊ฐ์ด ๋ถ์กฑํ ๋ ๋ฌด์์ด ์ค์ด๋ค์ง ์ค์ ํด์ฃผ๋ ๊ฒ์ด compression resistance priority์ ๋๋ค. A์ค๋ธ์ ํธ๋ฅผ 750์ผ๋ก ์ค์ ํ๊ณ B์ค๋ธ์ ํธ๋ฅผ 749๋ก ์ค์ ํ๋ฉด B์ค๋ธ์ ํธ๊ฐ ์ค์ด๋ค๊ฒ ๋ฉ๋๋ค. Intrinsic Size์ ๋ํด์ ์ค๋ช ํ์์ค. Intrinsic Size๋ ์ปจํ ์ธ ์ ๋ณธ์ง์ ์ธ ํฌ๊ธฐ๋ฅผ ๊ฐ๋ฅดํต๋๋ค. UILabel, UIButton, UISwitch, UITextField๋ฑ์ด Intrinsic Size๋ฅผ ๊ฐ์ง๋ฉฐ UIView๋ Intrinsic Content Size๋ฅผ ๊ฐ์ง์ง ์์ต๋๋ค. Left Constraint ์ Leading Constraint ์ ์ฐจ์ด์ ์ ์ค๋ช ํ์์ค. leading์ ํ ์คํธ์ ์์์ ์ ๋ํ๋ ๋๋ค. trailing์ ํ ์คํธ์ ๋์ ๋ํ๋ด๋ฉฐ left๋ ๋จ์ํ ์ผ์ชฝ, right๋ ์ค๋ฅธ์ชฝ์ ๋ํ๋ ๋๋ค. RTL๊ณผ LTR ๋ชจ๋ ์ํํ ์ง์ํ๊ธฐ ์ํด์ leading, tailing์ ์ฌ์ฉํด์ผํฉ๋๋ค. Safearea์ ๋ํด์ ์ค๋ช ํ์์ค. iOS 11์์ UIViewController์ topLayoutGuide์ bottomLayoutGuide๋ UIView์ safe area ์์ฑ์ผ๋ก ๋ณ๊ฒฝ๋์์ต๋๋ค. ์์ดํฐ X๋ถํฐ ์๋จ์ ๋ ธ์น์ ํ๋จ์ ํ๋ฐ์๋ ์ฝํ ์ธ ๊ฐ ์ ๋๋ก ํ์๋ ์ ์๊ธฐ ๋๋ฌธ์, ์ด ๋ถ๋ถ์ ์ ์ธํ ์ฝํ ์ธ ๊ฐ ์์ ํ๊ฒ ํ์๋ ์ ์๋ ์์ญ์ ์๋ฏธํฉ๋๋ค. ํ๋ก์ธ์ค๋ ๋ฌด์์ธ๊ฐ? ํ๋ก๊ทธ๋จ์ ์คํํ๋ฉด, ์คํ์ ์ํด์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ด ์ด๋ฃจ์ด์ง๊ณ , ํ ๋น๋ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ผ๋ก ๋ฐ์ด๋๋ฆฌ ์ฝ๋๊ฐ ์ฌ๋ผ๊ฐ๊ฒ ๋ฉ๋๋ค. ์ด ์๊ฐ๋ถํฐ ํ๋ก์ธ์ค๋ผ ๋ถ๋ฆฝ๋๋ค. ํ๋ก์ธ์ค๋ ๊ฐ๊ฐ์ ๋ ๋ฆฝ๋ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ํ ๋น๋ฐ์ต๋๋ค. ์ค๋ ๋๋ ๋ฌด์์ธ๊ฐ? ์ค๋ ๋๋ ํ ํ๋ก์ธ์ค ๋ด์์ ๋์๋๋ ์ฌ๋ฌ ์คํ ํ๋ฆ์ ๋จ์์ผ๋ก ๊ฐ ์ค๋ ๋๋ค์ ๋ณ๋์ Stack์ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ Code, Data, Heap์ ํ๋ก์ธ์ค ๋ด์ ๋ค๋ฅธ ์ค๋ ๋๋ค๊ณผ ๊ณต์ ํฉ๋๋ค. ๋ฉํฐ ํ๋ก์ธ์ค๋ ๋ฌด์์ธ๊ฐ์? ๋๊ฐ ์ด์ ๋ค์์ ํ๋ก์ธ์(CPU)๊ฐ ํ๋ ฅ์ ์ผ๋ก ํ๋ ์ด์์ ์์ ์ ๋ณ๋ ฌ์ฒ๋ฆฌํ๋ ๊ฒ ์ ๋๋ค. ๊ฐ ํ๋ก์ธ์ค ๊ฐ ๋ฉ๋ชจ๋ฆฌ ๊ตฌ๋ถ์ด ํ์ํ๊ฑฐ๋ ๋ ๋ฆฝ๋ ์ฃผ์ ๊ณต๊ฐ์ ๊ฐ์ ธ์ผ ํ ๊ฒฝ์ฐ ์ฌ์ฉํฉ๋๋ค. ๊ฐ ํ๋ก์ธ์ค๋ ๋ ๋ฆฝ๋ ๊ตฌ์กฐ์ด๊ธฐ ๋๋ฌธ์ ์์ ์ฑ์ด ๋์ต๋๋ค. ํ์ง๋ง Context Switching ์ CPU์ ๋ถ๋ด๋ ์ปค์ง๊ณ ์ค๋ฒํค๋๊ฐ ๋ฐ์ํ๊ฒ ๋๋ค๋ ๊ฒ์ด ๊ฐ์ฅ ํฐ ๋จ์ ์ ๋๋ค. ๋ ํ๋ก์ธ์ค๋ ๋ ๋ฆฝ์ ๊ตฌ์กฐ๋ก ์๋ก ์์ ๊ณต์ ๊ฐ ์ด๋ ต์ต๋๋ค. Context Switching์ด ๋ฌด์์ธ๊ฐ์? ์คํํ ํ๋ก์ธ์ค๋ฅผ ๊ต์ฒดํ๋ ๊ธฐ์ ์ ๋๋ค. ๋ฉํฐ ์ค๋ ๋ฉ์ ๋ฌด์์ธ๊ฐ์? ๋๊ฐ ์ด์์ ์ฐ๋ ๋๊ฐ ํ๋์ ํ๋ก๊ทธ๋จ์ ๊ตฌ์ฑํ์ฌ ๊ฐ ์ฐ๋ ๋๋ง๋ค ํ๋์ ์์ ์ฉ ์ฒ๋ฆฌํ๋๋ก ํ๋ ๊ฒ ์ ๋๋ค. ๋ฉํฐ ์ค๋ ๋ฉ์ ์ฐ๋ ๋ ๊ฐ Code, Data, Heap ์์ญ์ ๊ณต์ ํ๊ธฐ ๋๋ฌธ์, Context Switching์ด ๋น ๋ฅด๋ฉฐ ํ๋ก์ธ์ค๋ฅผ ์์ฑํ์ฌ ์์์ ํ ๋นํ๋ ๊ฒ์ด ์๋๊ธฐ ๋๋ฌธ์, ์์ฑ ์ข ๋ฃ ์๊ฐ๋ ํ๋ก์ธ์ค๋ณด๋ค ๋น ๋ฆ ๋๋ค. ๋ ํ๋ก์ธ์ค ๊ฐ ํต์ ์ด ๊น๋ค๋ก์ด ๋ฐ๋ฉด์, ์ฐ๋ ๋๋ค์ stack์์ญ์ ์ ์ธํ ๋๋จธ์ง ์์ญ์ ๊ณต์ ํ๊ธฐ ๋๋ฌธ์ ํต์ ๋ฐฉ๋ฒ์ด ํจ์ฌ ๊ฐ๋จํฉ๋๋ค. ํ์ง๋ง ์์์ ๊ณต์ ํ๊ธฐ๋๋ฌธ์ A์ฐ๋ ๋๊ฐ ์ ๊ทผํ๋ ค๋ ํ ์์ญ์ ์์์ B๊ฐ ์ ๊ทผํด์ ๋ฐ๊พธ๋ ๋ฑ ์์ ๊ณต์ ์ ๋ฌธ์ ๊ฐ ์๊ธธ ์ ์์ผ๋ฉฐ, ๋ ๋ฆฝ์ ์ด์ง ์์ ํ๋์ ์ฐ๋ ๋์์ ๋ฌธ์ ๊ฐ ๋ฐ์ ์ ์ ์ฒด ์ฐ๋ ๋๊ฐ ์ํฅ์ ๋ฐ์ต๋๋ค. ๋ฉํฐ ํ๋ก์ธ์ค์ ๋ฉํฐ ์ค๋ ๋ฉ์ ์ฐจ์ด๋ ๋ฌด์์ธ๊ฐ์? ๋ฉํฐ ํ๋ก์ธ์ค๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ชจ๋ ๋ ๋ฆฝ์ ์ผ๋ก ํ ๋นํ๋ ๋ฐ๋ฉด ๋ฉํฐ ์ฐ๋ ๋๋ Code, Data, Heap๋ง ๊ณต์ ํ๊ณ Stack๋ง ๋ ๋ฆฝ์ ์ผ๋ก ํ ๋นํฉ๋๋ค. ์์ ๊ฐ์ ํน์ง์ ๋ฐ๋ผ ๋ฉํฐ ํ๋ก์ธ์ค๋ ContextSwitching์ ์๊ฐ์ด ๋ง์ด ์์๋๋ฉฐ, ๋ฉํฐ ์ฐ๋ ๋๋ Context Switching์ด ๋น ๋ฆ ๋๋ค. ๋ฉํฐ ํ๋ก์ธ์ค๋ ๋ ๋ฆฝ์ ์ด๊ธฐ ๋๋ฌธ์ IPC๋ฅผ ํตํด ์์์ ์ ๊ทผํด์ผํ์ง๋ง ๋ฉํฐ ์ฐ๋ ๋๋ Code, Data, Heap์ ๊ณต์ ํ๊ธฐ ๋๋ฌธ์ ํ๋ก์ธ์ค ๊ฐ ์์ ๊ณต์ ๊ฐ ๋น๊ต์ ๊ฐ๋จํฉ๋๋ค. ๋ ๋ฉํฐ ํ๋ก์ธ์ค๋ ๋ ๋ฆฝ๋ ๊ตฌ์กฐ์ด๊ธฐ ๋๋ฌธ์ ์์ ์ฑ์ด ๋์ง๋ง, ๋ฉํฐ ์ฐ๋ ๋๋ ํ๋์ ์ฐ๋ ๋์์ ๋ฌธ์ ๋ฐ์ ์ ์ ์ฒด ์ฐ๋ ๋์ ์ํฅ์ด ๊ฐ๋๋ค. ๋ฉํฐ ์ฐ๋ ๋๋ก ๋์ํ๋ ์ฑ์ ์์ฑํ๊ณ ์ถ์ ๋ ๊ณ ๋ คํ ์ ์๋ ๋ฐฉ์๋ค์ ์ค๋ช ํ์์ค. ๋ฉํฐ ์ค๋ ๋ฉ ์ฒ๋ฆฌ๋ฅผ ์ํด ์ ํ์ด ์ ๊ณตํ๊ณ ์๋ GCD์ NSOperation ๋ฐฉ์์ ๊ณ ๋ คํด๋ณผ ์ ์์ ๊ฑฐ ๊ฐ์ต๋๋ค. ๋จผ์ GCD๋ ๋ฉํฐ์ฝ์ด ์์คํ ์์ ๋์์ฑ ์คํ์ ์ ๊ณตํ๋ ๋ฐํ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ ๋๋ค. ํ์ ์ข ๋ฅ, qos ์ฐ์ ์์, sync, async๋ฅผ ์ค์ ํด์ ์ง์ ํ ์์ ์ Dispatch Queue๋ฅผ ํตํด ์ค๋ ๋์์ ์คํ๋๋๋ก ํ ์ ์์ต๋๋ค. NSOperation์ ํด๋น ์์ ์ ์คํ ์ํ๋ฅผ ์ ์ ์๊ณ , ์ด๋ฅผ ํตํด Operation๋ค์ ์ทจ์ ํน์ ์์ ์ง์ ์ด ๊ฐ๋ฅํฉ๋๋ค. Mutable, Immutable์ ๋ํด ์ค๋ช ํ์์ค. Mutable์ ๋ฐ๋ ์ ์๋ ํ์ ์ ๋ปํ๋ฉฐ, Immutable ๊ฐ์ฒด๋ ๋ด์ฉ์ด ๋ณํ์ง ์๋ ๊ฐ์ฒด๋ฅผ ๋งํฉ๋๋ค. struct์ class์ enum์ ์ฐจ์ด๋ฅผ ์ค๋ช ํ์์ค. struct๋ ์์์ด ๋ถ๊ฐ๋ฅํ๋ฉฐ stack์์ญ์ ์ ์ฅ๋ฉ๋๋ค. ๋ํ ์๋๊ฐ ๋น ๋ฅด๋ฉฐ ๋ฉํฐ ์ฐ๋ ๋ ํ๊ฒฝ์์ ์์ ํ๊ณ ๊ฐ ํ์ ์ ๋๋ค. class๋ ๋จ์ผ ์์์ด ๊ฐ๋ฅํ๋ฉฐ, ์ค์ ๋ฐ์ดํฐ๋ Heap์ ์ ์ฅ๋๊ณ ์ค์ ๋ฐ์ดํฐ๊ฐ ์์นํ Heap ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๊ฐ Stack์ ์ ์ฅ๋๋ฉฐ ์๋์ ์ผ๋ก ๋๋ฆฝ๋๋ค. ํด๋์ค๋ ์ฐธ์กฐํ์ ์ด๋ฉฐ, ARC๋ก ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ด๋ฆฌํฉ๋๋ค. enum์ ์์์ด ๋ถ๊ฐ๋ฅํ๊ณ ๊ฐ ํ์ ์ ๋๋ค. struct์ class์ ๊ณตํต์ ์ ์ค๋ช ํ์์ค. ๊ฐ์ ์ ์ฅํ๊ธฐ ์ํ ํ๋กํผํฐ๋ฅผ ์ ์ํ ์ ์์ผ๋ฉฐ, ๋ฉ์๋ ๋ํ ์ ์ ๊ฐ๋ฅํฉ๋๋ค. ์์ฑ์๋ฅผ ์ฌ์ฉํ์ฌ ์ด๊ธฐ ์ํ๋ฅผ ์ค์ ํ ์ ์๊ณ , Extensionํ ์ ์์ผ๋ฉฐ Protocol์ ์ฑํํ ์ ์์ต๋๋ค. let ํค์๋์ ๋ํด ์ค๋ช ํ์์ค. let์ผ๋ก ์ ์ธ๋ ์ธ์คํด์ค๋, ์ธ์คํด์ค์์ ํ ๋น๋ stack ์์ญ์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ๋ณ๊ฒฝํ์ง ๋ชปํ๊ฒ ํฉ๋๋ค. ๋ฐ๋ผ์ Stack ์์ญ์ ์ค์ ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋๋ ๊ฐ ํ์ ์ธ์คํด์ค๋ค์ ์์ฑ์ ์์ ํ์ง ๋ชปํฉ๋๋ค. ํ์ง๋ง Stack์์ญ์ Heap์์ญ์ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๊ฐ ์ ์ฅ๋๋ ์ฐธ์กฐ ํ์ ์ธ์คํด์ค๋ค์ ๊ฐ๋ฆฌํค๋ ๋์๋ง ์์ ํ์ง ๋ชปํ ๋ฟ ์์ฑ์ ์์ ํ ์ ์์ต๋๋ค. ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ์ ๊ฐ ์ญํ ์ ๋ํด ์ค๋ช ํ์์ค. ๋ฉ๋ชจ๋ฆฌ๋ ์ฝ๋, ๋ฐ์ดํฐ, ํ, ์คํ์ผ๋ก ์ด๋ฃจ์ด์ ธ ์์ต๋๋ค. ์ฝ๋์์ญ์๋ ์ฐ๋ฆฌ๊ฐ ์์ฑํ ์์ค์ฝ๋๊ฐ binary ํํ๋ก ์ ์ฅ๋๋ฉฐ, Read-Only๋ก ์ ์ฅ๋ฉ๋๋ค. ๋ฐ์ดํฐ ์์ญ์๋ ์ ์ญ๋ณ์, static ๋ณ์๊ฐ ์ ์ฅ๋๋ฉฐ, ํ๋ก๊ทธ๋จ ์์๊ณผ ๋์์ ํ ๋น๋๊ณ , ํ๋ก๊ทธ๋จ์ด ์ข ๋ฃ๋์ด์ผ ๋ฉ๋ชจ๋ฆฌ๊ฐ ํด์ ๋ฉ๋๋ค. ์คํ ๋์ค ๊ฐ์ด ๋ณ๊ฒฝ๋ ์ ์์ผ๋ฏ๋ก Read-Write๋ก ์ ์ฅ๋ฉ๋๋ค. ํ ์์ญ์๋ ์ฐธ์กฐ ํ์ ์ ๊ฐ์ด ์ ์ฅ๋๋ฉฐ Swift๋ ARC๋ฅผ ํตํด ํ์ ํ ๋น๋ ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋ ์ด์ ์ฐธ์กฐ๋์ง ์์ผ๋ฉด ์๋์ผ๋ก ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํด์ ํด์ค๋๋ค. ์คํ์๋ ํจ์์ ํธ์ถ๊ณผ ๊ด๊ณ๋๋ ์ง์ญ๋ณ์์ ๋งค๊ฐ๋ณ์๊ฐ ์ ์ฅ๋ฉ๋๋ค. ํจ์์ ํธ์ถ๊ณผ ํจ๊ป ํ ๋น๋๋ฉฐ ํจ์์ ํธ์ถ์ด ์๋ฃ๋๋ฉด ์๋ฉธํฉ๋๋ค. Copy On Write๋ ์ด๋ค ๋ฐฉ์์ผ๋ก ๋์ํ๋์ง ์ค๋ช ํ์์ค. ํ๋ก๊ทธ๋๋ฐ์์ ๋ณต์ฌ ๋์์ ํ ๋, ์ค์ ์๋ณธ์ด๋ ๋ณต์ฌ๋ณธ์ด ์์ ๋๊ธฐ ์ ๊น์ง๋ ๋ณต์ฌ๋ฅผ ํ์ง ์๊ณ ์๋ณธ ๋ฆฌ์์ค๋ฅผ ๊ณต์ ํ๋ค๊ฐ ์๋ณธ์ด๋ ๋ณต์ฌ๋ณธ์์ ์์ ์ด ์ผ์ด๋ ๊ฒฝ์ฐ, ๊ทธ๋ ๋ณต์ฌ๋ฅผ ์งํํ๋ ๋ฐฉ์์ผ๋ก ๋์ํฉ๋๋ค. Convinience init์ ๋ํด ์ค๋ช ํ์์ค. Designated init์ ํ๋ผ๋ฏธํฐ ์ค ์ผ๋ถ๋ฅผ ๊ธฐ๋ณธ๊ฐ์ผ๋ก ์ค์ ํด์, ์ด convenience init์์์ Designated init์ ํธ์ถํ์ฌ ์ด๊ธฐํ๋ฅผ ์งํํ ์ ์์ต๋๋ค. convenience init์ ์ฌ์ฉํ๊ธฐ ์ํด์๋ designated init์ด ๋ฐ๋์ ๋จผ์ ์ ์ธ๋์ด์ผ ํฉ๋๋ค. Any์ ๋ํด ์ค๋ช ํ์์ค. Any๋ ๋ชจ๋ ํ์ ์ ์ธ์คํด์ค๋ฅผ ๋ํ๋ผ ์ ์๋ ๋ฒ์ฉ ํ์ ์ ๋๋ค. value ํ์ , Referenceํ์ ์ด๊ฑด ์๊ด์์ด ์ ์ฅ์ด ๊ฐ๋ฅํฉ๋๋ค. AnyObject์ ๋ํด ์ค๋ช ํ์์ค. AnyObject๋ ํด๋์ค ํ์ ์ ์ธ์คํด์ค๋ฅผ ๋ํ๋ผ ์ ์๋ ํ๋กํ ์ฝ์ ๋๋ค. ๋ฐ๋ผ์ ํด๋์ค ํ์ ์ด ์๋ ๊ตฌ์กฐ์ฒด, ์ด๊ฑฐํ, ํด๋ก์ ๋ AnyObject์ ํด๋นํ์ง ์์ต๋๋ค. Optional ์ด๋ ๋ฌด์์ธ์ง ์ค๋ช ํ์์ค. ๊ฐ์ด ์์ ์๋์๊ณ nil์ผ ์ ์๋ค๋ ๊ฒ์ ๋ํ๋ด๋ ํ์์ ๋๋ค. Optional ๋ณ์์ ์ ์ธ์ ?ํค์๋๋ฅผ ์ฌ์ฉํ๋ฉฐ ๋ํดํธ ๊ฐ์ nil์ ๋๋ค. ์ต์ ๋ ์ฒด์ด๋์ด๋? ์ต์ ๋ ์ฒด์ด๋์ด๋, ์ต์ ๋์ ํ๋กํผํฐ, ๋ฉ์๋, ์๋ธ์คํฌ๋ฆฝํธ๋ฅผ ๋ถ๋ฌ์ฌ ๋ ์ฌ์ฉ๋๋ ๋ฐฉ๋ฒ์ ๋๋ค. ์ต์ ๋์ด ๊ฐ์ ๊ฐ์ง๋ฉด ์ต์ ๋ ์ฒด์ด๋์ ์ฑ๊ณตํด ๊ฐ์ ์ฑ๊ณต์ ์ผ๋ก ๋ถ๋ฌ์ฌ ์ ์์ผ๋ฉฐ, ์ต์ ๋์ด nil์ด๋ฉด nil์ ๋ฐํํฉ๋๋ค. ๊ฐ์ ธ์ค๊ณ ์ถ์ ์ต์ ๋๊ฐ ๋ค์ ๋ฌผ์ํ(?)๋ฅผ ๋ถ์ฌ ์ฌ์ฉํ๋ฉฐ ๊ฐ์ ์ธ๋ํ๊ณผ ๋น์ทํ์ง๋ง, ๊ฐ์ ์ธ๋ํ์ ๊ฒฝ์ฐ ์ต์ ๋์ด nil์ผ ๋ ๋ฒ๊ธฐ๋ฉด ๋ฐํ์ ์๋ฌ๊ฐ ๋์ง๋ง, ์ต์ ๋ ์ฒด์ด๋์ ์ฌ์ฉํ์ฌ ๋ฒ๊ธฐ๋ฉด nil์ ๋ฆฌํดํ๋ ์ฐจ์ด๊ฐ ์์ต๋๋ค. Struct ๊ฐ ๋ฌด์์ด๊ณ ์ด๋ป๊ฒ ์ฌ์ฉํ๋์ง ์ค๋ช ํ์์ค. ๊ตฌ์กฐ์ฒด๋ ํ๋กํผํฐ๋ฅผ ์ ์ฅํ๊ฑฐ๋ ๋ฉ์๋๋ฅผ ์ ๊ณตํ๊ณ ์ด๋ฅผ ์บก์ํํ ์ ์๋ ํ์ (named type)์ ๋๋ค. structํค์๋๋ก ์ ์ํ๋ฉฐ ๋๋ฌธ์ ์นด๋ฉ์ผ์ด์ค๋ฅผ ์ฌ์ฉํฉ๋๋ค. ๊ตฌ์กฐ์ฒด ์ ์ ํ ๊ธฐ๋ณธ์ ์ผ๋ก ์์ฑ๋๋ ๋ฉค๋ฒ์์ด์ฆ ์ด๋์ ๋ผ์ด์ ๋ฅผ ์ฌ์ฉํ์ฌ ์ด๊ธฐํํ ์ ์์ผ๋ฉฐ ํ๋กํผํฐ ๊ฐ์ ์ ๊ทผํ๊ณ ์ถ๋ค๋ฉด ๋ง์นจํ๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฉ๋๋ค. Subscripts์ ๋ํด ์ค๋ช ํ์์ค. ์ฝ๋ ์ , ๋ฆฌ์คํธ, ์ํ์ค ๋ฑ ์งํฉ์ ํน์ member elements์ ์ ๊ทผํ ์ ์๋ ๋ฌธ๋ฒ์ ๋๋ค. ์๋ธ์คํฌ๋ฆฝํธ๋ subscriptํค์๋๋ก ์์ฑํ๋ฉฐ ํ๋ ์ด์์ ํ๋ผ๋ฏธํฐ์ ๋ฐํ ๊ฐ์ ์ง์ ํ์ฌ ์ ์ํฉ๋๋ค. getter์ setter ๋ชจ๋ ๊ตฌํ๊ฐ๋ฅํ๋ฉฐ, get-only๋ ๊ฐ๋ฅํ์ง๋ง, set-only๋ ๋ถ๊ฐ๋ฅํฉ๋๋ค. String์ ์ subscript๋ก ์ ๊ทผ์ด ์๋๋์ง ์ค๋ช ํ์์ค. String์ Character์ Collection์ ๋๋ค. Character๋ 1๊ฐ ์ด์์ Unicode Scalar๋ก ์ด๋ฃจ์ด์ ธ ์์ผ๋ฉฐ ํฌ๊ธฐ๊ฐ ๊ฐ๋ณ์ ์ ๋๋ค. ์ค์ ๋ก String์ ํ๋์ ๊ฐ์ ๋ค์ํ ๋ทฐ๋ฅผ ์ ๊ณตํฉ๋๋ค. ์ด๋ ๊ฒ ๋ค์ํ ๋ทฐ๋ฅผ ์ ๊ณตํ๊ธฐ ๋๋ฌธ์ ๋จ์ํ Intํ์ ์ผ๋ก ๊ธ์๋ค์ ์ฐธ์กฐํ๊ธฐ์๋ ์ด๋ ํ ๋ทฐ๋ฅผ ๊ธฐ์ค์ผ๋ก ์ธ๋ฑ์ฑ์ ์ง์ํด์ผ ํ๋์ง์ ๋ํด์ ์ ๋งคํ ๋ถ๋ถ์ด ์กด์ฌํ๊ธฐ ๋๋ฌธ์ String์ ๋ณ๋๋ก ์ค๊ณ๋ String.index๋ผ๋ ๊ตฌ์กฐ์ฒด๋ฅผ ๋ณ๋๋ก ์ ๊ณตํ์ฌ ์ธ๋ฑ์ฑ์ ์ง์ํฉ๋๋ค. ํจ์์ ๋ฉ์๋์ ์ฐจ์ด๋ฅผ ์ค๋ช ํ์์ค. func ํค์๋๋ก ์์ฑํ๋ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ์ฝ๋ ๋ธ๋ก์ ํจ์๋ผ๊ณ ํ๋ฉฐ func์ผ๋ก ์ ์ธํ ํจ์๊ฐ ํด๋์ค, ๊ตฌ์กฐ์ฒด, ์ด๊ฑฐํ ์์ ํฌํจ๋์ด ์๋ค๋ฉด ๋ฉ์๋๋ผ๊ณ ํํํฉ๋๋ค. instance ๋ฉ์๋์ class ๋ฉ์๋์ ์ฐจ์ด์ ์ ์ค๋ช ํ์์ค. ๋จผ์ intstance ๋ฉ์๋๋ ์ธ์คํด์ค ๋ฉ์๋์ด๊ธฐ ๋๋ฌธ์ ์ธ์คํด์ค์ ์ฐ๊ด๋ ๋ฉ์๋๋ก ์ธ์คํด์ค๋ฅผ ์์ฑํด์ผ๋ง ํธ์ถ์ด ๊ฐ๋ฅํฉ๋๋ค. ํ์ง๋ง class ๋ฉ์๋๋ ํ์ ๋ฉ์๋์ด๊ธฐ ๋๋ฌธ์ ์ธ์คํด์ค๋ฅผ ์์ฑํ์ง ์์๋ ํ์ ์ผ๋ก ์ ๊ทผํ ์ ์์ต๋๋ค. class ๋ฉ์๋์ static ๋ฉ์๋์ ์ฐจ์ด์ ์ ์ค๋ช ํ์์ค. class ๋ฉ์๋์ static ๋ชจ๋ Type ๋ฉ์๋์ด์ง๋ง ๋ฉ์๋ ์ค๋ฒ๋ผ์ด๋ฉ์ ์์ด์ ์ฐจ์ด๊ฐ ์์ต๋๋ค. static ๋ฉ์๋๋ Subclass์์ ํด๋น ํ์ ์ ๋ฉ์๋๋ฅผ ์ค๋ฒ๋ผ์ด๋ฉ ํ๋ ๊ฒ์ ๊ธ์งํฉ๋๋ค. class๋ static๊ณผ ๋ฐ๋๋ก Subclass์์ ํด๋น ํ์ ๋ฉ์๋๋ฅผ ์ค๋ฒ๋ผ์ด๋ฉ ํ๋ ๊ฒ์ ํ์ฉํฉ๋๋ค. Delegate ํจํด์ ํ์ฉํ๋ ๊ฒฝ์ฐ๋ฅผ ์๋ฅผ ๋ค์ด ์ค๋ช ํ์์ค. ViewController๋ฅผ ๋ณด๋ฉด, TableView์ ํน์ ์ ์ ์๋ ์ฌ๋ฌ ๊ฐ์ ๋ฒํผ ์ค ํน์ ๋ฒํผ์ ๋๋ ์ ๊ฒฝ์ฐ์ ํด์ผํ ์ผ์ ViewController๋ก ๋๊ฒจ์ฃผ๊ธฐ ์ํด Delegate ํจํด์ ์ฌ์ฉํฉ๋๋ค. TableViewCell์ด ์ ํ๋์์ ๊ฒฝ์ฐ ํธ์ถํ๋ ๊ธฐ๋ฅ์ TableView Delegate์์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ฒ๋ฆฌํ๊ณ ์์ง๋ง, ์ ๋ด๋ถ์ ํน์ ๋ฒํผ์ ๋ํ ์ด๋ฒคํธ๋ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค. ์ด์ ๊ฐ์ ๊ฒฝ์ฐ์ Custom Delegate๋ฅผ ๋ง๋ค์ด ๊ตฌํ์ด ๊ฐ๋ฅํฉ๋๋ค. Singleton ํจํด์ ํ์ฉํ๋ ๊ฒฝ์ฐ๋ฅผ ์๋ฅผ ๋ค์ด ์ค๋ช ํ์์ค. ์ฑ๊ธํค ํจํด์ ๊ฐ์ฒด๋ฅผ ํ๋ ์์ฑํด์ ๊ณต์ฉ์ผ๋ก ์ฌ์ฉํ๊ณ ์ถ์ ๋ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋๋ค. ์ฆ. ์ธ์คํด์ค๊ฐ ํ๋๋ง ์กด์ฌํ๋ ๊ฒ์ ๋ณด์ฆํ๊ณ ์ถ์ ๊ฒฝ์ฐ์ ์ฌ์ฉํ๊ฒ ๋๋๋ฐ, ์ฃผ๋ก ํ๊ฒฝ์ค์ , ๋คํธ์ํฌ ๊ฐ์ฒด, ๋ก๊ทธ์ธ ์ ๋ณด ๋ฑ์ ๋ฃ์ด๋๊ณ ํ์ํ ๋๋ง๋ค ์ฌ๋ฌ ๊ฐ์ฒด์์ ์ ๊ทผ ๊ฐ๋ฅํ๋๋ก ํฉ๋๋ค. KVO ๋์ ๋ฐฉ์์ ๋ํด ์ค๋ช ํ์์ค. KVO๋ ๊ฐ์ฒด์ ํ๋กํผํฐ ๋ณํ๋ฅผ ๊ฐ์ํ๊ณ , ๋ณํํ ๋์ ๋ง์ถฐ์ ํ์ํ ๋์์ ์ํํ ์ ์๋๋ก ํฉ๋๋ค. ์์๋ก MVC ์ํคํ ์ฒ์์ ๋ชจ๋ธ์ด ๋ณํํ๋ฉด, ๋ค๋ฅธ ์์๋ค๋ ๊ทธ์ ๋ง์ถฐ ๋ณํํด์ ์์คํ ์ ์ฒด์ ์ผ๊ด์ฑ์ ์ ์งํด์ผํฉ๋๋ค. ์ปจํธ๋กค๋ฌ์์ ๋ชจ๋ธ์ ์ฃผ๊ธฐ์ ์ผ๋ก ํ์ธํ์ฌ ๋ณํ ์ฌ๋ถ๋ฅผ ํ์ธํ๋ ๋ฐฉ๋ฒ๋ ์๊ฒ ์ง๋ง, ๋ณํ๊ฐ ๋งค๋ฒ ์ผ์ด๋๋ ๊ฒ์ด ์๋๋ค ๋ณด๋ ์๋ฌด๋๋ ๋นํจ์จ์ ์ ๋๋ค. ๋์ ์ปจํธ๋กค๋ฌ๋ ๋ชจ๋ธ์ ๊ฐ์์๋ฅผ ๋ถ์ด๊ณ , ๋ชจ๋ธ์ด ๋ณํํ ๋ ๊ฐ์์์๊ฒ ์๋ฆผ์ ์ฃผ๊ณ ๊ฐ์์๋ ์ปจํธ๋กค๋ฌ์ ๋ก์ง์ ์ํํ ์ ์๋๋ก ํ๋ฉด ๋ณํ๊ฐ ์ผ์ด๋ ๋๋ง ํ์ํ ๋์์ ์ํํ ์ ์๊ฒ ๋์ด ์ข ๋ ํจ์จ์ ์ ๋๋ค. Delegates์ Notification ๋ฐฉ์์ ์ฐจ์ด์ ์ ๋ํด ์ค๋ช ํ์์ค. ๋จผ์ ๋ ๋ฐฉ์ ๋ชจ๋ ๊ฐ์ฒด๊ฐ์ ์ํต์ ์ํด ๋ง๋ค์ด์ง ๊ฒ์ธ๋ฐ, ๋จผ์ delegate๋ protocol์ ์ ์ํ๊ณ ์ด ์ด๋ฒคํธ๋ฅผ ๋์ ์ฒ๋ฆฌํ ๊ฐ์ฒด๊ฐ ์ฑํํ์ฌ ์ฌ์ฉํ๊ฒ ๋๊ธฐ๋๋ฌธ์ ์ฃผ๋ก 1:1๋ก ์ด๋ฒคํธ๋ฅผ ์ ๋ฌํ ๋ ๋ง์ด ์ฌ์ฉ๋ฉ๋๋ค. notification ๋ฐฉ์์ ์ด๋ฒคํธ๋ฅผ 1:N์ผ๋ก ์ ๋ฌํ ๋ ์ฉ์ดํฉ๋๋ค. NotificationCenter๋ผ๋ ์ฑ๊ธํค๊ฐ์ฒด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ด๋ฒคํธ ๋ฐ์์ฌ๋ถ๋ฅผ ์ต์ ๋ฒ๋ฅผ ๋ฑ๋กํ ๊ฐ์ฒด์๊ฒ ์ ๋ฌํ๋ ๋ฐฉ์์ผ๋ก ๊ตฌ์ฑ๋ฉ๋๋ค. ๋ฐ๋ผ์ ๋ค์์ ๊ฐ์ฒด์๊ฒ ์์ฝ๊ฒ ์ด๋ฒคํธ ์ ๋ฌ์ด ๊ฐ๋ฅํฉ๋๋ค. ํ๋กํ ์ฝ์ด๋ ๋ฌด์์ธ์ง ์ค๋ช ํ์์ค. protocol์ ํน์ ์์ ๋๋ ๊ธฐ๋ฅ์ ๊ตฌํํ๊ธฐ ์ํ ๋ฉ์๋, ํ๋กํผํฐ ๊ทธ๋ฆฌ๊ณ ๊ธฐํ ๋ค๋ฅธ ์๊ตฌ์ฌํญ๋ค์ ์ฒญ์ฌ์ง์ ์ ์ํฉ๋๋ค. ๊ทธ๋ฐ ๋ค์, ํ๋กํ ์ฝ์ ํด๋์ค, ๊ตฌ์กฐ์ฒด, ์ด๊ฑฐํ์์ ์ฑํํ์ฌ ์ด๋ฌํ ์๊ตฌ์ฌํญ์ ์ค์ ๋ก ๊ตฌํํ ์ ์์ต๋๋ค. ํ๋กํ ์ฝ์ ํ๋กํผํฐ๊ฐ ์ ์ฅ ํ๋กํผํฐ์ธ์ง, ์ฐ์ฐ ํ๋กํผํฐ์ธ์ง ๋ช ์ํ์ง ์์ผ๋ฉฐ ์ฝ๊ธฐ๋ง ๊ฐ๋ฅํ์ง, ์ฝ๊ธฐ/์ฐ๊ธฐ๊ฐ ๋ชจ๋ ๊ฐ๋ฅํ์ง ๋ช ์ํด์ผํ๊ณ ๋ชจ๋ var๋ก ์ ์ธ๋์ด์ผ ํฉ๋๋ค. Hashable์ด ๋ฌด์์ด๊ณ , Equatable์ ์ ์์ํด์ผ ํ๋์ง ์ค๋ช ํ์์ค. Hashable์ ์ ์ hash๊ฐ์ ์ ๊ณตํ๋ ํ์ ์ผ๋ก ์ ์๋ ํ๋กํ ์ฝ์ ๋๋ค. ํด์๊ฐ์ ์ธ์คํด์ค๋ฅผ ์๋ณํ๋ ๊ฐ์ผ๋ก ์ ์ผ์ฑ์ ๊ฐ์ง๊ณ ์์ด์ผ ํฉ๋๋ค. ํด์ ๊ฐ์ด ์ ์ผํ ๊ฐ์ธ์ง๋ฅผ ๋น๊ตํด์ผํ๊ธฐ ๋๋ฌธ์ Equatable ํ๋กํ ์ฝ์ ์์ ๋ฐ์ ๊ฐ์ ๋น๊ตํ ์ ์๋๋ก ํ๊ณ ์์ต๋๋ค. mutating ํค์๋์ ๋ํด ์ค๋ช ํ์์ค. Swift์์ ๊ตฌ์กฐ์ฒด์ ์ด๊ฑฐํ๊ณผ ๊ฐ์ ๊ฐ ํ์ ์ ์์ฑ์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ธ์คํด์ค ๋ฉ์๋ ๋ด์์ ์์ ํ ์ ์์ต๋๋ค. ๊ฐ ํ์ ์ ์์ฑ์ ์์ ํ๋ ค๋ฉด ์ธ์คํด์ค ๋ด์์ mutatingํค์๋๋ฅผ ์ฌ์ฉํด์ผํฉ๋๋ค. func ํค์๋ ์์ mutating ํค์๋๋ฅผ ์์ฑํ๋ฉด ๊ฐ ํ์ ํ๋กํผํฐ๋ฅผ ์์ ํ ์ ์์ต๋๋ค. ํ์ถ ํด๋ก์ ์ ๋ํ์ฌ ์ค๋ช ํ์์ค. Swift์์๋ ํจ์์ ํ๋ผ๋ฏธํฐ๋ก ์ ๋ฌ๋ ํด๋ก์ ๋ ๊ธฐ๋ณธ์ ์ผ๋ก ํจ์ ๋ด๋ถ์์๋ง ์ฌ์ฉ์ด ๊ฐ๋ฅํฉ๋๋ค. ์ฆ ํ๋ผ๋ฏธํฐ๋ก ์ ๋ฌ๋ฐ์ ํด๋ก์ ๋ ๋ด๋ถ์์ ์ง์ ํธ์ถ๋ง ๊ฐ๋ฅํ๊ณ , ์ธ๋ถ ๋ณ์/์์์ ์ ์ฅํ๋ ๊ฒ์ด ๋ถ๊ฐ๋ฅํ ํํ์ ๋๋ค. ์ด๋ ํด๋ก์ ์์ @escaping ํค์๋๋ฅผ ์ฌ์ฉํ๋ฉด ํด๋น ํด๋ก์ ๋ฅผ ์ธ๋ถ ๋ณ์/์์์ ์ ์ฅ์ด ๊ฐ๋ฅํ๋ฉฐ, ํด๋น ํจ์๊ฐ ๋๋์ ๋ฆฌํด๋ ์ดํ์๋ ํด๋ก์ ์คํ์ด ๊ฐ๋ฅํฉ๋๋ค. Extension์ ๋ํด ์ค๋ช ํ์์ค. Extension์ด๋ ๊ธฐ์กด ํด๋์ค, ๊ตฌ์กฐ์ฒด, ์ด๊ฑฐํ ํ์ ์ ์๋ก์ด Property, Method, Initializer ๋ฑ์ ์ถ๊ฐํ๋ ๊ฒ์ ๋๋ค. ์ ์ฅ ํ๋กํผํฐ๋ ์ถ๊ฐํ ์ ์์ผ๋ฉฐ, ์ฐ์ฐ ํ๋กํผํฐ๋ง ์ถ๊ฐ ๊ฐ๋ฅํฉ๋๋ค. ๋ฉ์๋๋ ์ธ์คํด์ค ๋ฉ์๋, ํ์ ๋ฉ์๋ ๋ชจ๋ ์ถ๊ฐ ๊ฐ๋ฅํฉ๋๋ค. Class์์๋ Designated Initializer์ deinitializer๋ ์ถ๊ฐํ ์ ์์ผ๋ฉฐ, Convenience initializer๋ง ์ถ๊ฐํ ์ ์์ต๋๋ค. Struct์์ extension์ผ๋ก ์์ฑ์๋ฅผ ์ถ๊ฐํ ์์๋ Memberwise Initializer๋ฅผ ๋ณด์กดํ๋ฉฐ ์๋ก์ด Initializer๋ฅผ ์ถ๊ฐํ ์ ์์ต๋๋ค. ๋ํ Where์ ์ฌ์ฉํ์ฌ ํน์ ์กฐ๊ฑด์ ๋ง์กฑ์ํฌ ๋๋ง ๊ธฐ๋ฅ์ ํ์ฅ์ํฌ ์ ์์ต๋๋ค. Extension ๋ด๋ถ์์ ํจ์๋ฅผ overrideํ ์ ์๋์ง ์ค๋ช ํ์์ค. ๊ธฐ๋ณธ์ ์ผ๋ก ๋ถ๊ฐ๋ฅํ๋ฉฐ ๋ฉ์๋๊ฐ Objective-C์ ํธํ๋๋ ๊ฒฝ์ฐ์๋ง ๋ฉ์๋๋ฅผ Overrideํ ์ ์์ต๋๋ค. ์ฆ, @objc ํค์๋๋ฅผ func ์์ ์์ฑํด์ฃผ๋ฉด Extension์์ ํด๋น ํจ์๋ฅผ overrideํ ์ ์์ต๋๋ค. ์ด๋ฌํ ๋์์ด ๊ฐ๋ฅํ ์ด์ ๋ ์ปดํ์ผ๋ฌ๊ฐ Objective-C์์ ํธํ์ฑ์ ์ํด Extension์์ Override๋ฅผ ํ์ฉํ๊ธฐ ๋๋ฌธ์ ๋๋ค. ์ ๊ทผ ์ ์ด์์ ์ข ๋ฅ์ ์ด๋ค๊ฒ ์๋์ง ์ค๋ช ํ์์ค. ์ ๊ทผ์ ์ด์๋ก๋ open, public, internal, fileprivate, private์ด ์์ต๋๋ค. ๋จผ์ private์ ๊ฐ์ฅ ํ์ ์ ์ธ ๋ฒ์๋ก ๊ธฐ๋ฅ์ ์ ์ํ๊ณ ๊ตฌํํ ๋ฒ์ ๋ด์์๋ง ์ฌ์ฉ์ด ๊ฐ๋ฅํฉ๋๋ค. Fileprivate๋ Fileprivate์ผ๋ก ์ง์ ๋ ์์๊ฐ ๊ตฌํ๋ ์์คํ์ผ ๋ด๋ถ์์๋ง ์ฌ์ฉ์ด ๊ฐ๋ฅํฉ๋๋ค. Internal์ ์ง์ ํ๊ธฐํ์ง ์์๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์ ์ฉ๋๋ ์ ๊ทผ ์์ค์ผ๋ก ํด๋น ๋ชจ๋ ์ ์ฒด์์ ์ฌ์ฉ ๊ฐ๋ฅํฉ๋๋ค. public๊ณผ Open ๋ชจ๋ ์ ์ธํ ๋ชจ๋์ด ์๋ ๋ค๋ฅธ ๋ชจ๋์์๋ ์ฌ์ฉ๊ฐ๋ฅํฉ๋๋ค. open๊ณผ public ํค์๋์ ์ฐจ์ด๋ฅผ ์ค๋ช ํด๋ณด์ธ์. Open์ ๋ค๋ฅธ ๋ชจ๋์์ ์ค๋ฒ๋ผ์ด๋์ ์๋ธํด๋์ฑ์ด ๊ฐ๋ฅํ์ง๋ง Public ์ ๊ทผ์๋ก ์ ์ธ๋ ๊ฒ์ ๋ค๋ฅธ ๋ชจ๋์์๋ ์ค๋ฒ๋ผ์ด๋์ ์๋ธํด๋์ฑ์ด ๋ถ๊ฐ๋ฅํฉ๋๋ค. fileprivate์ ์ค๋ช ํ๊ณ ์ธ์ ์ฌ์ฉํ๋ฉด ์ข์์ง ์ด์ผ๊ธฐํด๋ณด์ธ์. fileprivate์ ๊ฐ์ ์์คํ์ผ ๋ด์์์ ์ ๊ทผ๋ง ํ์ฉํฉ๋๋ค. ๋ฐ๋ผ์ ๊ฐ์ ํ์ผ ๋ด๋ถ์์๋ง ์ฌ์ฉ๋ ๋ filprivate์ผ๋ก ์ ํํ๋ฉด ์ข์ต๋๋ค. fileprivate๊ณผ private์ ์ฐจ์ด๋ฅผ ์ค๋ช ํด๋ณด์ธ์. fileprivate์ ๊ฐ์ ํ์ผ ๋ด๋ถ์ ์๋ค๋ฉด ์ ๊ทผ์ ํ์ฉํ์ง๋ง, private์ ๊ฐ์ ํ์ผ์ ์์ด๋ private์ผ๋ก ์ ์ธํ ๋์์ ๊ตฌํ๋ถ ๋ด๋ถ, ๊ทธ๋ฆฌ๊ณ ๊ฐ์ ํ์ผ์ ์๋ ๋์ผํ ์ ์ธ์ Extension์์๋ง ์ ๊ทผ์ด ๊ฐ๋ฅํฉ๋๋ค. defer๋ ๋ฌด์์ธ์ง ์ค๋ช ํ์์ค. defer๋ฌธ์ด ์ํ ํจ์ ์ข ๋ฃ ์ง์ ์ ์คํ๋๋ ๊ตฌ๋ฌธ์ ๋๋ค. ๋ค์ค defer๋ฌธ์ด ์กด์ฌํ๋ค๋ฉด ์ญ์์ผ๋ก ์คํ๋ฉ๋๋ค. ํ์ง๋ง defer๋ฌธ์ ๋ง๋๊ธฐ ์ ์ ์ข ๋ฃ๋๋ค๋ฉด ์คํ์ ์ ์ฅ๋ ์ ์์ผ๋ฏ๋ก ์ค์ฝํ ์ข ๋ฃ ํ์๋ defer ๋ฌธ์ด ์คํ๋์ง ์์ต๋๋ค. defer๊ฐ ํธ์ถ๋๋ ์์๋ ์ด๋ป๊ฒ ๋๊ณ , defer๊ฐ ํธ์ถ๋์ง ์๋ ๊ฒฝ์ฐ๋ฅผ ์ค๋ช ํ์์ค. defer๋ ์์ฐจ์ ์ผ๋ก ์คํ์ ์ ์ฅํ๊ธฐ ๋๋ฌธ์ LIFO๋ก ํธ์ถ๋ฉ๋๋ค. ์ฆ ์ ์ธ๋ ์ญ์์ผ๋ก ํธ์ถ๋๋ฉฐ ์ ์ธ๋ ์ฝ๋ ๋ธ๋ญ์ ๋น ์ ธ๋๊ฐ๊ธฐ ์ง์ ์ ์คํ๋ฉ๋๋ค. defer๊ฐ ํธ์ถ๋๊ธฐ ์ ์ ํจ์๊ฐ ์ข ๋ฃ๋ ๋ defer๊ฐ ๋ถ๋ฆฌ์ง ์์ต๋๋ค. defer๊ฐ ํธ์ถ๋์ง ์๋ ๊ฒฝ์ฐ๋ throw๋ฅผ ์ด์ฉํ์ฌ ์ค๋ฅ๋ฅผ ๋์ง ๊ฒฝ์ฐ์ ๋๋ค. defer ๊ตฌ๋ฌธ์ ๋๋ฌํ๊ธฐ ์ ์ ํจ์๊ฐ ์ข ๋ฃ๋์ด ๋ฒ๋ฆฌ๋ฉด ์คํ์ ์ ์ฅ ๋ ์ ์๊ธฐ ๋๋ฌธ์ defer๊ฐ ํธ์ถ๋์ง ์์ต๋๋ค. guard๋ฌธ์ ์ฌ์ฉํ์ฌ ์ค๊ฐ์ ํจ์๋ฅผ ์ข ๋ฃํ๋ ๊ฒฝ์ฐ์๋ ๋์ผํ ์ด์ ๋ก ํธ์ถ๋์ง ์์ต๋๋ค. ๋ํ ๋ฆฌํด๊ฐ์ด Never์ธ ๊ฒฝ์ฐ์๋ ํธ์ถ๋์ง ์์ต๋๋ค. Generic์ ๋ํด ์ค๋ช ํ์์ค. ์ ๋ค๋ฆญ์ด๋ ํ์ ์ ์์กดํ์ง ์๋ ๋ฒ์ฉ ์ฝ๋๋ฅผ ์์ฑํ ๋ ์ฌ์ฉํฉ๋๋ค. ์ ๋ค๋ฆญ์ ์ฌ์ฉํ๋ฉด ์ค๋ณต์ ํผํ๊ณ , ์ฝ๋๋ฅผ ์ ์ฐํ๊ฒ ์์ฑํ ์ ์์ต๋๋ค. ์ ๋ค๋ฆญ ํจ์๋ฅผ ํตํด ํจ์๋ฅผ ํธ์ถํ ๋ Type Parameter์ ํ์ ์ ๊ฒฐ์ ํ์ฌ ํ์ ์ ์๊ด์์ด ํจ์๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๋ํ ๊ตฌ์กฐ์ฒด, ํด๋์ค, ์ด๊ฑฐํ์๋ ์ ๋ค๋ฆญ์ ๊ฒฐํฉํ ์ ์์ผ๋ฉฐ, ์ ๋ค๋ฆญ ํ์ ์ด๋ผ๊ณ ํฉ๋๋ค. Resultํ์ ์ ๋ํด ์ค๋ช ํ์์ค. Resultํ์ ์ success์ failure ๋ ๊ฐ์ง case๊ฐ ์๋ enum์ ๋๋ค. ๊ทธ์ค Failure์ Error Protocol์ ์ค์ํด์ผํฉ๋๋ค. ๊ธฐ์กด์ throwing function์ ์ ํํ ์ด๋ค ์๋ฌ ํ์์ ๋์ง๋์ง ํ์ ํ๊ธฐ ์ด๋ ค์ด ๋ฐ๋ฉด Result Type์ ํ์ฉํ๋ฉด ์์ ์ ๊ฒฐ๊ณผ๋ฅผ ๋ช ํํ ๊ตฌ๋ถ ๊ฐ๋ฅํฉ๋๋ค. ๋คํธ์ํฌ์ ๊ฐ์ด ์คํจํ ๊ฐ๋ฅ์ฑ์ด ์๋ ์์ ์ ์ฑ๊ณต์ฌ๋ถ์ ๊ฒฐ๊ณผ๋ฅผ ์ฝ๊ฒ ํํํ ์ ์์ต๋๋ค. Typealias์ ๋ํด ์ค๋ช ํ์์ค. Typealias๋ ๊ธฐ์กด์ ์ ์ธ๋์ด์๋ ์ ํ์ ์๋ก์ด ์ ํ์ ๋ณ์นญ์ ์ฌ์ฉํจ์ผ๋ก์จ ์ฝ๋๋ฅผ ๋ ์ฝ๊ฒ ์ดํดํ ์ ์๊ฒ ํ๋ ๋ฌธ๋ฒ์ ๋๋ค. Swift์์๋ typealias๋ฅผ ๋๋ถ๋ถ์ ์ ํ์ ์ฌ์ฉํ ์ ์์ผ๋ฉฐ, ํฌ๊ฒ ๋ด์ฅ ์ ํ, ์ฌ์ฉ์ ์ ์ ์ ํ, ๋ณตํฉ ์ ํ์ด ์์ต๋๋ค. Codable์ ๋ํ์ฌ ์ค๋ช ํ์์ค. Codable์ด๋ผ๋ Typealias๋ Decodable๊ณผ Encodable ํ๋กํ ์ฝ์ ์ค์ํ๋ ํ์ ์ ๋๋ค. enum / function / closure ๊ฐ๊ฐ value type ์ธ๊ฐ reference type ์ธ๊ฐ? enum์ ๊ฐ ํ์ ์ด๋ฉฐ function๊ณผ closure๋ ์ฐธ์กฐํ์ ์ ๋๋ค. Array, Dictionary, Set ๋ฑ์ ์ปฌ๋ ์ ํ์ ์ value type ์ธ๊ฐ reference type ์ธ๊ฐ? Struct๋ก ๊ตฌํ๋์ด์์ผ๋ฏ๋ก ๊ฐ ํ์ ์ ๋๋ค. Set์ ๋ํ์ฌ ์ค๋ช ํ์์ค. set์ ์ ๋ ฌ๋์ง ์์ ์ปฌ๋ ์ ์ ๋๋ค. ๋ฐฐ์ด๊ณผ ๋ฌ๋ฆฌ ์ค๋ณต ์์๋ฅผ ํ์ฉํ์ง ์์ผ๋ฉฐ, ํด์๋ฅผ ํตํด ๊ฐ์ ์ ์ฅํ๊ธฐ ๋๋ฌธ์ ๋ฐฐ์ด์ ๋นํด ๊ฒ์ ์๋๊ฐ ๋น ๋ฅด๊ณ , ์ ์ฅ๋๋ ์๋ฃํ์ Hashable ํ๋กํ ์ฝ์ ์ค์ํ๊ณ ์์ด์ผ ํฉ๋๋ค. ๋ํ Set๋ ๋ฐฐ์ด, ๋์ ๋๋ฆฌ์ ๊ฐ์ Collection Type์ด๊ธฐ ๋๋ฌธ์, ๊ตฌ์กฐ์ฒด๋ก Stack์ ์ ์ฅ๋ฉ๋๋ค. Swift์ upcasting๊ณผ downcasting์ ์ฐจ์ด์ ๋ํด์ ์ค๋ช ํด๋ณด์ธ์. upcasting์ ์์ ๊ด๊ณ๊ฐ ์๋ ํด๋์ค๋ค๋ผ๋ฆฌ๋ง ๊ฐ๋ฅํฉ๋๋ค. as๋ฅผ ์ฌ์ฉํ์ฌ ์ ์บ์คํ ํ ์ ์์ผ๋ฉฐ ์ปดํ์ผ ํ์์ ํ์ ์บ์คํ ํ์ฌ ํญ์ ์ฑ๊ณตํฉ๋๋ค. downcasting์ ์ํผ ํด๋์ค ์ธ์คํด์ค๋ฅผ ์๋ธ ํด๋์ค ํ์ ์ผ๋ก ์ฐธ์กฐํฉ๋๋ค. ๋ค์ด ์บ์คํ ์ ์คํจํ ์ ์๊ธฐ ๋๋ฌธ์ as?, as! ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํฉ๋๋ค. as? ์ as! ์ฐจ์ด๋ฅผ ์ค๋ช ํด๋ณด์ธ์. as?๋ ์คํจํ ๊ฒฝ์ฐ nil์ ๋ฆฌํดํฉ๋๋ค. as!๋ ์คํจํ ๊ฒฝ์ฐ ์๋ฌ๊ฐ ๋ฐ์ํฉ๋๋ค. == ์ฐ์ฐ์์ === ์ฐ์ฐ์๋ ์ด๋ป๊ฒ ๋ค๋ฅธ๊ฐ์? == ์ฐ์ฐ์๋ ๊ฐ์ ๋น๊ตํ๋๋ฐ ์ฌ์ฉ๋๊ณ , === ์ฐ์ฐ์๋ ์ฐธ์กฐ ๊ฐ์ ๋น๊ตํ๋๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. Enum์์ raw value์ associated value์ ๋ํด ์ค๋ช ํด๋ณด์ธ์ raw value ์์๊ฐ์ ๋ชจ๋ ์ผ์ด์ค๊ฐ ๋์ผํ ํ์์ ์ฌ์ฉํด์ผํ๊ณ , ์ผ์ด์ค๋น ๊ฐ์ ํ๋๋ฐ์ ์ ์ฅํ ์ ์๋ ํ๊ณ์ ์ด ์๋๋ฐ, ์ฐ๊ด ๊ฐ์ ํํ์ ์ฌ์ฉํ์ฌ ํ๋์ ์ผ์ด์ค์ ์๋ก ๋ค๋ฅธ ์ฐ๊ด๊ฐ๋ค์ ์ ์ฅํ ์ ์์ต๋๋ค. named tuple์ ์ฌ์ฉํ์ฌ ์ด๋ฆ์ ๋ถ์ผ ์๋ ์์ผ๋ฉฐ, ๋ค์ํ ํ์ ์ ๊ฐ์ง ์ฌ๋ฌ๊ฐ์ ๊ฐ๋ค์ ๊ฐ์ง๊ฒ ํ ์ ์์ต๋๋ค. inout์ ์ธ์ ์ฌ์ฉํ๋ฉด ์ข์๊น์? swift์์ ํ๋ผ๋ฏธํฐ๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์์์ ๋๋ค. ์ด๋ฌํ ํ๋ผ๋ฏธํฐ๋ฅผ ์์ ํ๊ณ ์ถ์ ๋ ํ๋ผ๋ฏธํฐ์ ํ์ ์์ inoutํค์๋๋ฅผ ์์ฑํ ํ ํจ์๋ฅผ ํธ์ถํ ๋ ์ธ์๊ฐ์ผ๋ก ๋์ด๊ฐ๋ ๋ณ์๋ช ์ผ์ชฝ์ & ๊ธฐํธ๋ฅผ ๋ถ์ฌ ์ฌ์ฉํฉ๋๋ค. ์ด๋ฌํ ์ญํ ์ ์ํํ๋ inout ํค์๋๋ ๋งค๊ฐ๋ณ์๋ก ๋๊ฒจ์ง ๋ณ์์ ๊ฐ์ ํจ์ ๋ด์์ ๋ณ๊ฒฝ์ํค๊ณ ํจ์๊ฐ ๋ฐํ๋ ํ์๋ ์ด ๋ณํ๋ ๊ฐ์ ์๋ณธ ๋ณ์์ ์ ์ฉ์ํค๊ณ ์ถ์ ๋ ์ฌ์ฉํฉ๋๋ค. ๋ฉ์๋ ์์์ ์ธ์ self๋ฅผ ์ฌ์ฉํด์ผํ ๊น์? ํ๋ผ๋ฏธํฐ์ ์ด๋ฆ์ด ์ธ์คํด์ค ํ๋กํผํฐ ์ด๋ฆ๊ณผ ๊ฒน์น ๊ฒฝ์ฐ, ์ธ์คํด์ค์ ํ๋กํผํฐ์์ ๋ช ์ํ๊ธฐ ์ํด์ self๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. Class์ Struct์ ๊ณตํต์ ๊ณผ ์ฐจ์ด์ ์ ์ค๋ช ํด๋ณด์ธ์. Class์ Struct ๋ชจ๋ ๊ฐ์ ์ ์ฅํ ํ๋กํผํฐ๋ฅผ ์ ์ธํ ์ ์์ผ๋ฉฐ, ๋ฉ์๋๋ฅผ ์ ์ธํ ์ ์์ต๋๋ค. ๋ด๋ถ ๊ฐ์ .์ ์ฌ์ฉํ์ฌ ์ ๊ทผํ ์ ์๊ณ , ์์ฑ์๋ฅผ ์ฌ์ฉํด ์ด๊ธฐ ์ํ๋ฅผ ์ค์ ํ ์ ์์ต๋๋ค. Extension์ ์ฌ์ฉํ์ฌ ๊ธฐ๋ฅ์ ํ์ฅํ ์ ์์ผ๋ฉฐ, protocol์ ์ฑํํ์ฌ ๊ธฐ๋ฅ์ ์ค์ ํ ์ ์์ต๋๋ค. ํ์ง๋ง Class๋ ์ฐธ์กฐํ์ ์ด๋ฉฐ, ARC๋ก ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ด๋ฆฌํฉ๋๋ค. ๋ํ ์์์ด ๊ฐ๋ฅํ๋ฉฐ ํ์ ์บ์คํ ์ ํตํด ๋ฐํ์์์ ํด๋์ค ์ธ์คํด์ค ํ์ ์ ํ์ธํ ์ ์์ต๋๋ค. ๋ฐ๋ฉด์ Struct๋ ๊ฐ ํ์ ์ด๋ฉฐ, ์์์ด ๋ถ๊ฐ๋ฅํฉ๋๋ค. ๊ฐํ ์ฐธ์กฐ๋ ๋ฌด์์ด๊ณ ์ ํ์ํ๊ฐ์? ๊ฐํ ์ฐธ์กฐ๋ ์ฐธ์กฐ ํ์ ์ธ์คํด์ค๋ฅผ ๋ณ์์ ํ ๋นํ๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. ์ค์ํํธ์ ARC๋ ๊ฐํ ์ฐธ์กฐ์ ์ฐธ์กฐ ์นด์ดํธ๋ฅผ ์ฆ๊ฐ์ํต๋๋ค. ๋ฐ๋ผ์ ๊ฐํ ์ฐธ์กฐ๊ฐ ์์ด์ผ๋ง ์ค์ํํธ์์ ์ฐธ์กฐ ํ์ ์ ์ธ์คํด์ค๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ์ ์งํ ์ ์์ต๋๋ค. strong, weak, unowned reference๋ ๊ฐ๊ฐ ์ธ์ ์ฌ์ฉํ ๊น์? ๋ฉ๋ชจ๋ฆฌ์์ ์ธ์คํด์ค๊ฐ ํด์ ๋๋ ๊ฒ์ ๋ง๊ธฐ ์ํด Strong reference๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. strong reference๋ ์ฐธ์กฐ ์นด์ดํธ๋ฅผ 1 ์ฆ๊ฐ์ํค๊ธฐ ๋๋ฌธ์ ๋ฉ๋ชจ๋ฆฌ์์ ํด์ ๋์ง ์์ต๋๋ค. weak reference๋ ์ฐธ์กฐ ์นด์ดํธ๋ฅผ ์ฆ๊ฐ์ํค์ง ์์ต๋๋ค. weak reference๋ ํญ์ var๋ก ์ ์ธ๋๋ ์ต์ ๋ ํ์ ์ด ๋์ด์ผ ํฉ๋๋ค. weak์ผ๋ก ์ฐธ์กฐํ๊ณ ์๋ ์ธ์คํด์ค๊ฐ ํด์ ๋ ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค. ์ํ ์ฐธ์กฐ์ ๊ฐ๋ฅ์ฑ์ด ์๋ ์ํฉ์์ weak์ ํตํด ๋ฐฉ์งํ ์ ์์ต๋๋ค. unowned reference๋ weak๊ณผ ๋์ผํ๊ฒ ์ฐธ์กฐ ์นด์ดํธ๋ฅผ ์ฆ๊ฐ์ํค์ง ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ unowned๋ก ์ ์ธ๋ ๋ณ์๋ nil์ ๊ฐ์ง ์ ์์ต๋๋ค. unowned๋ก ์ฐธ์กฐํ๊ณ ์๋ ์ธ์คํด์ค๊ฐ ํด์ ๋๋ฉด unowned๋ nil์ด ์๋๋ผ ๋ ์ด์ ์ฐธ์กฐํ ์ ์๋ ์ฃผ์๋ฅผ ๊ณ์ ์ฐธ์กฐํ๊ฒ ๋๊ณ unowned ๋ณ์๋ฅผ ์ฐธ์กฐํ๋ ค๊ณ ํ๋ฉด ๋ฐํ์ ์๋ฌ๊ฐ ๋ฐ์ํฉ๋๋ค. ๋ฐ๋ผ์ unowned๋ ํด๋น ๋ณ์๊ฐ ์ฐธ์กฐํ๋ ์ธ์คํด์ค๋ณด๋ค ๋จผ์ ํด์ ๋๋ ๊ฒ์ด ํ์คํ ์ํฉ์์๋ง ์ฌ์ฉํด์ผํฉ๋๋ค. Array, Set, Dictionary์ ์ฐจ์ด์ ์ด ๋ญ๊น์? Array๋ ๋ฆฌ์คํธ ์ปฌ๋ ์ ์ผ๋ก ์ธ๋ฑ์ค๋ฅผ ํตํด ์์์ ์ ๊ทผํ ์ ์์ต๋๋ค. Set์ Hashable ํ๋กํ ์ฝ์ ์ฑํํ๋ ๊ฐ์ ์ ์ฅํด ์ค๋ณต๋์ง ์์ ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํฉ๋๋ค. ์์๊ฐ ๋ณด์ฅ๋์ง ์์ผ๋ฉฐ, ๊ต์งํฉ, ์ฐจ์งํฉ ๋ฑ ์งํฉ ์ฐ์ฐ์ ๋ฉ์๋๋ก ์ ๊ณตํฉ๋๋ค. Dictionary๋ Key-Value ํํ๋ก ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ๋ ์ฝ๋ ์ ์ ๋๋ค. ๋์ ๋๋ฆฌ์ Key๋ก ์ฌ์ฉ๋ ํ์ ์ Hashable ํ๋กํ ์ฝ์ ์ฑํํ๊ณ ์ค๋ณต๋ ํค๋ฅผ ํ์ฉํ์ง ์์ผ๋ฉฐ ์์๋ฅผ ๋ณด์ฅํ์ง ์์ต๋๋ค. required ํค์๋์ ๋ํด์ ์ค๋ช ํด๋ณด์ธ์. required ํค์๋๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋์ ๋ผ์ด์ ๋ฅผ ์ง์ ํ ์ ์์ต๋๋ค. ์ด ํ์ ์ด๋์ ๋ผ์ด์ ๋ ๋ชจ๋ ์์ ํด๋์ค์์ ๋ฐ๋์ ๊ตฌํํด์ผ ํ๋ ์ด๋์ ๋ผ์ด์ ๋ก, required ํค์๋๋ฅผ ๋ถ์ฌ ์ฌ์ฉ ๊ฐ๋ฅํ๊ณ ์์ ํด๋์ค์์ ๊ตฌํํ ๋์๋ required ํค์๋๋ฅผ ๋ถ์ฌ์ผ ํฉ๋๋ค. required๋ ์ค๋ฒ๋ผ์ด๋๋ฅผ ๊ธฐ๋ณธ์ผ๋ก ํฌํจํ๊ณ ์์ต๋๋ค. Self์ self์ ์ฐจ์ด๊ฐ ๋ญ๊น์? self๋ ํ์ฌ ์ธ์คํด์ค๋ฅผ ๊ฐ๋ฆฌํต๋๋ค. Self๋ ํ๋กํ ์ฝ์์ ์ฌ์ฉ๋๋ฉด ํ๋กํ ์ฝ์ ์ฑํํ๋ ํ์ ์ ์๋ฏธํ๊ณ , ํด๋์ค๋ ๊ตฌ์กฐ์ฒด, ์ด๊ฑฐํ์์ ์ฌ์ฉ๋๋ฉด ์ค์ ์ ์ธ์ ์ฌ์ฉ๋ ํ์ ์ ์๋ฏธํฉ๋๋ค. Array๋ณด๋ค Set์ ์ฌ์ฉํ๋๊ฒ ๋ ์ข์ ๋๋ ์ธ์ ์ผ๊น์? ์์๊ฐ ์ค์ํ์ง ์๊ณ ๋ฐ์ดํฐ๋ฅผ ์ค๋ณต์์ด ๊ณ ์ ํ๊ฒ ๊ด๋ฆฌํ ๋ Set์ ์ฌ์ฉํ๋ ๊ฒ์ด ๋ ์ข์ต๋๋ค. ํนํ Set์ ์ญ์ , ์ฝ์ , ์กฐํ๋ฅผ ๋ชจ๋ O(1)์ ํ ์ ์๊ธฐ ๋๋ฌธ์ ์์๊ฐ ์ค์ํ์ง ์์ผ๋ฉด์ ์ญ์ ์ ์ฝ์ ์ด ๋น๋ฒํ ๋๋ Set์ด ๋ ์ข์ ์ ์์ต๋๋ค. Trailing Closure์ ๋ํด์ ์ค๋ช ํด๋ณด์ธ์. ํจ์์ ๋ง์ง๋ง ์ธ์๊ฐ ํด๋ก์ ํํ์์ ๋๊ธฐ๋ ๊ฒฝ์ฐ๋ผ๋ฉด, ์ด๋ฅผ ์ธ์๊ฐ ํ์์ผ๋ก ์์ฑํ๋ ๋์ ํจ์์ ๋ค์ ๊ผฌ๋ฆฌ์ฒ๋ผ ๋ถ์ผ ์ ์๋ ๋ฌธ๋ฒ์ ์๋ฏธํฉ๋๋ค. ์ด ๋ ์ธ์ ๋ ์ด๋ธ์ ์๋ต๋๋ฉฐ, ํจ์ ํธ์ถ ๊ดํธ () ๋ค์ ์ค๊ดํธ๋ฅผ ์ฌ์ฉํ์ฌ ํด๋ก์ ธ๋ฅผ ์์ฑํฉ๋๋ค. deinit์ ์ธ์ ์ฌ์ฉํ ๊น์? deinit์ ์ธ์คํด์ค๊ฐ ๋ฉ๋ชจ๋ฆฌ์์ ํด์ ๋๊ธฐ ์ง์ ์ ํธ์ถ๋ฉ๋๋ค. ์ธ์คํด์ค๋ฅผ ํด์ ํ๊ธฐ ์ ์ ์ ํ๋์ด์ผ ํ๋ ์์ ์ด ์๋ค๋ฉด deinit์ ๊ตฌํํ ์ ์์ต๋๋ค. DispatchQueue.main.async ์ DispatchQueue.main.sync ์ ์ฐจ์ด๋ฅผ ์ค๋ช ํด๋ณด์ธ์. DispatchQueue.main.async๋ ๋ฑ๋กํ ์์ ์ด ๋๋๊ธธ ๊ธฐ๋ค๋ฆฌ์ง ์๊ณ ๋ฑ๋ก ํ ๊ณง๋ฐ๋ก ๋ค์ ์ฝ๋๋ฅผ ์คํํฉ๋๋ค. DispatchQueue.main.sync๋ ๋ฑ๋กํ ์์ ์ด ๋๋ ๋ ๊น์ง ๋ค์ ์ฝ๋๋ฅผ ์คํํ์ง ์์ต๋๋ค. ์ด๋ ์์ ์ ๋ฑ๋กํ ์ค๋ ๋ ์ญ์ ๋ฉ์ธ์ค๋ ๋๋ผ๋ฉด ์ค๋ ๋๊ฐ sync์ ์ํด ๋์์ ๋ฉ์ถ ์ํ์์ ๋ฉ์ธ์ค๋ ๋์ ํ์ ๋ฑ๋ก๋ ์์ ์ด ํ ๋น๋ฉ๋๋ค. ๋ฉ์ธ ์ค๋ ๋๋ ํ์ ๋ฑ๋กํ๋ ์์ ์ด ๋๋๊ธธ ๊ธฐ๋ค๋ฆฌ๊ณ , ๋์์ ๋ฉ์ธ ์ค๋ ๋์ ํ ๋น๋ ์์ ์ ์คํ๋๊ธธ ๊ธฐ๋ค๋ฆฌ๊ธฐ ๋๋ฌธ์ ๋ฐ๋๋ฝ ์ํ์ ๋น ์ง๊ฒ ๋ฉ๋๋ค. ์ธ์ ํด๋์ค ๋์ ๊ตฌ์กฐ์ฒด๋ฅผ ์ฌ์ฉํ๋ฉด ์ข์๊น์? ํด๋์ค๋ ๊ตฌ์กฐ์ฒด์ ๋ฌ๋ฆฌ ๊ฐ ํ์ ์ด๋ฏ๋ก ๋ฉ๋ชจ๋ฆฌ๊ฐ ๊ณต์ ๋์ง ์๊ณ ๋ณ๋๋ก ์ ์ง๋ฉ๋๋ค. ์ฆ ์ฌ๋ฌ ๊ฐ์ฒด๊ฐ ๊ณต์ ๋ ํ์๊ฐ ์๊ณ ๋ณ๋๋ก ๋์ํ๊ธธ ์ํ ๋ ๊ตฌ์กฐ์ฒด๋ฅผ ์ฌ์ฉํฉ๋๋ค. ๋ํ ๊ตฌ์กฐ์ฒด๋ ๋ฉ๋ชจ๋ฆฌ์ ์คํ ์์ญ์ ์ฌ์ฉํ๋ฉด์ ๊ฐ ์ค๋ ๋๊ฐ ๋ ๋ฆฝ์ ์ผ๋ก ์ฌ์ฉ๋๊ธฐ ๋๋ฌธ์ Thread-Safe ํ๋ค๋ ํน์ง์ด ์์ต๋๋ค. ์ธ์ ๊ตฌ์กฐ์ฒด ๋์ ํด๋์ค๋ฅผ ์ ํํด์ผํ ๊น์? ๊ตฌ์กฐ์ฒด๋ ๊ฐ ํ์ ์ด๊ธฐ ๋๋ฌธ์ ๊ฐ์ ์ธ์คํด์ค๊ฐ ๋งค๋ฒ ๋ณต์ฌ๋์ด ์ฌ์ฉ๋ฉ๋๋ค. ๋ฐ๋ผ์ ๋ง์ฝ ์ด๋ค ์ธ์คํด์ค์ ์ฐธ์กฐ๊ฐ์ ๊ณ ์ ์ฑ์ ์ ์งํ๊ณ ์ถ๋ค๋ฉด ํด๋์ค๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. weak๊ณผ unowned ์ ์ฐจ์ด๋ฅผ ์ค๋ช ํ๊ณ ์๋ฅผ ๋ค์ด์ฃผ์ธ์. weak์ ์ฐธ์กฐํ๊ณ ์๋ ์ธ์คํด์ค๊ฐ ํด์ ๋๋ ๊ฒ์ ์ผ๋ํ์ฌ ํญ์ Optionalํ ํ์ ์ ๊ฐ์ง๋๋ค. ์๋ฅผ ๋ค์ด weak์ผ๋ก ์ ์ธํ ๋ณ์๊ฐ ์ฐธ์กฐํ๊ณ ์๋ ์ธ์คํด์ค๊ฐ ๋ฉ๋ชจ๋ฆฌ์์ ํด์ ๋๋ฉด ํด๋น ๋ณ์์ ๊ฐ์ nil๋ก ์ฑ์์ง๋๋ค. unowned๋ ์ฐธ์กฐํ๋ ์ธ์คํด์ค๊ฐ ๋ง์ฝ ๋ฉ๋ชจ๋ฆฌ์์ ํด์ ๋ ๊ฒฝ์ฐ, nil์ ํ ๋น๋ฐ์ง ๋ชปํ๊ณ ํด์ ๋ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๊ฐ์ ๊ณ์ ๋ค๊ณ ์์ต๋๋ค. ์๋ก unowned๋ก ์ ์ธ๋ ๋ณ์๊ฐ ๊ฐ๋ฆฌํค๋ ์ธ์คํด์ค๊ฐ ๋ฉ๋ชจ๋ฆฌ์์ ๋จผ์ ํด์ ๋ ๊ฒฝ์ฐ, ์ ๊ทผํ๋ ค๊ณ ํ๋ฉด ์๋ฌ๋ฅผ ๋ฐ์์ํต๋๋ค. weak๋ง ์ฌ์ฉํ์ง ์๊ณ unowned๋ ์ฌ์ฉํ๋ ์ด์ ๊ฐ ๋ฌด์์๊น์? unowned๋ฅผ ์ฌ์ฉํ๋ฉด Optional Binding์ ํ์ง ์์๋ ๋ผ์ ์ฝ๋๊ฐ ๊น๋ํด์ง๋ค๋ ์ฅ์ ์ด ์๊ธฐ๋๋ฌธ์ ๋๋ค. static ๋ณ์์ class ๋ณ์์ ๋ํด ์ค๋ช ํด๋ณด์ธ์. static ๋ณ์์ class ๋ณ์ ๋ชจ๋ ํ์ ํ๋กํผํฐ๋ก ํด๋์ค, ๊ตฌ์กฐ์ฒด, ์ด๊ฑฐํ์ ๋ชจ๋ ์ฌ์ฉํ ์ ์์ต๋๋ค. ํ์ ํ๋กํผํฐ๋ lazyํ๊ฒ ๋์ํด์ ์ค์ ๋ก ๋ถ๋ฆฌ๊ธฐ ์ ๊น์ง๋ ๋ฉ๋ชจ๋ฆฌ์ ๋ก๋๋์ง ์์ต๋๋ค. ํ์ ํ๋กํผํฐ๋ ํ์ ์ด๋ฆ์ ํตํด์๋ง ์ ๊ทผ์ด ๊ฐ๋ฅํ๊ณ ์ด๊ธฐ๊ฐ์ ํญ์ ๊ฐ์ ธ์ผํฉ๋๋ค. class๋ก ์ ์ธ๋ ํ์ ํ๋กํผํฐ๋ ์ค๋ฒ๋ผ์ด๋ฉ์ด ๊ฐ๋ฅํ๋ฉฐ static์ผ๋ก ์ ์ธ๋ ํ์ ํ๋กํผํฐ๋ ์ค๋ฒ๋ผ์ด๋ฉ์ด ๋ถ๊ฐ๋ฅํฉ๋๋ค. ARC๋ ๋ฌด์์ธ๊ฐ์? ์ฐธ์กฐ ํ์ ์ ํ๋์ ์ธ์คํด์ค๊ฐ ์ฐธ์กฐ๋ฅผ ํตํด ์ฌ๋ฌ ๊ณณ์์ ์ ๊ทผํ๊ธฐ ๋๋ฌธ์ ์ธ์ ๋ฉ๋ชจ๋ฆฌ์์ ํด์ ๋๋์ง ์๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ์ ์ ํ ์์ ์ ์ธ์คํด์ค๊ฐ ํด์ ๋์ง ์์ผ๋ฉด ํ์ ์ ์ธ ๋ฉ๋ชจ๋ฆฌ ์์์ ๋ญ๋นํ๊ฒ ๋๊ณ , ์ด๋ ์ฑ๋ฅ์ ํ๋ก ์ด์ด์ง๊ธฐ ๋๋ฌธ์ ๋๋ค. Swift๋ ์ด๋ฌํ ํ๋ก๊ทธ๋จ์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ์ ๊ด๋ฆฌํ๊ธฐ ์ํด ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ๊ธฐ์ ์ธ ARC๋ฅผ ์ฌ์ฉํฉ๋๋ค. ARC๋ ์๋์ผ๋ก ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ด๋ฆฌํด์ค๋๋ค. ARC๋ ๋ ์ด์ ํ์ํ์ง ์์ ํด๋์ค ์ธ์คํด์ค๋ฅผ ๋ฉ๋ชจ๋ฆฌ์์ ํด์ ํฉ๋๋ค. ARC์ GC๋ ์ด๋ค ์ฐจ์ด์ ์ด ์๋์? ARC์ GC์ ๊ฐ์ฅ ํฐ ์ฐจ์ด์ ์ ์ฒ๋ฆฌ ์์ ์ ์์ต๋๋ค. ARC๋ Retain๊ณผ Release๋ฅผ ์ปดํ์ผ๋ฌ๊ฐ ์ปดํ์ผ ํ์์ ์๋์ผ๋ก ์ฝ์ ํด Reference Count๋ฅผ ์กฐ์ ํฉ๋๋ค. ๋ฐ๋ฉด์ GC๋ ๊ฐ๋น์ง ์ฝ๋ ํฐ๋ฅผ ๋ฐํ์ ์ ๋ณ๋๋ก ์คํํ๋ฉด์ ๋ฉ๋ชจ๋ฆฌ์ ์ํ๋ฅผ ๊ฐ์ํฉ๋๋ค. ARC๋ ๋จ์ํ ์นด์ดํ ์ ํตํด ์ธ์คํด์ค๋ค์ ๊ด๋ฆฌํ๊ธฐ ๋๋ฌธ์ ์ํ์ฐธ์กฐ์ ์ํ์ด ์์ต๋๋ค. GC๋ Mark-and-Sweep ๋ฐฉ์์ผ๋ก ๋ฃจํธ๋ ธ๋๋ถํฐ ๋๋ฌ ๊ฐ๋ฅํ ์ธ์คํด์ค๋ฅผ ๋ชจ๋ ์ฒดํฌํฉ๋๋ค. ๋ฐ๋ผ์ ์ํ์ฐธ์กฐ๊ฐ ๋ฐ์ํ๋๋ผ๊ณ ๋ ์ธ์คํด์ค๋ฅผ ์ฐธ์กฐํ๋ ์ธ์คํด์ค๊ฐ ํด์ ๋๋ฉด ๋ฃจํธ๋ก๋ถํฐ ์ํ์ฐธ์กฐ๊ฐ ๋ฐ์ํ ์ธ์คํด์ค๋ค์ ๋๋ฌํ ์ ์๋ ๊ฒฝ๋ก๊ฐ ์๊ธฐ ๋๋ฌธ์ ๋ ์ธ์คํด์ค๋ฅผ ๋ชจ๋ ํด์ ํ ์ ์์ต๋๋ค. autoclosure attribute์ ๋ํด์ ์ค๋ช ํด๋ณด์ธ์. ํด๋ก์ ๊ฐ ์๋ ์ฝ๋๋ฅผ ํจ์์ ์ธ์๋ก ๋ฐ์ ๋ ์ด ์ฝ๋๋ฅผ ํด๋ก์ ๋ก ๋ง๋ค์ด์ฃผ๋ ํค์๋์ ๋๋ค. autoclosure๋ฅผ ์ ๋ฌ๋ฐ๊ณ ์ถ์ผ๋ฉด, ํ๋ผ๋ฏธํฐ ํ์ ์ @autoclosure attribute๋ก markingํ๋ฉด ๋ฉ๋๋ค. autoclosure๋ ์ธ์๋ฅผ ๊ฐ์ง์ง ์์ผ๋ฉฐ ๋ฆฌํด๊ฐ์ด ์์ด์ผ ํฉ๋๋ค. autoclosure๋ก ๋งํนํ ์์ ํด๋น ํจ์๋ฅผ ํธ์ถํ ๋ ํจ์ parameter์ ์ค๊ดํธ๋ฅผ ์ฐ๋ ๊ฒ์ ์๋ตํ ์ ์๊ฒ ํด์ค๋๋ค. autoclosure๋ evaluation์ delay ํ ์ ์๊ฒ ํด์ค๋๋ค. GCD์ QoS์ ๋ํด์ ์ค๋ช ํด๋ณด์ธ์. Qos๋ DispatchQueue์ ๋ฑ๋กํ๋ ์์ ์ ์ฐ์ ์์๋ฅผ ๊ฒฐ์ ํ ์ ์๊ฒ ํฉ๋๋ค. ์ฐ์ ์์๊ฐ ๋์ ์์ ์ ์ฐ์ ์์๊ฐ ๋ฎ์ ์์ ๋ณด๋ค ๋จผ์ ์คํ๋์ง๋ง ์ฑ์ ๋ฆฌ์์ค๋ฅผ ๋ง์ด ์ฌ์ฉํฉ๋๋ค. qos ์์ค์ userInterative, userInitiated, default, utility, background๋ก ๊ตฌ๋ถ๋ฉ๋๋ค. User Interactive๋ ์ ๋๋ฉ์ด์ , ์ด๋ฒคํธ ์ฒ๋ฆฌ, UI์ ๋ฐ์ดํธ ๋ฑ ์ฌ์ฉ์์ ์ํธ์์ฉํ๋ ์์ ๋ค์ ์ํ ๋ถ๋ฅ์ ๋๋ค. ์ฌ์ฉ์ ๊ฒฝํ์ ๋์ด๊ธฐ์ํด ์ฆ๊ฐ์ ์ผ๋ก ๋ฐ์ํด์ผ ํ๋ฏ๋ก, ์์คํ ์์ ๊ฐ์ฅ ๋์ ์ฐ์ ์์๋ฅผ ๊ฐ์ง๋๋ค. User Initiated๋ User Interactive์ ๋ง์ฐฌ๊ฐ์ง๋ก ๋ฐ์์ฑ๊ณผ ์ฑ๋ฅ์ ์ค์ ์ ๋์ง๋ง ๋น๊ต์ ์์ฒญ์ ๋ํ ์๋ต์ด ์๊ฐ์ด ์์๋ ์ ์๋ ์์ ์ ์ฌ์ฉํฉ๋๋ค. Default๋ Qos์ ๊ธฐ๋ณธ๊ฐ์ผ๋ก ์ฑ์ ์์ํ๊ฑฐ๋ ์ฌ์ฉ์๋ฅผ ๋์ ํ์ฌ ํ๋ฐํ ์์ ์ ์ํํ๋ ์์ ๋๋ queue์ ํ ๋นํฉ๋๋ค. Utility๋ ์ฌ์ฉ์๊ฐ ์ ๊ทน์ ์ผ๋ก ํ์ธํ๊ฑฐ๋ ์ถ์ ํ์ง ์๋ ์์ ์ ์ํ ๋ถ๋ฅ์ ๋๋ค. ๋ณดํต progressbar์ ํจ๊ป ์คํ๋๋ ๋ค์ด๋ก๋์ ๊ฐ์ ์์ ์ ๋๋ค.Background๋ ๊ณ์ ์ ์งํด์ผ ํ๊ฑฐ๋ ์ ๋ฆฌํด์ผ ํ๋ ์์ ๋ค์ ์ํ ๋ถ๋ฅ์ ๋๋ค. ๊ฐ์ฅ ๋ฎ์ ์ฐ์ ์์๋ฅผ ๊ฐ์ง๋ฉฐ, ๋๊ธฐํ, ๋ฐฑ์ ๋ฑ ์ฑ์ด ๋ฐฑ๊ทธ๋ผ์ด๋์์ ๋์ํ๋ ๋์ ์ํํด์ผ ํ๋ ์์ ๋ค์ ํ ๋นํฉ๋๋ค. unspecified๋ Qos ์ ๋ณด๊ฐ ์์์ ๋ํ๋ ๋๋ค. init?()๊ณผ init()์ ์ด๋ค ์ฐจ์ด๊ฐ ์๋์? init?()์ ์คํจ๊ฐ๋ฅํ ์์ฑ์๋ก ์์ฑ์์ ์ฝ๋๋ฅผ ์คํํ๋ค๊ฐ ๋ฌธ์ ๊ฐ ์๊ฒผ์ ๋ nil์ ๋ฐํํ๋๋ก ํ ์ ์์ต๋๋ค. @frozen์ ๋ํด ์ค๋ช ํ์์ค. enumํ์ ์์ case๊ฐ ์ถ๊ฐ์ ์ผ๋ก ์๊ฒจ๋์ง ์์ ๊ฒ์์ ๋ช ์ํ๋ฉฐ, ๋ช ์ํ ์ ์ปดํ์ผ๋ฌ๋ ๋์ฑ ํจ์จ์ ์ผ๋ก ์๋ํ๊ฒ ๋ฉ๋๋ค. frozen์ ๋ถ์ฌ์ค์ผ๋ก์จ default ๊ณผ์ ์ ์์ ๋ถํ์ํ ๋ถ๋ถ์ ์์ ์ฃผ๊ณ ์ปดํ์ผ ์๊ฐ์ ์ค์ฌ์ค๋๋ค. @unknown์ ๋ํด ์ค๋ช ํ์์ค. unknown์ enumํ์ ์ ์ ๊ทผํ๋ switch-case๋ฌธ์์ ์ฌ์ฉ๋๋ ํค์๋๋ก ์ถ๊ฐ์ ์ธ case๊ฐ ์๊ฒผ์ ๋, ๊ธฐ์กด์ switch-case๋ฌธ์์ ํด๋น case๋ฅผ ์ ์ธํ์ง ์๊ณ @unknown default๋ก ์ ์ธํด ๋์ผ๋ฉด ์ฌ์ฉํ๋ ์ชฝ์์ warning ๋ฉ์์ง๋ฅผ ๋ฐ์๋ณผ ์ ์์ด ์ถ๊ฐ๋ ์ผ์ด์ค์ ์กด์ฌ๋ฅผ ์ธ์งํ ์ ์๊ฒ ํ๋ ํค์๋ ์ ๋๋ค. @unknown ํค์๋๋ฅผ ์ฌ๋ฃกํ์ง ์๊ณ default๋ง ์์ฑํด๋์ ๊ฒฝ์ฐ, ๋์ค์ ์๋ก์ด case๊ฐ ์ถ๊ฐ๋๋ค๊ณ ํด๋ ์๋ก์ด case๋ default๋ก ๋น ์ ธ๋ฒ๋ฆฌ๊ธฐ ๋๋ฌธ์, ์ถ๊ฐ๋ case๋ฅผ ์ ์์ ์ผ๋ก ์ฒ๋ฆฌํ์ง ๋ชปํฉ๋๋ค. ๋ฐ๋ผ์ unknown์ ์ฌ์ฉํ์ฌ ์ถ๊ฐ๋ case๋ฅผ ์ธ์งํ ์ ์๊ฒ ํด์ผํฉ๋๋ค. Never ๋ฐํ ํ์ ์ ๋ํด ์ค๋ช ํด๋ณด์ธ์. Never ํ์ ์ ๋น๋ฐํ ํจ์์์ ๋ฐํ ๊ฐ ํ์ ์ผ๋ก ์ฌ์ฉ๋ฉ๋๋ค. ์ฆ, ๋ฆฌํด๊ฐ์ด Never์ธ ๊ฒฝ์ฐ ํด๋น ํจ์๋ ๋น๋ฐํ ํจ์๊ฐ ๋๊ณ , ๋น๋ฐํ ํจ์ ์์์๋ ์ค๋ฅ๋ฅผ ๋์ง๊ฑฐ๋ ์ค๋ํ ์์คํ ์ค๋ฅ๋ฅผ ๋ณด๊ณ ํ๋ ๋ฑ์ ์ผ์ ํ๊ณ ํ๋ก์ธ์ค๋ฅผ ์ข ๋ฃํฉ๋๋ค. Never๋ ๋น Enumeration์ผ๋ก ๊ทธ๋ฅ ํ๋์ ํ์ ์ ๋๋ค. ๋น๋ฐํ ํจ์์ ์ฌ์ฉ๋์ด ๋ฐํ ๊ฐ์ด ์์ด ํ๋ก์ธ์ค๊ฐ ์ข ๋ฃ๋๋ ๊ฒ์ ์๋ฏธํด ์ฃผ๋ ํ์ ์ ๋๋ค. RunLoop์ ๋ํด์ ์ค๋ช ํด๋ณด์ธ์. RunLoop๋ ์ค๋ ๋ ๋น ํ๋์ฉ ์์ฑ๋์ด Thread์ ์์ ์ด ์๊ธฐ๋ฉด ์ฒ๋ฆฌํ๊ณ , ์๋ ๋๋ ๋๊ธฐ์ํค๋ ์ญํ ์ ํฉ๋๋ค. RunLoop๋ Thread๋ฅผ ์์ฑํ ๋ ์๋์ผ๋ก ์์ฑ๋๋ฉฐ ๋ฉ์ธ ์ค๋ ๋๋ฅผ ์ ์ธํ ์ค๋ ๋์์๋ ์๋์ผ๋ก ์คํ๋์ง ์๊ณ ๊ฐ๋ฐ์๊ฐ ์ง์ ์คํ์์ผ์ฃผ์ด์ผ ํฉ๋๋ค. RunLoop๋ฅผ ์คํํ๋ฉด ์คํ๋๋ ๋์ ๋์ฐฉํ EventSource๋ฅผ ์คํํฉ๋๋ค. RunLoop๋ ํ ๋ฒ๋ง ์คํ๋๊ณ ์คํ์ด ๋๋๋ฉด ๋๊ธฐ์ํ๋ก ๋์๊ฐ๋๋ค. GCD์ ๋ํด ์ค๋ช ํ์ธ์. GCD๋ ๋ฉํฐ ์ฝ์ด ์์คํ ์์ ๋์์ฑ ์คํ์ ์ ๊ณตํ๋ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด ์์, ๋ฐํ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ ๋๋ค. DispatchQueue๋ main queue, global queue, private queue๋ก ๊ตฌ๋ถ๋๋ฉฐ main queue๋ ํ๊ฐ๋ง ์กด์ฌํ๋ฉฐ Main thread์์ Serialํ๊ฒ ๋์ํฉ๋๋ค. global queue๋ Qos๋ฅผ ์ง์ ํ์ฌ ์์ ์ ์ฐ์ ์์๋ฅผ ์ง์ ํ ์ ์์ผ๋ฉฐ Concurrentํ๊ฒ ๋์ํฉ๋๋ค. private queue๋ ๋ํดํธ๋ serial๋ก concurrent๋ก๋ ์ค์ ํ ์ ์์ต๋๋ค. Qos ์ค์ ๋ ๊ฐ๋ฅํ๋ฉฐ global queue์์ ๋์ํฉ๋๋ค. OperationQueue์ ๋ํด์ ์ค๋ช ํด๋ณด์ธ์. DispatchQueue์๋ ์ด๋ค ๊ฒ์ด ๋ค๋ฅธ๊ฐ์? final ํค์๋๋ฅผ ํด๋์ค ์์ ๋ถ์ด๋ฉด ์ด๋ค ํจ๊ณผ๊ฐ ์์๊น์? ์ด๋ค ํด๋์ค์ ๋ฉ์๋๋ ๋ค๋ฅธ ์์ ํด๋์ค๋ก๋ถํฐ override๋ ์ ์๊ธฐ ๋๋ฌธ์, ์ด๋ฐ override๋ ๋ฉ์๋๋ ์ค์ ๋ก ์ด๋ค ๋ฉ์๋๋ฅผ ์คํํ ์ง vtable์ ํ ๋ฒ ํ์ํด์ ๊ฒฐ์ ํ๊ฒ ๋ฉ๋๋ค. ์ฆ, ์ปดํ์ผ ํ์์ด ์๋ ๋ฐํ์์ ์ค์ ๋ก ์คํํ ๋ฉ์๋๊ฐ ๊ฒฐ์ ๋๋ ๊ฒ ์ ๋๋ค. ์ด๋ฅผ dynamic dispatch๋ผ๊ณ ํฉ๋๋ค. ์ด๋ final ํค์๋๋ฅผ ์ฌ์ฉํ๋ฉด ํด๋น ํด๋์ค, ํ๋กํผํฐ, ๋ฉ์๋๊ฐ ๋ค๋ฅธ ํด๋์ค์ ์ํด ์์๋๊ณ ์์ง ์๋ค๋ ๊ฒ์ ์ปดํ์ผ๋ฌ์๊ฒ ์๋ ค์ฃผ๊ธฐ ๋๋ฌธ์ ์ปดํ์ผ ํ์์ ์ด๋ค ๋ฉ์๋๋ฅผ ์ฌ์ฉํ ์ง ๋ฐ๋ก ๊ฒฐ์ ํ ์ ์๊ณ , vtable์ ๊ฑฐ์น์ง ์๊ณ ์ง์ ์ ์ผ๋ก ํธ์ถ๋๊ธฐ ๋๋ฌธ์ ์ฑ๋ฅ์ ๋ ์ข์ ํผํฌ๋จผ์ค๋ฅผ ๋ผ ์ ์์ต๋๋ค. ํ๋กํผํฐ ์ต์ ๋ฒ์ ๋ํด ์ค๋ช ํด๋ณด์ธ์. ํ๋กํผํฐ ์ต์ ๋ฒ๋ ํ๋กํผํฐ ๊ฐ์ ๋ณํ๋ฅผ ๊ด์ฐฐํ๋ ๊ฒ์ผ๋ก, ๊ธฐ๋ณธ์ ์ผ๋ก ์ ์ฅ ํ๋กํผํฐ์ ์ถ๊ฐํ ์ ์์ต๋๋ค. ์ ๊ฐ์ ์์ฑ์ด ํ์ฌ ๊ฐ๊ณผ ๋์ผํ๋๋ผ๋ ์์ฑ ๊ฐ์ด ์ค์ ๋๋ฉด ํธ์ถ๋ฉ๋๋ค. willSet์ต์ ๋ฒ๋ฅผ ๊ตฌํํ๋ฉด ๊ฐ์ด ์ ์ฅ๋๊ธฐ ์ง์ ์ ์๋ก ์ ์ฅ๋ ๊ฐ์ด ํ๋ผ๋ฏธํฐ๋ก ์ ๋ฌ ๋ฉ๋๋ค. ์ด๋ ํ๋ผ๋ฏธํฐ ์ด๋ฆ์ ์ง์ ํ ์ ์์ง๋ง ์ด๋ฆ์ ๋ฐ๋ก ์ง์ ํ์ง ์์ ๊ฒฝ์ฐ newValue๋ก ์ฌ์ฉํฉ๋๋ค. didSet ์ต์ ๋ฒ๋ฅผ ๊ตฌํํ๋ฉด, ๊ฐ์ด ์ ์ฅ๋ ์งํ์ ์ด์ ํ๋กํผํฐ ๊ฐ์ด ํ๋ผ๋ฏธํฐ๋ก ์ ๋ฌ๋ฉ๋๋ค. ์ด๋ ํ๋ผ๋ฏธํฐ ์ด๋ฆ์ ์ง์ ํ ์ ์์ง๋ง ์ด๋ฆ์ ๋ฐ๋ก ์ง์ ํ์ง ์์ ๊ฒฝ์ฐ oldValue๋ก ์ฌ์ฉํฉ๋๋ค. ๋ ์ฐ์ฐ ํ๋กํผํฐ์ ํ๋กํฐํผ ์ต์ ๋ฒ๋ฅผ ์ถ๊ฐํ ์ ์๋๋ฐ, ๋ถ๋ชจ ํด๋์ค์ ์ฐ์ฐ ํ๋กํผํฐ๋ฅผ ์ค๋ฒ๋ผ์ด๋ฉ ํ ๊ฒฝ์ฐ์๋ง ํ๋กํผํฐ ์ต์ ๋ฒ๋ฅผ ์ถ๊ฐํ ์ ์์ต๋๋ค. Property Wrapper์ ๋ํด ์ค๋ช ํด๋ณด์ธ์. Property Wrapper๋ ๋ฐ๋ณต์ ์ผ๋ก ๋ํ๋๋ property ๊ตฌํ ํจํด์ ๋ํ ์งํฉ์ ์ปดํ์ผ๋ฌ์ ํ๋์ฝ๋ฉํ๋ ๋์ , ์ด๋ฌํ ํจํด์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ์ ์ํ ์ ์๋ ์ผ๋ฐ์ ์ธ ๋ฉ์ปค๋์ฆ์ ์ ๊ณตํฉ๋๋ค. ์ด๋ค ํ๋กํผํฐ์ ํํ๊ณ ์ถ์ ํ๋์ ์ ์ํ๋ ํ์ ์ ๋ง๋ค๊ณ ํ์ ์์ @propertyWrapper๋ฅผ ๋ถ์ธ ํ, @์ ํ๋์ ์ ์ํ ํ์ ์ ์ด๋ฆ์ ํ๋์ ํํ ํ๋กํผํฐ ์์ ๋ถ์ฌ์ฃผ์ด ์ฌ์ฉํฉ๋๋ค. Property Wrapper๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฐ๋ณต๋๋ ์ฝ๋๋ฅผ ์ค์ผ ์ ์์ต๋๋ค. ๊ณ ์ฐจํจ์ ์ค flatMap๊ณผ compactMap์ ์ฐจ์ด๋ฅผ ์ค๋ช ํด๋ณด์ธ์. floatMap์ Map ๊ธฐ๋ฅ์ ๋ฐํ๋๋ ๋ฐฐ์ด์ flatํ๊ฒ 1์ฐจ์ ๋ฐฐ์ด๋ก ๋ง๋ค์ด์ฃผ๋ ๊ธฐ๋ฅ์ด ์ถ๊ฐ๋ ๋ฉ์๋ ์ ๋๋ค. compactMap์ Map ๊ธฐ๋ฅ์ ๋ฐํ๋๋ ๊ฒฐ๊ณผ ์ค nil์ด ์๋ ๊ฒฐ๊ณผ๋ง ๋ฐฐ์ด์ ๋ด์ ๋ฐํํ๋ ๊ธฐ๋ฅ์ด ์ถ๊ฐ๋ ๋ฉ์๋์ ๋๋ค. ๊ณ ์ฐจํจ์(High Order Function)์ ๋ํด์ ์ค๋ช ํด๋ณด์ธ์. ๊ณ ์ฐจํจ์๋ ๋ค๋ฅธ ํจ์๋ฅผ ์ ๋ฌ์ธ์๋ก ๋ฐ๊ฑฐ๋ ํจ์ ์คํ์ ๊ฒฐ๊ณผ๋ฅผ ํจ์๋ก ๋ฐํํ๋ ํจ์์ ๋๋ค. Swift์ ํจ์๋ ์ผ๊ธ๊ฐ์ฒด์ด๊ธฐ๋๋ฌธ์ ํจ์์ ์ ๋ฌ์ธ์๋ก ์ ๋ฌํ ์ ์๊ณ , ํจ์์ ๊ฒฐ๊ณผ ๊ฐ์ผ๋ก ๋ฐํํ ์ ์์ต๋๋ค. Swift์ ๋ํ์ ์ธ ๊ณ ์ฐจํจ์๋ก๋ Map, filter, reduce, compactMap, FlatMap๋ฑ์ด ์์ต๋๋ค. map, filter, reduceํจ์๋ Swift ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ปจํ ์ด๋ ํ์ ์ ๊ตฌํ๋์ด์์ต๋๋ค. ์์ํจ์๊ฐ ๋ฌด์์ธ๊ฐ์? ์์ํจ์๋ ์ธ๋ถ ์ํ์ ์์กด์ ์ด์ง ์๊ณ , ์ด๋ ํ ์ฌ์ด๋ ์ดํํธ๋ ๋ฐ์์ํค์ง ์๋ ํจ์์ ๋๋ค. ์ด๋ ํจ์์์๋ ์ธ๋ถ์ ๋ฐ์ดํฐ๋ฅผ ์ง์ ์ ์ผ๋ก ์ฌ์ฉํ์ง ์๊ณ , ํ๋ผ๋ฏธํฐ๋ก ๋ฐ์ ์ฌ์ฉํฉ๋๋ค. input๊ฐ์ ์ํด output์ด ๊ฒฐ์ ๋๊ธฐ ๋๋ฌธ์ ์ธ๋ถ์ ๊ฐ๋ค์ด ๋ณ๊ฒฝ๋๋๋ผ๋ ํจ์ ์์ฒด์๋ ์ธ๋ถ์ ์ํฅ์ ๋ฐ์ง ์๊ธฐ ๋๋ฌธ์ ์ฌ์ด๋ ์ดํํธ๋ฅผ ๋ฐ์์ํค์ง ์์ต๋๋ค. ์์ํจ์๋ ์ธ์ ์ผ๋ง๋ ๋ง์ด ํธ์ถํ๋ ํญ์ ๊ฐ์ input์ ๋ํด ๊ฐ์ Output์ ๋ฐํํฉ๋๋ค. ํ ์คํธ์ ์ฉ์ดํ๊ณ , ์ฌ์ฌ์ฉ์ฑ์ด ์ฌ๋ผ๊ฐ๋ฉฐ ์์ธก๊ฐ๋ฅ์ฑ์ด ๋์์ง๋๋ค. ์ฌ์ด๋ ์ดํํธ๋ ๋ฌด์์ธ๊ฐ์? ์ด๋ค ํจ์๋ฅผ ํธ์ถํ์ ๋ ๊ทธ ํจ์์ ๋ฐํ๊ฐ ์ด์ธ์ ํธ์ถ๋ ํจ์ ๋ฐ์์ ํ๋ก๊ทธ๋จ์ ์ํ๋ณํ๊ฐ ๋ฐ์ํ๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. ์์ ํจ์๊ฐ ์ ํ์ํ๋ค๊ณ ์๊ฐํ๋์? ๊ฐ์ ์ ๋ ฅ์ ๋ํด ํญ์ ๊ฐ์ ๋์ผํ ์ถ๋ ฅ์ ๊ฐ์ง๋ ์์ํจ์๋ ํ ์คํธ๊ฐ ์ฉ์ดํฉ๋๋ค. ์ธ๋ถ ์ํ์ ์ํฅ์ ๋ฐ์ง ์๊ธฐ ๋๋ฌธ์ ํด๋น ํจ์๋ง ํ ์คํธํ ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค. ์ฌ์ด๋ ์ดํํธ๊ฐ ์๋ค๋ ๊ฒ์ ์์ ํจ์๋ค์ ํฌํจํ๋ ๊ฐ์ฒด์ ์ ์ง๋ณด์์ฑ์ด ์ข๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. ํ๋กํผํฐ๋ ํจ์๋ค์ด ๋ค๋ฅธ ํจ์๋ค์ ์์กด์ ์ด์ง ์๊ธฐ ๋๋ฌธ์ ํ์ฅ๊ณผ ๋ณ๊ฒฝ์ด ์ฝ๊ฒ ๊ฐ๋ฅํฉ๋๋ค. 1๊ธ ๊ฐ์ฒด(ํน์ 1๊ธ ์๋ฏผ)์ ๋ํด์ ์ค๋ช ํด๋ณด์ธ์. Swift์๋ ์ด๋ค 1๊ธ ๊ฐ์ฒด๋ค์ด ์๋์? ๊ฐ ๋์ , ๋งค๊ฐ๋ณ์๋ก ์ ๋ฌ, ๋ฐํ, ๋น๊ต ์ฐ์ฐ์ด ๋ชจ๋ ๊ฐ๋ฅํ ๊ฐ์ฒด๋ฅผ ์๋ฏธํฉ๋๋ค. ๋น๊ต ์ฐ์ฐ์ด ๊ฐ๋ฅํ์ง๋ง, Swift๋ ์ด๋ฅผ ๊ถ์ฅํ์ง ์์ต๋๋ค. 1๊ธ ๊ฐ์ฒด์ ์๋ก ํจ์๊ฐ ์๋๋ฐ, ํจ์๋ ๋ณ์์ ๋ด์ ์ ์์ผ๋ฉฐ, ํจ์์ ์ธ์๋ก ์ ๋ฌ๋ ์ ์์ต๋๋ค. ๋ ํจ์์ ๋ฐํ ๊ฐ์ด ๋ ์ ์์ต๋๋ค. Optional์ ๋ด๋ถ์ ์ผ๋ก ์ด๋ป๊ฒ ๊ตฌํ๋์ด ์๋์? Optinal์ associated value๋ฅผ ๊ฐ์ง๋ enum์ผ๋ก ๊ตฌํ๋์ด์์ต๋๋ค. ๊ฐ์ด ์กด์ฌํ ๋๋ some์ ์ ์ฅ๋ ๊ฐ์ ๋ฐํํ๊ณ , ๊ฐ์ด ์กด์ฌํ์ง ์์ผ๋ฉด nil์ ๋ฐํํฉ๋๋ค. Swift์์ ์ฐธ์กฐ ํ์ ์ ๋งํด๋ณด์ธ์. ํด๋์ค, ํจ์, ํด๋ก์ ๊ฐ ๋ชจ๋ ์ฐธ์กฐ ํ์ ์ ๋๋ค. some ํค์๋์ ๋ํด์ ์ค๋ช ํด๋ณด์ธ์. some์ ํจ์ ๋ด๋ถ์์ ๋ฐํ๋๋ ํ์ ์ ์ธ๋ถ์์ ๋ช ํํ๊ฒ ์ ์ ์๋๋ก ํฉ๋๋ค. ์๋ฅผ ๋ค์ด ๋ฐํํ์ ๋ถ๋ถ์ some Collection์ผ๋ก ๋ช ์ํ์ฌ ๊ตฌ์ฒด์ ์ธ ํ์ ์ ์ ์ ์์ง๋ง Collection์ ์ฑํํ๋ ํ์ ์ด ๋ฐํ๋ ๊ฒ์ ๋ณด์ฆํฉ๋๋ค. KVC์ ๋ํด์ ์ค๋ช ํด๋ณด์ธ์. KVC๋ Key-Value Coding์ผ๋ก ๊ฐ์ฒด์ ๊ฐ์ ์ง์ ์ฌ์ฉํ์ง ์๊ณ KeyPath๋ฅผ ์ด์ฉํด ๊ฐ์ ์ ์ผ๋ก ์ฌ์ฉํ๊ณ ์์ ํ๋ ๋ฐฉ๋ฒ์ ๋๋ค.