Language/Swift (12) ์ธ๋ค์ผํ ๋ฆฌ์คํธํ ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ๊ณผ Swift - ์ ๊ทผ์ ์ด ์ ๋ฒ ํฌ์คํ ์์ ๊ตฌ์กฐ์ฒด, ํด๋์ค, ํ๋กํผํฐ, ๋ฉ์๋์ ๋ํด ์ง์ด๋ดค๋๋ฐ์. ์ด๋ฒ ํฌ์คํ ์์๋ ์ ๊ทผ์ ์ด์ ๋ํด ์ ๋ฆฌํด๋ดค์ต๋๋ค. ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ ํจ๋ฌ๋ค์์์ ์ค์ํ ๋ด์ฉ ์ค์ '์๋ํ'๋ผ๋ ๊ฐ๋ ์ด ์์ต๋๋ค. ์ด๋ฅผ ๊ตฌํํ๊ธฐ ์ํ ํต์ฌ ๊ธฐ๋ฅ์ธ ์ ๊ทผ์ ์ด์ ๋ํด ์์๋ณด๊ฒ ์ต๋๋ค. ์ ๊ทผ์ ์ด - ์ฝ๋๋ผ๋ฆฌ ์ํธ์์ฉ์ ํ ๋ ํ์ผ ๊ฐ ๋๋ ๋ชจ๋ ๊ฐ์ ์ ๊ทผ์ ์ ํํ ์ ์๋ ๊ธฐ๋ฅ. - ์ ๊ทผ์ ์ด๋ฅผ ํตํด ์ฝ๋์ ์์ธ ๊ตฌํ์ ์จ๊ธฐ๊ณ ํ์ฉ๋ ๊ธฐ๋ฅ๋ง ์ฌ์ฉํ๋ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณต. ์ ๊ทผ์ ์ด๊ฐ ์ ํ์ํ ๊น? - ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ ํจ๋ฌ๋ค์์์ ์ค์ํ ์บก์ํ์ ์๋ํ๋ฅผ ๊ตฌํํ๋ ์ด์ ๋ ์ธ๋ถ์์ ๋ณด๊ฑฐ๋ ์ ๊ทผํ๋ฉด ์๋๋ ์ฝ๋๊ฐ ์๊ธฐ ๋๋ฌธ. - ๋ถํ์ํ ์ ๊ทผ์ผ๋ก ์๋์น ์์ ๊ฒฐ๊ณผ๋ฅผ ์ด๋ํ๊ฑฐ๋ ๊ผญ ํ์ํ ๋ถ๋ถ๋ง ์ ๊ณตํด์ผํ๋๋ฐ ์ ์ฒด ์ฝ๋๊ฐ ๋ ธ์ถ๋ .. ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ๊ณผ Swift - Struct, Class, Property, Method ๊ธฐ๋ณธ๊ธฐ ๋ณด์ถฉ์ ์ํด ์ค์ํํธ์ ๊ต๊ณผ์๋ผ๊ณ ํ ์ ์๋ ์ผ๊ณฐ์ฑ ์ ๋ค์ ๋ณด๋ ์ค์ธ๋ฐ์. ๊ธฐ๋ณธ์ ์ธ ๋ด์ฉ์ด์ง๋ง ์ญ์ ๋ณผ ๋๋ง๋ค ์๋ก์ด ๊ฒ ๊ฐ๋ค์ ใ ใ ใ ใ ์๋ ์ ์ํฐ๋์์ ์งํํ๋ ํ๋ฆฌ์จ๋ณด๋ฉ ๊ฐ์๋ฅผ ๋ค์์ ๋๋ ์ผ๊ณฐ๋์ด ๊ธฐ์ด์ ์ธ ๊ฐ๋ ์ ๋งค์ฐ ๊ฐ์กฐํ์๋ฉด์ ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ์ 1์ฐจ์์ ์๊ฐํด์ฃผ์ จ๋ ๊ฒ์ด ์๊ฐ๋๋ค์.. ^^.. ๋งค๋ฌ 1๊ถ์ฉ์ ๊ผญ ์ฑ ์ ์ฝ์ผ๋ ค๊ณ ํ๋๋ฐ, ์ด๋ฒ ๋ฌ์ ๊ฐ์ฒด์งํฅ์ ์ฌ์ค๊ณผ ์คํด. ๋ผ๋ ์ฑ ์ ๊ตฌ๋งคํ์ต๋๋ค. ์ ๋ฒ ๋ฌ๊น์ง ์๊ธฐ๊ณ๋ฐ์, ์ธ๋ฌธํ ๋์๋ฅผ ํ ๋ฌ์ 1~2๊ถ ์ ๋ ์ฝ์๋๋ฐ ์ด๋ฒ ๋ฌ์ ๊ฐ๋ฐ ์์ ์ ์ข ์ฝ์ด๋ณด๋ ค๊ณ ํฉ๋๋ค ! ์จ๋ , ์ฑ ์ ์ฝ๊ธฐ ์ ์ Swift์์์ ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ ํจํฐ๋ค์์ ํ์ฉํ ์ ์๋ ๋ฌธ๋ฒ์ ์ง์ด๋ณด๊ณ ์ ๋ณต์ต์ ํ๊ฒ ๋์์ต๋๋ค ! 1ํ์์๋ ๊ตฌ์กฐ์ฒด, ํด๋์ค, ํ๋กํผํฐ, ๋ฉ.. Swift) SOLID ์์น in Swift SOLID ์์น์ด๋ ? SOLID ์์น์ด๋ ๊ฐ์ฒด์งํฅ ์ค๊ณ์ ๋ ์ข์ ์ํคํ ์ณ๋ฅผ ์ค๊ณํ๊ธฐ ์ํด ์ง์ผ์ผํ๋ ์์น๋ค์ 5๊ฐ์ง๋ฅผ ์์ ์ฝ์ด๋ง ๋ฐ์ ์ ๋ฆฌํ ๋จ์ด์ ๋๋ค. SOLID ์์น์ ์ ์์์ผํ์ฃ ? ๊ฐ๋ฐ์ ํ ๋ ๋น์ฅ ๊ธฐ๋ฅ์ ๊ตฌํํ๋ ๊ฒ๋ ์ค์ํ์ง๋ง, ์๋กญ๊ฒ ์ด๋ค ๊ธฐ๋ฅ์ด ์ถ๊ฐ๋๊ฑฐ๋ ์ ์ง๋ณด์๊ฐ ํ์ํ ๋ ๋์ฑ ์์ฐ์ฑ ์๊ณ ์ ์ฐํ๊ฒ ๋์ฒ๊ฐ ๊ฐ๋ฅํด์ผ ์ข๊ฒ ์ฃ .? ์ด๋ฌํ ์ข์ ์ค๊ณ๋ฅผ ์ํ ์ต์ํ์ ์์น๋ค์ ์ ๋ฆฌํ๊ฒ SOLID ์์น์ด๋ผ๊ณ ํ ์ ์๋๋ฐ์. VIPER๋ MVVM๋ ๋ชจ๋ ์ด๋ฐ ์์น์ ์ ๊ฐํด์ ๋ง๋ค์ด์ก๋ค๊ณ ํฉ๋๋ค. SOLID ์์น์ ์ ์ฉํ์ฌ ์ค๊ณํ๋ฉด ! 1. ์ฌ์ฌ์ฉ๊ณผ ์ ์ง๊ด๋ฆฌ๊ฐ ์ฌ์ด, ๋ณ๊ฒฝ์ ์ ์ฐํ ์ฝ๋๋ฅผ ๊ฐ์ง๊ฒ ๋ฉ๋๋ค. ์ด๋ ํผํผํ ์ํํธ์จ์ด๋ฅผ ๋ง๋ค ์ ์๊ฒ ํ๋ฉฐ ๋์ ํ์ฅ์ฑ์ ๊ฐ์ง๊ฒ ํฉ๋๋ค. 2. ๋์ .. Swift) ํ๋กํ ์ฝ ์งํฅ ํ๋ก๊ทธ๋๋ฐ ์ฐ๋ฆฌ๊ฐ iOS ๊ฐ๋ฐ์ ํ๋ฉด์ ์ฐ๋ Swift ์ธ์ด๋ ํ๋กํ ์ฝ ์งํฅ ์ธ์ด ๋ผ๊ณ ํ์ฃ ! ํํ ์๊ณ ์๋ ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ์ฌ๋ฌผ์ ๊ฐ์ฒด๋ก ํ์ฑํ์ฌ ๊ณตํต์ ์ ๊ฐ๋ ๋ชจ๋ ๊ณณ์์ ์์๋ฐ๋ ๊ฐ์ฒด ๋ด๋ถ์ ๋ก์ง์ ์บก์ํ ํฉ๋๋ค. ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ SuperClass์ ์ข ์์ ์ด๋ผ๋ ์ ๊ณผ Value Type์ ์ฌ์ฉํ ์ ์๋ค๋ ๊ฒ์ด ๋จ์ ์ธ๋ฐ์ ! ๋, ๋จ ํ๋์ SuperClass ๋ง ์์ํ ์ ์๊ธฐ ๋๋ฌธ์ ์๊ฐ์ด ์ง๋๋ฉด ๊ธฐ๋ฅ๋ ํ์ฅ๋๋ฏ๋ก ์ด์ ๋ฐ๋ผ ๋ณต์ก๋๊ฐ ๋์์ง๊ณ ๊ด๋ฆฌ๋ ์ด๋ ค์ ์ง๊ฒ ๋ฉ๋๋ค. ํ๋กํ ์ฝ ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ํ์ํ ๋ถ๋ถ๋ง ํ๋กํ ์ฝ๋ก ๋ถ๋ฆฌํด์ ๋ง๋ค ์ ์๊ณ , ๋ค์ค ํ๋กํ ์ฝ์ ๊ตฌํ ํ ์ ์์ต๋๋ค ! ๋, ํ๋กํ ์ฝ ๊ท์น์ class, struct, enum์ ์ ์ฉํ ์ ์๊ธฐ ๋๋ฌธ์ ํ์ฅ ๋ถ๋ถ์์๋ OOP.. Swift ) ๊ธฐ์ด ๋ฌธ๋ฒ 6์ผ์ฐจ - Class ์ Struct ์ง๊ธ๊น์ง๋ ํด๋์ค์ ๊ตฌ์กฐ์ฒด์ ์ฐจ์ด๋ฅผ ์ ํํ๊ฒ ๋ชจ๋ฅด๊ณ ๊ทธ๋ฅ ViewController๋ Class.. Model ๋ง๋ค ๋๋ Struct .. ๋ฅผ ์จ์์ต๋๋ค ! ํ์ง๋ง.. ์ด์ ๋ ์กฐ๊ธ์ด๋ผ๋... ์์์ผ ํ ๋๊ฐ ์จ ๊ฒ ๊ฐ๋ค์ ^_^ ๐ Class์ Struct์ ๊ณตํต์ ์ ? ๊ฐ์ ์ ์ฅํ ํ๋กํผํฐ๋ฅผ ์ ์ธํ ์ ์์ต๋๋ค. ํจ์์ ๊ธฐ๋ฅ์ ํ๋ ๋ฉ์๋๋ฅผ ์ ์ธ ํ ์ ์์ต๋๋ค. ๋ด๋ถ ๊ฐ์. ์ ์ฌ์ฉํ์ฌ ์ ๊ทผํ ์ ์์ต๋๋ค. - ํ๋กํผํฐ ๊ฐ์ ์ ๊ทผ ์์ฑ์๋ฅผ ์ฌ์ฉํด ์ด๊ธฐ ์ํ๋ฅผ ์ค์ ํ ์ ์์ต๋๋ค. extension์ ์ฌ์ฉํ์ฌ ๊ธฐ๋ฅ์ ํ์ฅํ ์ ์์ต๋๋ค. Protocol์ ์ฑํํ์ฌ ๊ธฐ๋ฅ์ ์ค์ ํ ์ ์์ต๋๋ค. ๐ Class์ Struct์ ์ฐจ์ด์ ์ ? ๐ฏ Class ์ฐธ์กฐ ํ์ ARC๋ก ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ๊ฐ์ ํด๋์ค ์ธ์คํด์ค.. Swift ) Closure ์ค๋์ ์คํฐ๋ ์น๊ตฌ๋ค๊ณผ ํจ๊ป ํด๋ก์ ์ ๋ํ ๋ด์ฉ์ ๊ณต๋ถํด๋ณด์์ต๋๋ค ! ๐Closure ๋? - ์ผ์ ๊ธฐ๋ฅ์ ํ๋ ์ฝ๋๋ฅผ ํ๋์ ๋ธ๋ก์ผ๋ก ๋ชจ์๋์ ๊ฒ - func ํค์๋๋ฅผ ์ฌ์ฉํ์ฌ ๋ง๋ค์๋ ํจ์ : named Closure - ์ผ๋ฐ์ ์ธ ํด๋ก์ : Unnamed Closure๋ฅผ ์ง์นญ { (Parameters) -> Return Type in ์คํ ๊ตฌ๋ฌธ } ๐ฟ1๊ธ ๊ฐ์ฒด๋ก์์ ํน์ง - ํด๋ก์ ๋ฅผ ๋ณ์๋ ์์์ ๋์ ํ ์ ์์ต๋๋ค. - ํจ์์ ํ๋ผ๋ฏธํฐ ํ์ ์ผ๋ก ํด๋ก์ ๋ฅผ ์ ๋ฌํ ์ ์์ต๋๋ค. - ํจ์์ ๋ฐํ ํ์ ์ผ๋ก ํด๋ก์ ๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ผ๋ฐ ํจ์์ Closure์ ์ฌ์ฉ ๋ฐฉ์์ ์ฐจ์ด : Closure๋ ํจ์๋ฅผ func ํค์๋๋ก ์ ์ธํ๋ ๊ฒ์ด ์๋๋ผ, ํจ์๋ฅผ ๋ณ์์ ์ ์ธํ๋ ํํ๋ฅผ ์ทจํ๊ณ ์์ต๋๋ค. - ์ผ๋ฐ์ .. Swift ) @discardableResult ๋? ์ค๋์ @discardableResult ๋ผ๋ ์น๊ตฌ์ ๋ํด์ ์์๋ณด๊ฒ ์ต๋๋ค ! ์ ๊ฐ ํ๊ณ ์๋ ํ๋ก์ ํธ ์ฝ๋์ ์ฐ์ด๋ ๊ฒ์ ๋ณด๊ณ ์ ๋ ๊ถ๊ธํด์ ธ์ ๊ฐ์ ธ์๋ดค์ต๋๋ค ! ๐ @discardableResult - ์๋ฏธ: ๊ฒฐ๊ณผ๊ฐ์ discardable ํ ์ ์๋ค. ์ฆ ๊ฒฐ๊ณผ๊ฐ์ ๋ฒ๋ฆด ์ ์๋ค. ๋ผ๋ ์๋ฏธ - ํจ์์ return๊ฐ์ discadable ์ํฌ ์ ์๋ค -> return ๊ฐ์ ์ฌ์ฉํ์ง ์์๋ warning ๋ฉ์ธ์ง๋ฅผ ๋์ค์ง ์๋๋ก ์ค์ ๊ฐ๋ฐ์ ํ๋ค๋ณด๋ฉด ์ฌ๋ฌ๊ฐ์ง Warning์ ๋ณด๊ฒ๋๋๋ฐ์ ! ใ ใ ๊ทธ์ค์์ ์๋์ ๊ฐ์ด Result of call to '์ด์ฉ๊ตฌ' is unused ๋ผ๋ ๊ฒฝ๊ณ ๋ฅผ ๋ณธ์ ์ด ์์ ๊ฑฐ์์ ! ๊ฒฐ๊ณผ๋ฅผ return ํ์ง๋ง ๊ฒฐ๊ณผ๊ฐ์ด ์ฌ์ฉ๋์ง ์์์ ๊ฒฝ์ฐ์ ๋จ๋ ๊ฒฝ๊ณ ์ ๋๋ค ! ๊ทธ๋ ์ง๋ง.. ! .. Swift ) ๊ธฐ์ด ๋ฌธ๋ฒ 5์ผ์ฐจ - UnWrap ์ต์ ๋ ๋ณ์ ๐ Optional ์ด๋ ? - ํ์ ์ ๊ฐ์ด ์์์๋ ์์์๋ ์๋ค๋ ๊ฒ์ ์๋ฏธํ๊ณ ํ์ ๋ค์ ?๋ฅผ ๋ถ์ฌ์ Optional ์ ๋ง๋ค ์ ์์ต๋๋ค. - ๋ณ์์ ๊ฐ์ด nil ๋ ์ ์๋ค๋ ๊ฒ์ ํํํ๋ ๊ฒ Optional ๋ณ์๋ค์ ๊ฐ์ด Optional("—-") ํ์์ผ๋ก ํ์๋๊ธฐ ๋๋ฌธ์ value ๊ทธ๋๋ก ์ฌ์ฉํ๊ณ ์ถ์ ๊ฒฝ์ฐ์๋ unwrapping์ ํด์ค์ผ ํฉ๋๋ค. unwrapํ๋ ๋ฐฉ๋ฒ์ ๋จผ์ Force unwrapping์ด ์์ต๋๋ค. ๊ฐ ๋ค์ !๋ฅผ ๋ถ์ด๋ฉด ๋๋๋ฐ ์ด๋ value๊ฐ nil์ธ ๊ฒฝ์ฐ์ force unwrapping์ ์๋ํ๋ฉด ๋ฐํ์ ์๋ฌ๊ฐ ๋ฐ์ํฉ๋๋ค. ๐ Optional ์ ์์ ํ๊ฒ ์ฒ๋ฆฌํ๋ ค๋ฉด ? Optinal ๋ณ์์ ๊ฐ์ ๊ฐ์ ธ์ค๋ ๋ฐฉ๋ฒ์ Optional Binding ๊ณผ Optinal Chaini.. ์ด์ 1 2 ๋ค์