2019 ๋ค์ด๋ฒ ํ ํฌ์ฝ์ํธ - iOS
12 Jul 2019 | conference ๋ค์ด๋ฒํ ํฌ์ฝ์ํธ iOS7์ 12์ผ์ ๊ทธ๋ฆฐํฉํ ๋ฆฌ์์ ์งํํ๋ ๋ค์ด๋ฒ ํ ํฌ์ฝ์ํธ์ ๋ค๋ ์์ต๋๋ค. ์ค๋๋ง์ ์ปจํผ๋ฐ์ค์ด๊ธฐ๋ ํ๊ณ , ์ฃผ์ ๊ฐ ๋๋ฌด ์ด๋ ต์ง ์๊ณ ๋์๋๋ ์ฃผ์ ๋ผ์ ์ฌ๋ฏธ์์์ต๋๋ค. ๊ฐ์ด ๊ณต๋ถํ๋ ๋๋ฃ๋ค๋ ๋ง๋ ์ ์์ด์ ๋ ์ข์์ต๋๋ค.(๊ฑฐ์ ๋์ฐฝํ ์์ค์ผ๋ก ์๋ ์ฌ๋์ด ๋ง์๋โฆใ ใ ใ ) ๊ทธ ์ ๋ช ํ ๊ทธ๋ฆฐํฉํ ๋ฆฌ ๋์๊ด๋ ๋ค์ด๊ฐ๋ดค๋๋ฐ ์ข๋๊ตฐ์ ใ _ใ ๋ค์ด๋ฒ ์์ง์ & ์ ์ ์ฃผ๋ฏผ๋ค ๋ถ๋ฝ์ต๋๋คโฆ
1. ๋ค์ด๋ฒ์ง๋ SDK-๋ค์ด๋ฒ ์ง๋ ๋ฐ๊ทธ๋ฆผ์ ๊ทธ๋ฆฌ๋ SDK๊ฐ๋ฐ์๊ฐ ํ๋ ์ผ
- ๋ฐํ์๋ฃ
- ์๋กญ๊ฒ ์ถ์ํ ๋ค์ด๋ฒ ์ง๋2.0์ ๊ฐ์ ์ฌํญ์ ๋ํ ์ ๋ฐ์ ์ธ ์ค๋ช ์ด์์ต๋๋ค. ๊ฐ์ธ์ ์ผ๋ก๋ SDK๊ฐ๋ฐ์๊ฐ ์ด๋ป๊ฒ ์ผ์ ํ๋์ง ์ข ๋ ๊ตฌ์ฒด์ ์ผ๋ก ์๊ณ ์ถ์๋๋ฐ, ๊ฑฐ์ ํ๋ณด..? ์ฑ๊ณผ๋ณด๊ณ ์ ๊ฐ๊น์ด ๋ฐํ์ฌ์ ๊ฐ์ธ์ ์ผ๋ก ์กฐ๊ธ ์์ฌ์ ์ต๋๋ค.
- ๋งต๋ฐ์ค๋ผ๋ ์คํ์์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํด์ ๊ฐ๋ฐํ๋ค๋๊ฒ ์์ธ์์. (๋ค ๋ง๋ค์์ ์ค ์์์๋๋ฐ..)
- ํฌํฌ & ์ฌ๊ฐ๋ฐ : ์ ๋์ด์๋ ๊ฒ์ ์ ์ธํ ์์ ์ด ํ์ํ๋ถ๋ถ์ ์ ๋ถ ์์ ํ๋ค๊ณ ํจ
- ์คํ์์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์จ์ ํ์ ์ด ๋ ์ฉ์ดํ๋ค.
2. ๋ค์จ์ ํ์ ๋ ์จ์ ํด๋ฆฐ์ฝ๋
- ๋ฐํ์๋ฃ
- ์ฌ๋ด ์ปจ๋ฒค์ /ํ์ /์ํคํ ์ณ/TDD์ ๊ดํ ๋ด์ฉ
- ๋ค์ํ ๊ด์ ์ ๊ฐ์ง ์ฌ๋ฟ์ด ๋ชจ์ฌ์ ์ผ์ ํจ์จ์ฑ์ ๋์ด๊ธฐ ์ํด์๋ ์ฝ๋์คํ์ผ์ ํตํฉํ ํ์๊ฐ ์๋ค. ๋ค๋ง ๋ชจ๋ ๋ฃฐ์ ์ ์ฉํ ๋๋ ํฉ์๋ฅผ ๋ฐํ์ผ๋ก ํ๋ ๊ฒ์ด ํ์์ด๊ณ , ๊ณตํต์ ๋ฃฐ๋ก ํ๋จํ๋ ๊ธฐ์ค์ ์ด ๊ตฌ๋ฌธ์ ์๋์ ์ญํ ์ด ๋ฌด์์ธ์ง์ ์ด์
- SwiftLint๋ผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์๋๋ฐ, ์ด๋ฅผ ํตํด์ ๋์ด์ฐ๊ธฐ๋ indent ๋ฑ ๊ฐ๋ฐ์๊ฐ ๋์น๊ธฐ ์ฌ์ด ์ฌ์ํ ๊ฒ๋ค์ ์๋ํํ์ฌ ๋ณด์ , ๊ฐ๋ฐ์๋ ๋น์ฆ๋์ค ๋ก์ง์๋ง ์ง์คํ ์ ์๋๋ก ํด์ค
- SwiftLint๋ ์ค์ํํธ ๊ฐ๋ฐ์๋ค์ด ๊ฐ์ฅ ๋ง์ด ์ฐ๋ ์ปจ๋ฒค์ ๋๊ตฌ์ ๋๋ค. ์ ๊ฐ ๊ฐ์ธ ํ๋ก์ ํธ๋ฅผ ๋ง๋ค๋ ์ฌ์ฉํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด๊ธฐ๋ ํฉ๋๋ค. ์ฒ์์ ์ ์ฉํ์๋ Swift์ปจ๋ฒค์ ์ ์๋ง์ผ๋ฉด warning๋ ์๋๊ณ error๊ฐ ๋ ์ ๋น๋์กฐ์ฐจ ํ ์ ์๋๋ฐ, ํด์ด ๋ง์ถฐ์ฃผ๋ ๊ท์น์ผ๋ก ์ฐจ์ธฐ ๊ฐ์ ํด๋๊ฐ๋ค๋ณด๋ฉด ๊ณต์ ์ปจ๋ฒค์ ์ ๋ง๋ ์ฝ๋๋ฅผ ๋ง๋ค ์ ์์ด์ ์ข์์ต๋๋ค. ํนํ ๋ฐํ์์ ์ค๋ช ํ๋๋ก indent๋ ๊ณต๋ฐฑ ๋ฑ์ ์ ๊ฒฝ์ฐ์ง ์๊ณ ๋ก์ง์๋ง ์ง์ค ํ ์ ์์ด์ ์ข์์ต๋๋ค.
- SwiftLint
MVCํ์ถ๊ธฐ
- ์ฝ์ฝ์ํฐ์น ํ๋ ์์ํฌ์ MVC๋ ์ฌ์ค ์ปจํธ๋กค๋ฌ๊ฐ ์ปจํธ๋กค๋ฌ์ ์ญํ ๋ง ํ๊ธฐ ํ๋ ๊ตฌ์กฐ์ ๋๋ค. iOS์ MVC ์ํคํ ์ณ์ ๊ฐ์ฅ ํฐ ๋จ์ ์ผ๋ก๋ Massive View Controller ์ด์๊ฐ ์๋๋ฐ, ์ด์ ๋จ์ ์ ์ด์ผ๊ธฐํ๊ณ MVVM๊ณผ Rx๋ฅผ ์ ๋ชฉํด์ ์ํคํ ์ณ๋ฅผ ๋ณํํ ํ๊ธฐ๋ฅผ ๋ค์ ์ ์์ด์ ํฅ๋ฏธ๋ก์ ์ต๋๋ค.
- ์ฝ์ฝ์ํฐ์น ํ๋ ์์ํฌ์ MVC๋ ์ฌ์ค ๋จ์ ์ด ๋ง๋ค. ์ปจํธ๋กค๋ฌ๋ ์ฌ์ค ๋ทฐ์ ๋๋ฌด๋ ๋ฐ์ ํ๊ฒ ์ฐ๊ด๋์ด์๋ค. ๊ฐ๋ฐํ๋ค๋ณด๋ฉด ์์๊ฐ์ ๋ทฐ์ ๋ชจ๋ ๋ธ๋ฆฌ๊ฒ์ดํธ๋ฅผ ์ ์ธํด์ ๊ด๋ฆฌํ๊ณ ๋คํธ์ํฌ ์์ฒญ๊น์ง ๋ณด๋ด๊ฒ ๋๋ฉด์ ์ ์ massiveํ๊ฒ ๋ณํํ๊ฒ๋๋ค. ๋จ์ํ ์คํธ๋ ํ๋ค์ด์ง๋ค. ๋ทฐ์ ๋ผ์ดํ์ฌ์ดํด๊น์ง ๋ํด์ง๋ฉด ์์ โฆ hell.
- MVVC์ ์ฑํ : ์ฝ์ฝ์ ์์กด๋๋ฅผ ์ต๋ํ ์ค์ด๊ณ ์์ํ ๋น์ฆ๋์ค ๋ก์ง์ ๊ฐ์ ธ์ผํ๋ค๋ ๋ชฉ์ ์ผ๋ก ์์.
- ๋ทฐ๋ชจ๋ธ <-> ๋ทฐ์ ๋์จํ ์ข ์์ฑ / ๋ฐ์ธ๋ฉ์ ์ฉ์ดํ๊ฒ ํด์ฃผ๋ Rx๋ฅผ ์ฑํ.
- View == ์์ ๊ป๋ฐ๊ธฐ : layout(), attribute() ๊ทธ๋ฆฌ๊ณ ๋ทฐ๋ชจ๋ธ๊ณผ์ ๋ฐ์ธ๋ฉ๋ง ํ๋ ๊ฒ์ผ๋ก ์ญํ ์ ํ
- ViewBindable: ๋ทฐ์์ ๋ฐ์ํ ์ ์๋ ์ด๋ฒคํธ๋ฅผ ํธ๋ค๋งํ ์์๋๋ก ์ฐ๊ฒฐํ๋ ์ญํ
- ViewModel: ๋ทฐ์ ์ก์ ์ด ์ผ์ด๋ฌ์๋ ์ด๋ป๊ฒ ์ฒ๋ฆฌํ๋์ง ๊ตฌํ
- Model: ๋คํธ์ํฌ ๋ฑ ์ฐ๊ฒฐ, Business Logic๋ง์ ์ ๋ด
3. ์ฝ๊ณ ์ฌ๋ฏธ์๋ iOS๋๋ฒ๊น - LLDB Command
- ๋ฐํ์๋ฃ
- LLDB๋ Xcodeํด์ ๋ด์ฅ๋์ด์๋ ๋๋ฒ๊ฑฐ์ ๋๋ค. ๋ค์ํ LLDB ๋ช ๋ น์ด๋ฅผ ํตํด ์ฝ๊ณ ํธ๋ฆฌํ๊ฒ ๋๋ฒ๊น ํ๋ ๋ฐฉ๋ฒ์ ์ ์ ์์์ต๋๋ค.
- ์ง๊ธ๋ ๊ฐ๋ฐํ ๋ breakpoint์ LLDB๋ช ๋ น์ด๋ฅผ ํตํด์ ๋๋ฒ๊น ํ๊ณคํ๋๋ฐ, ์ข ๋ ํจ์จ์ ์ด๊ณ ๋ค์ํ๊ฒ ๋๋ฒ๊น ํ ์ ์๋ ๋ฐฉ๋ฒ์ ์๊ฒ๋์ด ์์ผ๋ก ๋ง์ด ์์ฉํ ๊ฒ ๊ฐ์ต๋๋ค. ํ๋ฒ์ ์ปค๋งจ๋๋ฅผ ์ธ์์ ์ฌ์ฉํ์ง ๋ชปํ๊ฒ ์ง๋ง, ์ด๋ค ์ข์ ๋ฐฉ๋ฒ์ด ์๋์ง๋ ๋ชฐ๋ผ์ ์์ ์ฐพ์๋ณด์ง๋ ์๊ณ ์ฌ์ฉ๋ ๋ชปํ๋๊ฑฐ๋ ์ด๋ฐ๊ฒ ์๋~ ์ฏค์ ์๊ณ ํ์ํ ๋ ์ฐพ์์ ์ธ์ ์๋๊ฑฐ๋ ์ฒ์ง์ฐจ์ด์ธ ๊ฒ ๊ฐ์์. ์ด๋ฐ ์๋ฏธ์์ ์ ์๊ฒ ๊ต์ฅํ ๋์๋๋ ์ธ์ ์ค์ ํ๋์์ต๋๋ค! (๋๋ฒ๊น ์ปค๋งจ๋๊ฐ ํ์ํ ๋ ์์ผ๋ก ๊ณ์ ๋ฐํ์๋ฃ๋ฅผ ์ฑ๊ฒจ ๋ณผ ๊ฒ ๊ฐ๋ค์โฆ!)
4. ARKit, CoreML, Turi Create ์ผํ์
- ๋ฐํ์๋ฃ
- CoreMLํ๋ ์์ํฌ๋ฅผ ์ด์ฉํด์ ๋ฏธ๋ ํ๋ก์ ํธ ํ ํ๊ธฐ๋ฅผ ์ค๋ช ํ๋ฉด์ ๋จธ์ ๋ฌ๋ ๋ชจ๋ธ์ ์ธํ ํ ๋ ์ด๋ค ์ ์ ์ฃผ์ํด์ผํ๋์ง, ์ฝ๊ณ ๊ฐ๋ณ๊ฒ ์ฐ๊ธฐ์ ์ด๋ค ํด์ ์ฌ์ฉํ๋์ง ์ค๋ช ํ๋ ์ธ์ ์ด์์ต๋๋ค. ์งํ์ ์ผ๊ตด์ ํฉ์ฑํ๋ฉด ์ฌ๋ฐ๊ฒ ๋ค๋ ์์ด๋์ด๋ก ์์๋์ด ๋จธ์ ๋ฌ๋ ๋ชจ๋ธ๋ง์ ์ํ์ฐฉ์ค๋ฅผ ๊ฒช์ ์ด์ผ๊ธฐ, ๊ฒฐ๊ตญ์ ๋ ๋ชจ๋ธ๋ง์ ํจ๊ณผ์ ์ธ ๋ฐฉ๋ฒ์ ์ ์ฉํด์ ์ฑ๊ณตํ๋ค๋ ์ด์ผ๊ธฐ๋ฅผ ๋ฃ๊ณ ๋๋ ์ด๋ ต๊ฒ๋ง ๋๊ปด์ก๋ ๋จธ์ ๋ฌ๋์ด ์ข ๋ ์น์(?)ํด์ง๋ ๊ณ๊ธฐ๊ฐ ๋์์ต๋๋ค!
- ARKit: ์ ํ์ด ์ ๊ณตํ๋ ์ฆ๊ฐํ์ค ํ๋ ์์ํฌ
- https://developer.apple.com/documentation/arkit
- Create ML: ๋จธ์ ๋ฌ๋ ๋ชจ๋ธ ์ ๊ณต ํ๋ ์์ํฌ
- https://developer.apple.com/documentation/createml
- Turi Create: ์ปค์คํ
๋จธ์ ๋ฌ๋ ๋ชจ๋ธ์ ๊ฐ๋จํ๊ฒ ๋ฐ๋ฌ์ํฌ ์ ์๊ฒ ํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
- https://github.com/apple/turicreate
5. ์ฌ์ฉ์ ๊ฒฝํ์ ๋์ด๋ ์ ๋๋ฉ์ด์ ๋ง๋ค๊ธฐ
- ๋ฐํ์๋ฃ
- ์ ๋๋ฉ์ด์
์ด ์ ํ์ํ ๊น? ๋ถํฐ ์์ํด์ ์ ๋๋ฉ์ด์
์ ๊ธฐ๋ฅ, ๊ฐ ๊ธฐ๋ฅ์ ์์ฐ์ค๋ฝ ๊ตฌํํ๊ธฐ ์ํด์ ์ด๋ค ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ฉด ์ข์์ง ์๋ดํ๋ ์ธ์
์ด์์ต๋๋ค.
- ํํ๋ ๊ธฐ๋ฅ์๋ฐ๋ฅธ๋ค(Louis H. Sullivan) - ๋์์ธ์ ํ ๋๋ ์ด๊ฒ ์ด๋์ ์ฐ์ผ๊ฒ์ธ์ง ๋ฏธ๋ฆฌ ๊ฒฐ์ ํ๊ณ ๊ทธ ์ดํ์ ํํ์ ์ฉ๋์๋ง๋ ๋์์ธ๊ณผ ์ ๋๋ฉ์ด์ ์ ์ ํํด์ผํ๋ค.
- ์ ํ์ HIG๋ฌธ์์ ๋ฐ๋ฅด๋ฉด ์ ๋๋ฉ์ด์
์ ์ปจํ
์ธ ๋ฅผ ์ดํดํ๊ธฐ ์ฝ๊ฒ ๋ง๋ค๊ธฐ ์ํ ๋๊ตฌ. ๋ฐ๋ผ์ ์ปจํ
์ธ ์ ๋งฅ๋ฝ์ ์ ํํํ ์ ์๋๋ก ์ ์ ๋ ์ ๋๋ฉ์ด์
์ ๋ฃ๋๊ฒ ํ์ํ๋ค.
- HIG: Human Interface Guideline
- ์ ๋๋ฉ์ด์
์ ์์๋ฅผ ํ์
ํ๋ฉด ์ฝ๊ฒ ์ ๊ทผ ํ ์ ์๋ค.
- 3 ์์: ํธ๋ฆฌ๊ฑฐ/ํ๊ฒ/ํ์
- ํน์ ์ด๋ฒคํธ(ํธ๋ฆฌ๊ฑฐ)๊ฐ ๋ฐ์ํ์๋ UI์์(ํ๊ฒ)๋ฅผ ์๊ฐ์ ๋ฐ๋ผ(ํ์) ๋ณํ์ํค๋ ๊ฒ