[Swift ๊ธฐ์ด] 00. Swift ์ธ์ด์ ํน์ง์ ๋ฌด์์ผ๊น?
2021. 1. 6. 10:23ใ๐ง๐ป๐ป iOS ๊ฐ๋ฐ/Swift
ํด๋น ๊ธ์ ์ผ๊ณฐ๋์ ์ค์ํํธ ๊ฐ์์ ๊ฐ์ธ์ ์ธ ๊ณต๋ถ๋ฅผ ์ ๋ฆฌํ ๊ธ์ ๋๋ค.
1. Swift ์ ์ธ์ด์ ํน์ง
- Designed for Safety (์์ ์ฑ)
Swift๋ ์์ ํ ํ๋ก๊ทธ๋๋ฐ์ ์งํฅํฉ๋๋ค. Swift๋ ์์ ํ์ง ์์ ์ฝ๋์ ์ ์ฒด ํด๋์ค๋ฅผ ์ ๊ฑฐํ๊ณ , ์๊ฒฉํ ๋ฌธ๋ฒ์ ์ ์ฉํ์ฌ ๋ฏธ๋ฆฌ ํ๋ก๊ทธ๋๋จธ์ ์ค์๋ฅผ ๋ฐฉ์งํฉ๋๋ค. ํนํ, Swift์ ๊ฐ์ฒด๋ ๊ธฐ๋ณธ์ ์ผ๋ก nil์ด ๋ ์ ์์ต๋๋ค. ์ด๋ ์ต์ ๋์ด๋ผ๋ ๊ธฐ๋ฅ์ ์ด์ฉํ์ฌ ์ปดํ์ผ ํ์์ ์ค๋ฅ๋ฅผ ๋ฐฉ์งํ๊ธฐ ๋๋ฌธ์ ๋๋ค. ๋ํ guard ๊ตฌ๋ฌธ, ์ค๋ฅ์ฒ๋ฆฌ, ๊ฐ๋ ฅํ ํ์ ํต์ ๋ฅผ ํตํด ์์ ํ ํ๋ก๊ทธ๋๋ฐ์ ์ถ๊ตฌํ๊ณ ์์ต๋๋ค. - Fast and Powerful (์ ์์ฑ)
Swift๋ C ์ Objective - C ์ธ์ด์ ๊ณ์น์๋ก์ low - level ์ ํ์ , ํ๋ฆ ์ ์ด, ์ฐ์ฐ์๋ฅผ ํฌํจํ๊ณ ์์ผ๋ฉฐ ํด๋์ค, ํ๋กํ ์ฝ, ์ ๋๋ฆญ ๋ฑ ๊ฐ์ฒด ์งํฅ ์ธ์ด์ ํน์ง๋ ์ ๊ณตํฉ๋๋ค. - Modern (์ธ๋ จ๋ ํํ)
Swift๋ ์๋ง์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ์ฅ๋จ์ ๋ค์ ์ฐ๊ตฌํ์ฌ ๋ง๋ค์ด ์ก์ผ๋ฉฐ ๊น๋ํ ๋ฌธ๋ฒ๊ณผ ๋ ์ฝ๊ธฐ ํธํ๊ณ ์ ์ง ๋ณด์ํ๊ธฐ ์ฝ๊ฒ ๋ง๋ค์ด์ก์ต๋๋ค. ์ธ๋ฏธ์ฝ๋ก (;) ์ ํ์์์ด์ก์ผ๋ฉฐ ์ ๋์ฝ๋๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ธ๊ณ์ ๋ง์ ์ธ์ด๋ค๊ณผ ์ด๋ชจ์ง๋ฅผ ์ง์ํฉ๋๋ค.
์ฐธ์กฐ : developer.apple.com/swift/#safety
2. Swift ๋ ๋ค์ค ํจ๋ฌ๋ค์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด
Swift๋ ๋ช
๋ นํ , ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ ํจ๋ฌ๋ค์์ ๊ธฐ๋ฐ์ผ๋กํ์ฌ ํจ์ํ ํ๋ก๊ทธ๋๋ฐ ํจ๋ฌ๋ค์ ๊ณผ ํ๋กํ ์ฝ ํ๋ก๊ทธ๋๋ฐ ํจ๋ฌ๋ค์์ ์งํฅํ๋ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด ์
๋๋ค. C , C++ , JAVA๋ฅผ ๊ณต๋ถํ์
จ๋ค๋ฉด ์์ 2๊ฐ์ ํ๋ก๊ทธ๋๋ฐ ํจ๋ฌ๋ค์์ ์ด๋ฏธ ์์๋ฆฌ๋ผ ์๊ฐํฉ๋๋ค.
- ํจ์ํ ํ๋ก๊ทธ๋๋ฐ ํจ๋ฌ๋ค์
์๋ฃ ์ฒ๋ฆฌ๋ฅผ ์ํ์ ํจ์์ ๊ณ์ฐ์ผ๋ก ์ทจ๊ธํ๊ณ ์ํ์ ๊ฐ๋ณ ๋ฐ์ดํฐ๋ฅผ ๋ฉ๋ฆฌํ๋ ํ๋ก๊ทธ๋๋ฐ์ผ๋ก์ ๊ธฐ์กด ๋ช ๋ นํ, ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ์ด ํ๋ก๊ทธ๋จ์์ ๊ฐ์ด๋ ์ํ์ ๋ณํ๋ฅผ ์ค์์ ์ฌ๊ธฐ๋ ๊ฒ๊ณผ ๋ฌ๋ฆฌ ํจ์ํ ํ๋ก๊ทธ๋๋ฐ์ ์์ํ๊ฒ ํจ์์ ์ ๋ฌ๋ ์ธ์ ๊ฐ๋ง ๊ฒฐ๊ณผ์ ์ํฅ์ ์ฃผ๊ณ ์ํ๊ฐ์ ๊ฐ์ง์ง ์์ต๋๋ค. ๋ฐ๋ผ์ ๋ค์๊ณผ ๊ฐ์ ์ฅ์ ๋ค์ ๊ฐ์ง๋๋ค.
- ์ด๋ค ์ํฉ์์ ํ๋ก๊ทธ๋จ์ ์คํํ๋๋ผ๋ ์ผ์ ํ๊ฒ ๊ฐ์ ๊ฒฐ๊ณผ๋ฅผ ๋์ถํ ์ ์์ต๋๋ค.
- ๊ฐ ๋ณํ๋ฅผ ๋ฉ๋ฆฌํ๋ฏ๋ก ํจ์ ํธ์ถ์ด ๊ฐ๊ฐ ์ํธ ๊ฐ์ ๋ฐฐํ์ ์ผ๋ก ์คํ๋๊ณ ๋ณ๋ ฌ์ฒ๋ฆฌ์ ์ ๋ฆฌํฉ๋๋ค.
- ๋๊ท๋ชจ ๋ณ๋ ฌ์ฒ๋ฆฌ, ๋ฉํฐ ์ฝ์ด์ ํ๊ฒฝ์์ ํจ์จ์ ์ธ ํ๋ก๊ทธ๋๋ฐ์ด ๊ฐ๋ฅํฉ๋๋ค.
- ์ด๋ค ์ํฉ์์ ํ๋ก๊ทธ๋จ์ ์คํํ๋๋ผ๋ ์ผ์ ํ๊ฒ ๊ฐ์ ๊ฒฐ๊ณผ๋ฅผ ๋์ถํ ์ ์์ต๋๋ค.
- ํ๋กํ ์ฝ ์งํฅ ํ๋ก๊ทธ๋๋ฐ ํจ๋ฌ๋ค์
2015๋ WWDC์์ Swift 2.0 ๋ฒ์ ์ ๋ฐํ์ ํจ๊ป Swift์ ํ๋กํ ์ฝ๊ณผ ์ต์คํ ์ ์ด ์ถ๊ฐ๋์ด ํ๋กํ ์ฝ ์งํฅ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๊ฐ ๋์์ต๋๋ค. Swift๋ ๋๋ถ๋ถ์ ํ์ ์ด ํด๋์ค(์ฐธ์กฐ ํ์ )๊ฐ ์๋ ๊ตฌ์กฐ์ฒด(๊ฐ ํ์ )๋ก ๊ตฌํ๋์ด ์์ต๋๋ค. ์ด ์์์ด ๋ถ๊ฐ๋ฅํ ๊ตฌ์กฐ์ฒด๋ก ๊ณตํต ๊ธฐ๋ฅ์ ๊ฐ์ง ์ ์๊ฒ ํ๋ ๋ฐฉ๋ฒ์ด ํ๋กํ ์ฝ๊ณผ ์ต์คํ ์ ์ ๋๋ค.
๊ธฐ์กด ํด๋์ค์์ ๊ตฌํํ ์ ์์๋ ์บก์ํ, ์ถ์ํ, ์ ๊ทผ ์ ์ด๋ฑ์ ๊ธฐ๋ฅ๋ค์ ๊ตฌ์กฐ์ฒด์ ์ด๊ฑฐํ์์ ๊ตฌํํ ์ ์๊ฒ๋์๊ณ ํด๋์ค์ ์ธ์คํด์ค๋ณด๋ค ๊ฐ ํ์ ์ ์ฌ์ฉํจ์ผ๋ก์ ๋ ๋์ ํจ์จ์ฑ๊ณผ ์ค๋ฅ ์ต์ํ, ์ฐธ์กฐ๋ก ๋ถํฐ ์์ ๋ก์, ๋ ๋์ ์ถ์ํ ๋ฉ์ปค๋์ฆ์ ์ถ๊ตฌํ๋ค๋ ๊ฒ์ ๋๋ค.
ํ๋กํ ์ฝ๊ณผ ์ต์คํ ์ ์ ๋ํ ๊ณต๋ถ๋ ์ถํ ํฌ์คํ ์ ๋จ๊ธฐ๊ฒ ์ต๋๋ค.
3. Swift ์ ๋ช ๊ฐ์ง ํน์ง
- ARC (Automatic Reference Counting: ์๋ ์ฐธ์กฐ ํ์ ๊ณ์ฐ)
Swift๋ ARC๋ฅผ ์ง์ํ์ฌ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฝ๊ฒ ๊ด๋ฆฌ ํ ์ ์์ต๋๋ค. ARC๊ฐ ํด๋์ค ์ธ์คํด์ค๊ฐ ๋ ์ด์ ํ์ํ์ง ์์ ๋ ์ธ์คํด์ค๊ฐ ์ฌ์ฉํ๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์๋์ผ๋ก ๋น์๋๋ค (๋ฉ๋ชจ๋ฆฌ๋ฅผ ์๋์ผ๋ก ๊ด๋ฆฌ). ์ด ARC๋ ๋ง๊ทธ๋๋ก ์ฐธ์กฐ ํ์ ์ธ ํด๋์ค์ ์ธ์คํด์ค์๋ง ์ ์ฉ๋๋ฉฐ ๊ฐ ํ์ ์ธ ๊ตฌ์กฐ์ฒด, ์ด๊ฑฐํ์ ํด๋น ๋์ง ์์ต๋๋ค.
ARC ๋์ ๋ฐฉ์ ์ฐธ๊ณ - REPL (Read-Eval-Print-Loop) ๋ก๋ ์ฝ๋๋ฅผ ์คํ ๊ฐ๋ฅํ๋ค
REPL์ ๊ฐ๋จํ ์ฝ๋๋ฅผ ์ ๋ ฅํ์ฌ ๋ฐ๋ก๋ฐ๋ก ๊ฒฐ๊ณผ๋ฅผ ๋ณผ ์ ์๊ฒ ํฉ๋๋ค. - Swift๋ ์คํ์์ค๋ก ์ ํ๋ ํ macOS ์ด์ธ์ ํ๊ฒฝ ๋ฆฌ๋
์ค, ์๋์ฐ์์๋ ์ฌ์ฉ ๊ฐ๋ฅํฉ๋๋ค.
- Swift ๊ณต์ ๋ธ๋ก๊ทธ
- Swift ๊ณต์ Laguague Guide
4. ๋ง๋ฌด๋ฆฌ
Swift๋ฅผ ๊ณต๋ถํ๊ธฐ ์์ ๊ฐ๋จํ๊ฒ ๊ทธ ํน์ง์ ๋ํด์ ๊ณต๋ถํด๋ดค์ต๋๋ค. ์ค๋ช ์ด ์๋ชป๋ ๋ถ๋ถ์ด๋ ๋ถ์กฑํ ๋ถ๋ถ ๋๊ธ๋ก ์๋ ค์ฃผ์๋ฉด ๊ฐ์ฌํ๊ฒ ์ต๋๋ค! ^^