! ์ฌ์ฉํ์ง ์๊ธฐ
Swift ์ฝ๋์์ !๊ฐ ๋ณด์ด๋ ๊ฒฝ์ฐ๋ ๋๊ฐ์ง๋ค. ์ฐ์ฐ์(!=, not, !==)์์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ๋ ์ ์ธํ๋ค.
- ๊ฐ์ ์ธ๋ํ
- ์์์ ์ต์ ๋ (IUO: Implicitly Unwrapped Optional)
๊ฐ์ ์ธ๋ํ
์ด๊ฑด ๋ญ ๊ธฐ๋ณธ์ ์ผ๋ก ์ด๋ ๊ฒ ์ฌ์ฉํ์ง ์๋ ๊ฒ์ ๋์ํ๋ ์ฌ๋์ด ๋ง์ผ๋ฏ๋ก ํจ์ค.
Implicitly Unwrapped Optional
์ด ๋ถ๋ถ์์ 50%์ Crash๊ฐ ์ฌ๊ธฐ์ ๋๋ค. ์ต์ ๋์ด๊ธด ํ์ง๋ง ์๋ ๊ฒ์ด๋ผ๊ณ ๊ฐ์ (100% ๊ฐ์ด ์์ ๊ฑฐ์ผ!)ํ๋ ๊ฒ.
๊ทธ๋ฐ๋ฐ 100%๋ผ๋ ๊ฒ์ ์๋ค. ์ค์ ๋ก ์ฝ๋๋ฅด ์ง๋ณด๋, ์ฌ๋ฌ๋ฒ ์ฝ๋๊ฐ ์์ ๋๋ฉด์, ๊ธฐ์กด์ ์ด๋ค ๋ก์ง์ด์๋์ง ์ ๋๋ก ํ์ ํ์ง ๋ชปํ๊ณ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ๊ฐ ์๊ฒผ๋ค. ๊ทธ๋ฐ ๊ฒฝ์ฐ ํด๋น ์ฝ๋๋ฅผ ๋ฐ์ ๋ด๋น์๋ ์ ์ด๋ฐ ๋ฌธ์ ๊ฐ ์๊ฒผ๋์ง ์ฐพ์์ผ ํ์ฌ ์๊ฐ์ ์ธ ์์ค์ด ๋ฐ์ํ๋ค. ๊ทธ๋ฆฌ๊ณ ๊ฐ์ฅ ์ค์ํ ๊ฒ์ ์ฑ์ด ์ฃฝ๋๋ค.
ํ๋์ ์์๋ฅผ ๋ค์ด๋ณด์.
- ViewController๊ฐ memory warning์ ๋ฐ์
- Memory๊ฐ ๋ถ์กฑํ๋ฉด iOS๋ View๋ฅผ ๋ ๋ฆด ์ ์์
- Subview๋ค ์ญ์ ๋ ์๊ฐ
- ๊ทธ๋ฐ๋ฐ ๋ค๋ฅธ VC์์ ํน์๋ผ๋ ํด๋น ๋ณ์์ ์ ๊ทผํ๋ค๋ฉด? โ Crash
Array bounds check
Objective C์ ๊ฒฝ์ฐ์๋ ์ด๋ฐ ๊ฒฝ์ฐ Exception์ ๋ฐ์์ํจ๋ค. ๊ทธ๋์ ์ด๋ฌํ ๊ฒฝ์ฐ Error Catch๋ฅผ ํ์ฌ ์ฃฝ์ง ์๊ฒ ๋ง๋ค ์ ์๋ค.
ํ์ง๋ง Swift์ ๊ฒฝ์ฐ, ๋ฐ๋ก Crash๋๋ค. ์ฃฝ์ง ์๊ฒ ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ์ด ์๋ค.
Overflow
Int๋ OS์ ๋ฐ๋ผ์ ๋ค๋ฅธ ๋ฒ์๋ฅผ ๊ฐ์ง๋ค. OS๊ฐ 32๋นํธ์ด๋ฉด Int32, 64๋นํธ๋ฉด Int64๊ฐ ๋๋ค.
64๋นํธ์์๋ ์ฐ๋ฆฌ๊ฐ ์๊ฐํ๋๋ก ์ ๋์ํ๋ค. ๊ทธ๋ฐ๋ฐ, ์ฌ์ ํ ์กด์ฌํ๋ 32๋นํธ ๋๋ฐ์ด์ค๋ผ๋ฉด? Crash๋๋ค. ์ฆ, 32๋นํธ ๊ธฐ๊ธฐ์์ Int64๋ฅผ ๋ฃ์ด๋ฒ๋ฆฌ๋ฉด, ์ฒ๋ฆฌํ ์ ์๋ ๋ฒ์ ์ธ๋ก ๋์ด๊ฐ๋ฒ๋ฆฌ๊ธฐ ๋๋ฌธ์ ์ฃฝ๋๋ค.
๊ฐ์ด ์ปค์ Int64๋ก ์ฒ๋ฆฌํ๋๋ฐ, 32๋นํธ ๋๋ฐ์ด์ค์์ Crash๋๋ ๊ฒฝ์ฐ๊ฐ ์๋ค.
Objective C ๋๋ฌธ์ ๋ฐ์
nullablility check
Objective C์์ nullable, unnullable์ ์ง์ ํด์ฃผ์ง ์์ผ๋ฉด ๋ชจ๋ force upwrapped ๋ ๊ฒ์ฒ๋ผ ๋์ํ๋ค. ๊ทธ๋ฐ๋ฐ objective C ์ฝ๋์์ nil์ ๋ฆฌํดํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ Swift์ ๊ฐ์ด ์ฌ์ฉํ๋ Objective C์ ๊ฒฝ์ฐ์๋ ๋ฐ๋์ nullability๋ฅผ ๋ช ์ํด์ผ ํ๋ค.
objective C์์ exception ๋ฐ์
Objective C ๋ด๋ถ ์ฝ๋๊ฐ exception์ ๋ฐ์์ํค๋ ๊ฒฝ์ฐ์๋ ์ด๋ฅผ Swift์์ ๋ฐ์ ๋ฐฉ๋ฒ์ด ์๋ค. Objective C์์์ Exception๊ณผ Swift์ Exception์ ์์ ํ ๋ค๋ฅธ ๊ฐ๋ ์ด๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ Swift์์ Error Handling์ ํ ์๊ฐ ์๋ค.
์ ๋ฆฌ
Crash๋ ์ฌ์ฉ์ ๊ฒฝํ์ ์์ด์ ๋งค์ฐ ์์ข๋ค. ๋ช๋ฒ ์๋ํ๋ค๊ฐ ์๋๋ฉด ๋ฐ๋ก ์ฑ ์ญ์ ๋ก ์ด์ด์ง๋ค.