- ํ ํ๋ก์ ํธ (3์ธ)
- ๊ตฌํ ๊ธฐ๊ฐ : 2021.12.06 ~ 17 (2 weeks)
STEP 1 | STEP 2 | STEP 3 |
---|---|---|
โ | โ | โ |
๋ง๊ตญ๋ฐ๋ํ์ ๊ด๋ จ๋ ์ธ ๊ฐ์ง ํ๋ฉด์ ๊ตฌ์ฑํ์ต๋๋ค. ์ฒซ ๋ฒ์งธ ํ๋ฉด์๋ ๋ฐ๋ํ ์ ๋ณด, ๋ ๋ฒ์งธ ํ๋ฉด์๋ ์ถํ์ ๋ชฉ๋ก, ์ธ ๋ฒ์งธ ํ๋ฉด์๋ ํ๋ชฉ ์์ธ ์ค๋ช ์ผ๋ก ๊ตฌ์ฑํ์ต๋๋ค.
Dynamic Type ์ ์ฉ ์ | Dynamic Type ์ ์ฉ ํ |
---|---|
![]() |
![]() |
1๏ธโฃ JSON ๋ฐ์ดํฐ๋ฅผ Asset Catalog
์ ์ถ๊ฐํ๊ณ , JSON ๋ฐ์ดํฐ๋ฅผ Decoding ํ๊ธฐ ์ํด ๋งค์นญํ Model ํ์
์ ๊ตฌํํ์ต๋๋ค.
2๏ธโฃ JSON ๋ฐ์ดํฐ ๋ฐ Swift ๊ฐ์ฒด ๊ฐ์ Encoding ๋ฐ Decoding์ ํ๊ธฐ ์ํด Codable
ํ๋กํ ์ฝ์ ์ฑํํ์ต๋๋ค.
3๏ธโฃ ExpositionItem
ํ์ผ์์ Swift API Guidelines
์ ์ค์ํ๊ธฐ ์ํด CodingKey
ํ๋กํ ์ฝ์ ์ฑํํ์ฌ ์นด๋ฉ์ผ์ด์ค๋ก ๋ณ์๋ช
์ ์์ฑํ์ต๋๋ค. (Ex: image_name -> imageName)
4๏ธโฃ Model ํด๋์ Exposition
๋ฐ ExpositionItem
ํ์
์ ๊ตฌ์กฐ์ฒด๋ก ์ง์ ํ์ต๋๋ค. Swift์์ ์์ ๋๋ ์ฐธ์กฐ ๊ธฐ๋ฅ์ ์ฌ์ฉํ์ง ์์ ๊ฒฝ์ฐ, ๊ธฐ๋ณธ์ ์ผ๋ก ํด๋์ค๋ณด๋ค๋ ๊ตฌ์กฐ์ฒด๋ฅผ ์ฌ์ฉํ ๊ฒ์ ๊ถ์ฅํ๊ณ ์๊ณ , ์ฐ๊ด๋ ๊ฐ์ ์งํฉ์ ํํํ ๋์๋ ๊ตฌ์กฐ์ฒด๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ ์ ํ๋ค๊ณ ํ๋จํ์ต๋๋ค.
5๏ธโฃ ExpositionItem
ํ์
์ ๋ค์ด๋ฐ์ ํ ๋, ์ฒ์์๋ ํ๊ตญ ์ถํ์
์ ์ด์ ์ ๋ง์ท์ผ๋ ์ถํ ํ์ฅ์ฑ์ ๊ณ ๋ คํ์ฌ ์ด๋ฅผ ํฌ๊ดํ ์ ์๋ ExpositionItem
์ผ๋ก ๋ค์ด๋ฐ์ ํ์ต๋๋ค.
6๏ธโฃ decode ๋ฉ์๋์ ๋ํด์ Asset Catalog์ ํ์ผ์ด ์๋ ๊ฒฝ์ฐ ์ค๋ฅ๋ฅผ ๋ฐํํ๋์ง, ํ์ผ์ด ์๋ ๊ฒฝ์ฐ ์ค๋ฅ๋ฅผ ๋ฐํํ์ง ์๊ณ Decoding์ด ์ ๋๋์ง ํ ์คํธ ์ผ์ด์ค๋ฅผ ์์ฑํ์ต๋๋ค.
- JSON
- Codable
- Data Parsing
- NSDataAsset
- CodingKey
ํ๋ฉด ๊ฐ ๋ฐ์ดํฐ ์ ๋ฌ ๋ฐฉ์ ์ค์์ Notification Center, ํด๋ก์ , delegate ํจํด, KVC/KVO์ ๋ทํ๋ฉด์์ ์ํ๋ฉด์ผ๋ก ์ ํํ ๋ ์ ํฉํ๋ค๊ณ ์๊ณ ์์ต๋๋ค.
๋ฐ๋ผ์ ๋๋ฒ์งธ ํ๋ฉด์์ ์ธ๋ฒ์งธ ํ๋ฉด์ผ๋ก์ ๋ฐ์ดํฐ ์ ๋ฌ์ ์์กด์ฑ ์ฃผ์
์ด ์ ํฉํ ๊ฒ์ผ๋ก ํ๋จํ์ต๋๋ค. ์์ฑ์ ์ฃผ์
, ํ๋กํผํฐ ์ฃผ์
, ๋ฉ์๋ ์ฃผ์
๋ฐฉ์ ์ค์์ ์์ฑ์ ์ฃผ์
์ด ๊ฐ์ฅ ์ ์ ํ๋ค๊ณ ํ๋จํ์ฌ ์ ์ฉํด๋ดค์ต๋๋ค.
๊ทธ ์ด์ ๋ ์๋ ๋จ์ ์ ๊ฐ์ง๊ณ ์์ง ์๊ธฐ ๋๋ฌธ์
๋๋ค.
ํ๋กํผํฐ ์ฃผ์ | ๋ฉ์๋ ์ฃผ์ | |
---|---|---|
๋จ์ | 1. ํด๋น ํ๋กํผํฐ๊ฐ ์ธ๋ถ์ ๊ณต๊ฐ๋๊ฒ ๋๋ค. 2. ํด๋น ํ๋กํผํฐ์ ํ์ ์ด ์ต์ ๋์ด๊ฑฐ๋ ๋ถํ์ํ ๊ธฐ๋ณธ๊ฐ์ ๊ฐ๊ฒ ๋๋ค. |
ํด๋น ํ๋กํผํฐ์ ํ์ ์ด ์ต์ ๋์ด๊ฑฐ๋ ๋ถํ์ํ ๊ธฐ๋ณธ๊ฐ์ ๊ฐ๊ฒ ๋๋ค. |
2๏ธโฃ ํ์ ์์ ์ฌ์ฉํ๋ ๊ฒ์ฒ๋ผ ์คํ ๋ฆฌ๋ณด๋๋ฅผ ํ๋ฉด๋ง๋ค ๋ถํ ํ์ฌ ๊ด๋ฆฌํ์ต๋๋ค.
JSONParser
์ด๊ฑฐํ์ decode ๋ฉ์๋์์ NSDataAsset
์ ์ด๊ธฐํํ๊ธฐ ์ํด UIKit
์ด ํ์ํ์ต๋๋ค.
์ผ๋จ MVVM ๊ด์ ์์ Model ๋ถ๋ถ์ UIKit์ importํ์ง ์๋ ๊ฒ์ด ๊ฐ์ฅ ๋ฐ๋์งํ๋ค๊ณ ํ๋จํ์ต๋๋ค.
ํ์ง๋ง JSONParser
์ ๊ฒฝ์ฐ Model์ ๊ธฐ๋ฅ๋ณด๋จ JSON ํ์ผ์ ๋จ์ํ Parsingํ๋ ์ญํ ๋ง ์ํํ๊ธฐ ๋๋ฌธ์ ๋จ์ํ Util๋ก ๋ณผ ์ ์๋ค๊ณ ํ๋จํ์ต๋๋ค.
๋ฐ๋ผ์ Util๋ก ํ์ผ์ ๋ถ๋ฆฌํ๊ณ UIKit์ ์ฌ์ฉํ๋ ๋ฐฉํฅ์ผ๋ก ํด๊ฒฐํ์ต๋๋ค.
4๏ธโฃ JSONParser ์ด๊ฑฐํ์์ Generic์ ํ์ ๋งค๊ฐ๋ณ์๋ฅผ Item์ผ๋ก ๋ค์ด๋ฐํ์ต๋๋ค.
์ฒ์์๋ exposition ๋ฐ ExpositionItem์ ๊ตฌ์กฐ์ฒด ์ธ์คํด์ค๋ฅผ ๋ฐํํ๋ ๋ด์ฉ์ด๋ฏ๋ก Information, ExpoInfo, Data ๋ฑ์ ๊ณ ๋ คํ๋๋ฐ, Generic์ ํ์ ๋งค๊ฐ๋ณ์๋ก ์ฌ์ฉํ๊ธฐ์ ์ด์ํ๋ค๊ณ ํ๋จํ์ต๋๋ค. ๊ฒฐ๋ก ์ ์ผ๋ก JSONParser๊ฐ Util์ธ ๋งํผ ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉํ๋ ๋ค์ด๋ฐ์ธ Item์ผ๋ก ๊ฒฐ์ ํ๋ ๊ฒ์ด ๋ง๋ค๊ณ ํ๋จํ์ต๋๋ค.
parsing๋ ๋ฐ์ดํฐ๋ฅผ ๋ด์์ค ๋์ผํ ํ์ ์ ๋น ์ธ์คํด์ค๊ฐ ํ์ํ๋๋ฐ, ๊ตฌ์กฐ์ฒด๊ฐ Codable์ ์ฑํํ๊ณ ์์ด ๋น ์ธ์คํด์ค๋ฅผ ์์ฑํ ์ ์์์ต๋๋ค. ์ด์ ํ๋กํผํฐ๋ง๋ค ๊ธฐ๋ณธ๊ฐ์ ์ถ๊ฐํ์ฌ ์ด๊ธฐํ๋ฅผ ํ์ต๋๋ค.
ํ์ง๋ง ExpositionViewController
์์ ์ฌ์ฉํ๋ Exposition
๊ณผ๋ ๋ค๋ฅด๊ฒ, ExpositionItem
๊ตฌ์กฐ์ฒด ํ๋กํผํฐ์ ์ด๊ธฐ๊ฐ์ ๋ถ์ฌํ์ ๋ ExpositionItemTableViewController
์์ ๋ฐ์ดํฐ๋ฅผ ์ ๋๋ก ๊ฐ์ ธ์ค์ง ๋ชปํ๊ณ ๊ธฐ๋ณธ๊ฐ์ผ๋ก ์ ์ง๋๊ณ ์๋ ๋ฌธ์ ๊ฐ ์์์ต๋๋ค.
๋ฐ๋ผ์ ์ธ์คํด์ค๋ฅผ ์์ฑํ ๋ ๊ธฐ๋ณธ๊ฐ์ ๊ฐ์ง ์๋๋ก ํ๊ณ ์ต์ ๋ ํ์ ์ผ๋ก ์ ์ธํ์ต๋๋ค.
ExpositionItemViewController ๋ฅผ ์ด๊ธฐํํ๊ธฐ์ํด "ExpositionItem" ๊ณผ "expositionItem" ๊ฐ์ ์์๋ฅผ ์์์ผํ๋ ๊ฒ์ด ๋ถ๋ด์ด ๋๋ค๊ณ ์๊ฐํ์ต๋๋ค.
์ด๋ ์ง์ String์ผ๋ก ์ ์ด์ฃผ์ง ์๊ณ Namespace๋ฅผ ๋ฐ๋ก ๋ง๋ค์ด ๊ด๋ฆฌํ ์ ์๋๋ก ๊ตฌํํ์ต๋๋ค. ๋ํ Factory Pattern์ ํ์ฉํ์ฌ ํด๊ฒฐํ์ต๋๋ค.
2๏ธโฃ IBOutlet ๋ณ์๋ nil์ด ๋ ์ ์๊ธฐ ๋๋ฌธ์ ์์์ ์ถ์ถ ์ต์
๋(!
)์ด ์๋ ์ต์
๋(?
) ํ์
์ผ๋ก ์ ์ธํ์ต๋๋ค.
์ผ๋จ IBOutlet์ด nil์ด ๋ ์ ์๋ ์ํฉ์ ํด๋น outlet์ด ์ํด์๋ ViewController๊ฐ ์์ง ๋ฉ๋ชจ๋ฆฌ์ ๋ก๋๋์ง ์์๋๋ฐ ์ธ๋ถ์์ outlet์ ์ ๊ทผํ๋ ค๊ณ ํ ๋ ๋ฐ์ํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ํ์ฌ ์ฝ๋ ์์์ IBOutlet์ ์ง์ ์ ๊ทผํ๋ ๊ฒฝ์ฐ๊ฐ ์์ด์ nil์ด ๋๋ ์ํฉ์ด ๋ฐ์ํ์ง ์์ ์๋ ์์ง๋ง, ๋น์ฆ๋์ค ๋ก์ง์ ์ธ์ ๋ ๋ฐ๋ ์ ์๊ธฐ ๋๋ฌธ์ ๋ชจ๋ IBOutlet์ optional ํ์ ์ผ๋ก ํ์ํ๋๋ก ์์ ํ์ต๋๋ค.
๊ธฐ์กด์ NumberFormatter๋ฅผ ํ์ฉํด .decimal๋ก formattingํ ๊ฐ์ ๋ด๋ ๋ณ์๋ฅผ formattedString
์ผ๋ก ๋ค์ด๋ฐ์ ํ์์ต๋๋ค. ํ์ง๋ง ์ด๋ค ๊ฐ์ผ๋ก formatting๋์๋์ง ๋ช
ํํ๊ฒ ๋ณด์ฌ์ฃผ๊ธฐ ์ํด formattedDecimalString
๋ก ์์ ํ์ต๋๋ค.
- TableView (UITableViewController, Content Configuration)
- ์์กด์ฑ ์ฃผ์ (์์ฑ์ ์ฃผ์ )
- Factory Pattern
- ์ฝ๋๋ก ํ๋ฉด ์ ํ
- ViewController ๊ฐ์ ๋ฐ์ดํฐ ์ ๋ฌ
- NSCoder
- Scroll View
- Navigation Controller
- Namespace
- Utility
์๊ตฌ์ฌํญ์ ๋ฐ๋ผ ์ฒซ ํ๋ฉด๋ง .portrait์ ์ง์ํ๋๋ก ํ๊ณ , ๋๋จธ์ง ํ๋ฉด์ ๊ธฐ๊ธฐ์ ๋ฐฉํฅ์ ๋ง๊ฒ ๋ชจ๋ ํ๋ฉด ๋ฐฉํฅ ์ ํ์ด ๋๋๋ก ๊ตฌํํ์ต๋๋ค.
ํ๋ฉด ๋ฐฉํฅ ์ ํ์ ๋ํ ๊ด๋ฆฌ๋ ๊ฐ๊ฐ์ViewController ์์ supportedInterfaceOrientations๋ฅผ ์ฌ์ ์ํ์ฌ ์ค์ ํด์ฃผ์์ต๋๋ค.
๊ธฐ๊ธฐ์ ํฐํธ ํฌ๊ธฐ๊ฐ Larger Accessibility Sizes๋ฅผ ํ์ฑํํ๊ณ , ํน์ ํฐํธ ํฌ๊ธฐ๋ฅผ ๋์ด์๋ ๊ฒฝ์ฐ isAccessibilityCategory๋ฅผ ํ์ฉํ์ฌ ์ฝ๋๋ฅผ ๋ถ๊ธฐํ๊ณ ๋ ์ด์์์ ์ก์์ฃผ๋๋ก ํ์ต๋๋ค. ํฐํธ ํฌ๊ธฐ๊ฐ ์ปค์ง๋ ๊ฒฝ์ฐ๋ ์คํ๋ทฐ์ axis๋ฅผ .vertical๋ก ๋ฐ๊พธ์ด ๊ณต๊ฐ์ ํ๋ณดํ๊ณ , ์ผ๋ฐ์ ์ธ ํฐํธ ํฌ๊ธฐ์ผ ๊ฒฝ์ฐ์๋ .horizontal๋ก ๋์ด ๊ธฐ์กด ํ๋ฉด์ ์ ์งํ๋๋ก ๊ตฌํํ์ต๋๋ค.
๊ธฐ์กด์๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์ ๊ณต๋๋ ์คํ์ผ์ cell์ ์ฌ์ฉํ์๋๋ฐ, ์ด๋ฏธ์ง ํฌ๊ธฐ ๋ฑ ์ํ๋ ๋ ์ด์์์ ์ก๊ธฐ์ ์ด๋ ค์์ด ์์ด์ ์ปค์คํ ์ ๋ก ๊ตฌํํ์ต๋๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก ํ๋ฉด์ ๋ํ๋๋ ์ด๋ฏธ์ง๋ฅผ ์ ์ธํ UI์์๋ค์ ๋ํด dynamic type์ ์ง์ํ๋๋ก ๊ตฌํํ์ต๋๋ค. ์์ดํฐ ๊ธฐ๋ณธ ์ฑ(ex. ์ค์ )์์๋ ๋ณ๋๋ก ์ด๋ฏธ์ง์ ์ฌ์ด์ฆ๋ฅผ ๋๋ ค์ฃผ์ง ์๋ ๊ฒ์ ๋ณด๊ณ , ์ด๋ฏธ์ง์ ๋ํด์๋ dynamic type์ ๊ตฌํํด์ฃผ์ง ์์์ต๋๋ค.
์ฌ๋ฌ ๊ฐ์ view controller์์ dynamic type ์ ์ฉ์ด ํ์ํ๊ธฐ์ ๊ฐ UI์์๋ฅผ extensionํ์ฌ dynamic type์ ์ ์ฉํด ์ค ์ ์๋ ๋ฉ์๋๋ฅผ ๊ตฌํํ์ต๋๋ค.
Voice Over๋ฅผ ๊ตฌํํ๋ฉด์ Accessibility Inspector Audit์ ๋์์ด ๋ถํ์ํ๋ค๊ณ ์๊ฐ๋๋ ์ผ๋ถ ๊ฒฝ๊ณ ๋ฉ์์ง๋ฅผ ๋ฌด์ํ์ต๋๋ค.
์ค์ ๋ก Voice Over๋ฅผ Apple Store ๋ฑ์ ์ฌ์ฉํด๋ดค๋๋, Cell์ ์ด๋ฏธ์ง๋ ์ฝ์ง ์๊ณ , title ๋ฐ subtitle ๋ฑ ์ ๋ณด๋ฅผ ๋ฌถ์ด์ button์ผ๋ก ์ฝ๊ณ , accessoryView๋ ์ฝ์ด์ฃผ์ง ์๋ ๊ฒ์ ํ์ธํ์ต๋๋ค. ํ๋ฉด ์ ํ ๋ฑ์ ์ด๋ฒคํธ์ ๋ํ ์ ๋ณด๋ฅผ ์๋ ค์ฃผ๋ ๊ฒ์ด Voice Over์ ์ฃผ์ ๋ชฉ์ ์ด๋ผ๊ณ ํ๋จํ๊ณ ํ๋ก์ ํธ์๋ ๋์ผํ๊ฒ ์ ์ฉํ์ต๋๋ค.
์ฐ์ isAccessibilityCategory์ ๊ฐ์ ๊ธฐ์ค์ผ๋ก ์๋ก ๋ค๋ฅธ ๋ ์ด์์์ ์ฃผ๊ธฐ ์ํด ๋ถ๊ธฐํ์์ต๋๋ค. StackView์ axis๋ฅผ ํ์ฉํ์ฌ ๊ธฐ์กด์ ํ ์ค์ ๋์ฌ์๋ UILabel๋ค์ ํ ์คํธ ํฌ๊ธฐ๊ฐ ์ปค์ง์ ๋ฐ๋ผ axis๋ฅผ vertical๋ก ๋ฐ๊พธ์ด ๋ ์ค๋ก ๋ฐฐ์นํ์ฌ ๊ธ์จ๊ฐ ์๋ฆฌ์ง ์๋๋ก ํ์ต๋๋ค. ์์คํ ์ค์ ์ด ๋ฐ๋๋ ์๋ฆผ์ ๋ฐ๋ ๊ฒ์ NotificationCenter๋ฅผ ํตํด ๊ตฌํํ์ต๋๋ค.
2๏ธโฃ ๋ ๊ฐ์ ๊ตญ๊ธฐ ์ด๋ฏธ์ง ์ฌ์ด์ ๋ฒํผ์ด ์์ ๋, ์์คํ ํฐํธ ํฌ๊ธฐ๊ฐ ์ปค์ง๋ฉด ์ด๋ฏธ์ง๊ฐ ์๋ฆฌ๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ต๋๋ค.
Dynamic Type์ ์ง์ํจ์ ๋ฐ๋ผ UIButton์ ํฌ๊ธฐ๊ฐ ์ปค์ง๊ฒ ๋์ด ์ ์ ์ด๋ฏธ์ง๊ฐ ์ฌ๋ผ์ง๋ ๋ฌธ์ ๊ฐ ์์์ต๋๋ค. ์ด์ stack view์ distribution๊ณผ content hugging/resistance priority๋ฅผ ์กฐ์ ํ๊ณ , ๋ฒํผ๊ณผ ์ด๋ฏธ์ง์ ๋๋น ๋น์จ์ ๋ง์ถฐ์ค์ผ๋ก์จ ๋ฒํผ์ด ํน์ ํฌ๊ธฐ ์ด์์ผ๋ก ์ปค์ง์ง ์๋๋ก ๊ตฌํํ์ต๋๋ค.
Accessibility์ ๊ฒฝ์ฐ ๋ณด์กฐ์ ์ธ ์ฑ๊ฒฉ์ด ๊ฐํ๊ธฐ ๋๋ฌธ์, ๋ฉ์ธ UI ์ฝ๋์ ๋๋ ์ฃผ๊ธฐ ์ํด ๋ฉ์๋๋ฅผ ๋ถ๋ฆฌํ์ฌ ๊ตฌํํ์ต๋๋ค.
๋ฐ๋ณต๋๋ ์ฝ๋๋ค์ ๊ณ ์ฐจํจ์๋ก ํํํ๊ณ , ์ถ์ฝํ ์ ์๋ ์กฐ๊ฑด๋ฌธ์ ๊ฒฝ์ฐ ์ผํญ ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ์ฌ ์กฐ๊ธ ๋ ๊ฐ๊ฒฐํ๊ฒ ํํํ์ต๋๋ค.
- Accessibility (Voice Over, Dynamic Type, Text Style)
- Custom Cell
- Cell Reuse/Configuration
- Stack View
- Interface Orientation
- Notification Center
- AutoLayout