๊ณ ๊ธ ๊ธฐ๋ฅ 4๊ฐ์ง
1. Forced unwrapping optional
2. Optional binding
3. Guard statement
4. Nil coalescing
1. Forced unwrapping optional
โ ์ต์ง๋ก ๋ฐ์ค๋ฅผ ๊น๋ณด์.
2. Optional binding
โ ๋ถ๋๋ฝ๊ฒ ๋ฐ์ค๋ฅผ ๊น๋ณด์.
3. Guard statement
โ ๋ถ๋๋ฝ๊ฒ ๋ฐ์ค๋ฅผ ๊น๋ณด์ 2ํ (guard๋ฌธ)
4. Nil coalescing
โ ๋ฐ์ค๋ฅผ ๊น๋ณด์๋๋ ๊ฐ์ด ์์ผ๋ฉด ๋ํดํธ ๊ฐ์ ์ฃผ์.
< 1. Forced unwrapping optional >

๊ทธ๋ฅ
print(carName) ํ๋ฉด,

์ต์
๋๋ก ๋ธ.
๋ง์ฝ, ๋ฐ์ค์์ ์๋ฌด๊ฒ๋ ์๋ค๋ฉด?
์ฆ, carName = nil ์ธ ์ํ์์
print(carName!)์ ํ๋ค๋ฉด?


์ ํ๋ฉด๊ณผ ๊ฐ์ด error๊ฐ ๋ฐ์ํ๋ค.
์ด๋ ๋ฐ์ค ์์ ์ด๋ค ๊ฐ์ด ์๋ค๊ณ ๋จํธํ๊ฒ ์๊ฐํ๊ณ , ๊น ๋๋ ์์๋ ๊ฒ์ด๋ค.
์ด๋ฐ ๊ฒฝ์ฐ์๋ Swift์์ ๋๋ฌด ๋จํธํ๋ค๊ณ
"๊ฐ์ด ์์ ๋, ์ด๋ ๊ฒ ํจ๋ถ๋ก ๋ฐ์ค๋ฅผ ๋ฏ์ผ๋ฉด ์๋ผ!!"
๋ผ๊ณ ๊ฒฝ๊ณ ๋ฅผ ์ค ๊ฒ์ด๋ค.
์ด๋ฐ ๊ฒฝ์ฐ์๋ ์ฑ์ด ์ฃฝ๋ ํฌ๋์ฌ(crash)๊ฐ ๋ฐ์ํ๋ค.
๊ทธ๋์ ์์ ๋จ๊ฒจ๋์ ์ฃผ์์ ์ฐ์ฌ์๋ค์ํผ
์ ๋ง ํ์คํ ๊ฒ์ด ์๋๋ฉด ์ฐ์ง ์๋ ๊ฒ์ด ์ข๋ค.
< 2. Optional binding >
์ด๋ฐ ํฌ๋์ฌ๋ฅผ ๋ฏธ์ฐ์ ๋ฐฉ์งํ๊ธฐ ์ํด์
๋ฐ์ค๋ฅผ ๋ถ๋๋ฝ๊ฒ ๊น๋ ๋ฐฉ๋ฒ์ด ์๋ค.

์ด๋ ๊ฒ if ๋ฅผ ํ์ฉํด์ ๊ฐ์ด ์์ ๋ ์ถ๋ ฅ๋ ๊ฐ์ ์ ํ์ฌ
๋ฐ์ค๋ฅผ ๊น๋ ๋ฐฉ๋ฒ์ด๋ค.
< 3. Guard statement >

guard ๋ฌธ์ ํญ์ ํจ์๊ฐ ๋๋ ์ ์๊ฒ return์ ์ ์ด์ฃผ์ด์ผ ํ๋ค.
์ ์ฝ๋๋ฅผ ๋ณด๋ฉด 2๋ฒ์์ ๋ดค๋ ์ฝ๋์ ๋จ๊ณ๊ฐ
์ ์ ๋ณต์กํด์ง๋ ๊ฒ์ ๋ฐฉ์งํ ์ ์๋ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๊ณ ์๋ค.
<์ฝ๋ ํด์>
๋ฐ์๋ String์์ Int๋ก ์ปจ๋ฒํ
ํ์ ๋,
๋ฐ์ธ๋ฉ์ด ๋๋ ๊ฐ์ด ์๋ค๋ฉด,
}
print(parsedInt)
์ด ์์์ ์ฌ์ฉํด๋ผ.
๋ง์ฝ, ๋ฐ์ธ๋ฉํ๋ ๊ณผ์ ์ ์คํจํ๊ฒ ๋๋ค๋ฉด,
์์ชฝ์ผ๋ก ๋ค์ด์ "Int๋ก ์ปจ๋ฒํ
์๋จ!"์ ํ๋ฆฐํธํด๋ผ.
๊ทธ๋ฆฌ๊ณ returnํ์ฌ ํจ์๋ฅผ ๋น ์ ธ๋๊ฐ๋ผ.
< 4. Nil coalescing >


nil์ธ ๊ฒฝ์ฐ์๋ ์ด๋ค ํน์ ํ default ๊ฐ์ ์ค๋ค๋ ๋ง์ด๋ค.
์ด๋ฅผ ํํํ๋ operator๋ ??(๋ฌผ์ํ 2๊ฐ)์ด๋ค.
์ฒซ ๋ฒ์งธ ํ๋ฉด์ carName = "ํฑํฌ" ๋ผ์
"ํฑํฌ"
๋ ๋ฒ์งธ ํ๋ฉด์ carName = nil ์ด๊ธฐ ๋๋ฌธ์
๋ํดํธ ๊ฐ์ธ "ํ
์ฌ๋ผ ๋ชจ๋ธ S"