- ์๊ฐ
- ๊ฐ๋ฐํ๊ฒฝ ๋ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
- ํ์
- ํ์๋ผ์ธ
- UML
- ์คํํ๋ฉด
- ํธ๋ฌ๋ธ ์ํ ๋ฐ ๊ณ ๋ฏผ
- ํ๋ก์ ํธ ์ํ ์ค ํต์ฌ ๊ฒฝํ
- ์ฐธ๊ณ ๋งํฌ
Ayaan๐ฆ, zhilly๐ฅ ์ด ๋ง๋ Core Data๋ฅผ ํ์ฉํ ์ผ๊ธฐ์ฅ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋๋ค.
๊ฐ๋ฐ ๊ธฐ๊ฐ : 2022-12-19 ~ 2023-01-06
Ayaan | zhilly |
---|---|
- 22.12.20
- SwiftLint ์ ์ฉ
- DiaryTableView Type ๊ตฌํ
- DiaryCell Type ๊ตฌํ
- 22.12.21
- DiaryView Type ๊ตฌํ
- DiaryListViewController Type ๊ตฌํ
- DiaryViewController Type ๊ตฌํ
- Keyboard ๊ด๋ จ ๊ธฐ๋ฅ๊ตฌํ
- DiaryTextView์ PlaceHolder ๊ธฐ๋ฅ๊ตฌํ
- 22.12.22
- ์ฝ๋ ๋ฆฌํฉํฐ๋ง
- ๋งค์ง ๋ฆฌํฐ๋ด ์ ๊ฑฐ
- 22.12.26
- CoreData์ DiaryData Entity ๊ตฌํ
- DiaryManageable Protocol ๊ตฌํ
- DiaryDataManager Type ๊ตฌํ
- Diary Type ์ฌ์ ์
- DiaryCoreDataStack Type ๊ตฌํ
- 22.12.27
- DiaryViewController ๋ฆฌํฉํ ๋ง
- ํค๋ณด๋๊ด๋ จ ๊ธฐ๋ฅ๊ตฌํ
- ObjectID๋ฅผ ํ์ฉํ์ฌ CoreData๋ฅผ ์์ , ์ญ์ ํ ์ ์๋๋ก ๊ตฌํ
- 22.12.28
- Diary ์์ธ ํ๋ฉด์ ๋๋ณด๊ธฐ ๋ฒํผ ๊ธฐ๋ฅ(๊ณต์ , ์ญ์ ) ๊ตฌํ
- CoreData์ ๋ฐ์ดํฐ๋ฅผ ๊ด์ฐฐํ๋ NotificationCenter ๊ตฌํ
- Cell์ Swipe ๊ธฐ๋ฅ ๊ตฌํ
- Activity View ๊ธฐ๋ฅ ๊ตฌํ
- ์ฝ๋ ๋ฆฌํฉํฐ๋ง
- ๋งค์ง ๋ฆฌํฐ๋ด ์ ๊ฑฐ ๋ฐ ๋ค์ด๋ฐ ๋ณ๊ฒฝ
- 23.01.02
- ManagedObjectModel protocol ๊ตฌํ
- DiaryExtractor ํ์ ๊ตฌํ ๋ฐ ์ ์ฉ
- DiaryManageable๋ฅผ CoreDataManageable๋ก ๋ณ๊ฒฝ ๋ฐ ์์
- DiaryManager์ ์ฑ๊ธํค ํจํด ์ ์ฉ
- Alert Factory ๋ฉ์๋ ๊ตฌํ ๋ฐ ์ ์ฉ
- DiaryError Type ๊ตฌํ ๋ฐ ์ ์ฉ
- ์ฝ๋ ๋ฆฌํฉํฐ๋ง
์์ธํ ๋ณด๊ธฐ
์์ธํ ๋ณด๊ธฐ
- CRUD๋ฅผ ๊ตฌํํ๊ธฐ ์ํด์ CoreData์ Container๋ฅผ ์ด์ฉํด์ผํ์ต๋๋ค.
AppDelegate
์ ๊ตฌํ์ ํด๋๋ฉด ์ฌ์ฉํ ๋๋ง๋คAppDelegate
์์ ๊ฐ์ ธ์ค๊ณ ์ธ๋ํํ๊ณ ํ ๋นํด์ฃผ๋ ๋ฒ๊ฑฐ๋ก์์ด ์์์ต๋๋ค.- CoreData๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด ์ ๊ทผํด์ผ ๋๋ Container๋
DiaryCoreDataStack
์ด๋ผ๋ ์ฑ๊ธํค ๊ฐ์ฒด๋ก ๋ง๋ค์๊ณDiaryDataManager
๊ฐ์ฒด๋ฅผ ํตํด CRUD์ ์ญํ ์ ์ํํ์ต๋๋ค. DiaryCoreDataStack
์ Singleton ๊ฐ์ฒด๋ฅผDiaryDataManager
์์ ์ฌ์ฉํ๋ ๊ตฌ์กฐ๊ฐ ์ด์ํ๊ฒ ๋๊ปด์ก์ต๋๋ค.DiaryDataManager
์Core Data Container
๋ฅผ ๊ฐ์ง๋๋ก ๊ตฌํํ์ฌDiaryManager
ํ์ ์ ๊ตฌํํ์ต๋๋ค.
- CoreData์ Object์์
UUID
๋ฅผid
๋ก ์ฌ์ฉํ์ฌ ๊ด๋ฆฌํ ์ง ์ ๊ณต๋๋ObjectID
๋ฅผ ์ด์ฉํ ์ง๋ฅผ ๊ณ ๋ฏผํ์ต๋๋ค. UUID
๋ฅผ ์ฌ์ฉํ๋ฉด ํน์ object๋ฅผ ์ป์ผ๋ ค๋ฉดfetch
์์ ์ ๋ฐ๋ก ์ ์ํด์ ์ฌ์ฉํด์ผ ํ๋ ๋จ์ ์ด ์์์ต๋๋ค.objectID
๋ฅผ ์ฌ์ฉํ๋ฉด context์ ๋ฉ์๋๋ฅผ ์ด์ฉํด์update
,delete
๋ฅผ ์์ฝ๊ฒ ์ฌ์ฉํ ์ ์๊ธฐ ๋๋ฌธ์objectID
๋ฅผ ์ฌ์ฉํ์ต๋๋ค.
- CoreData๋ก ์ฌ์ฉํ๋ ๋ชจ๋ธ ํ๋๋ก ๊ตฌํ์ ํด์ผํ ๊น, ์๋๋ฉด ์ฑ์์ ์ค์ง์ ์ผ๋ก ์ฌ์ฉํ๋ ๋ชจ๋ธ ํ์ ํ๋๋ฅผ ์ถ๊ฐ๋ก ๋ง๋ค์ด ๋๊ฐ์ ๋ชจ๋ธ๋ก ๊ตฌํ์ ํด์ผํ ๊น ๊ณ ๋ฏผํ์ต๋๋ค.
- ํ ๊ฐ๋ก ํ๋ฉด CoreData ๋ชจ๋ธ์ด ๋น์ฆ๋์ค ๋ก์ง์ ๋ด๋นํ ์๋ ์๊ฒ ์ง๋ง, CoreData ๋ชจ๋ธ์ ์ญํ ์ด ๋ง์์ง๋ค๊ณ ํ๋จํ์ต๋๋ค.
- ๊ทธ๋ ๋ค๊ณ
ViewController
์์ ๋น์ฆ๋์ค ๋ก์ง์ ๋ด๋นํ๋ ๊ฒ๋ ์ํคํ ์ฒ ๊ด์ ์์ ์ด๊ธ๋๋ค๊ณ ์๊ฐํ์ต๋๋ค. - ๋ฐ๋ผ์ ์ค์ง์ ์ผ๋ก ์ฌ์ฉํ๋ ๋ชจ๋ธ ํ์ ์ ๋ง๋ค์ด ๋น์ฆ๋์ค ๋ก์ง์ ์ฒ๋ฆฌํ๊ฒ ํ์ฌ ์ด๋ฅผ ํด๊ฒฐํ์์ต๋๋ค.
- Core Data Entity๋ฅผ ์ถ๊ฐํด์ผ ํ ๋, Entity๋ฅผ ๊ด๋ฆฌํ๋ Manager ๋ฐ VC์์ ์ฌ์ฉํ Model์ ์ถ์ํ๋ฅผ ์ํด
objectID
ํ๋กํผํฐ๋ฅผ ์์ ํ๊ณ ,init?(from: NSManagedObject)
์ ํ ์ ์๋ ์ถ์ํ ๊ฐ์ฒด๋ฅผ ํ๋กํ ์ฝ๋ก ๊ตฌํํ์ต๋๋ค.
- ํ๋ก์ ํธ๋ฅผ ๊ตฌํํ๋ค ๋ณด๋ ๊ฐ์ ๋น์ทํ Alert์ ์์ฑํ๋ ์ฝ๋๊ฐ ๋ง์์ต๋๋ค.
- ํฉํ ๋ฆฌ ํจํด์ ์ด์ฉํ๋ฉด ๋ฐ๋ณต๋๋ ์ฝ๋๋ ์ค์ด๊ณ ํธ๋ฆฌํ๊ฒ Alert์ ๋ณด์ฌ์ค ์ ์๋ค๊ณ ์๊ฐํ์ฌ ๊ตฌํํ์์ต๋๋ค.
์์ธํ ๋ณด๊ธฐ
- ์ง์ญ ๋ฐ ์ธ์ด์ ๋ง๋ ์์ฑ์ผ์๋ฅผ ํํํด์ฃผ๋ ค๊ณ ํ์ต๋๋ค. ํ์ง๋ง
Locale.current
์ ๊ฐ์ด ์ง์ญ์ ๋ณ๊ฒฝํ๊ณ ์ธ์ด๋ฅผ ๋ณ๊ฒฝํด๋eu_KR
๊ณผ ๊ฐ์ด ์ธ์ด ๋ถ๋ถ์ดeu
๋ก ํํ๋๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ต๋๋ค.
Locale.preferredLanguages.first
๋ฅผ ์ฌ์ฉํ์ฌ ์ค์ ๋ ์ธ์ด ์ค ์ฒซ๋ฒ์งธ ์ธ์ด์ ํด๋นํ๋ ๊ฐ์ผ๋ก ์์ฑ์ผ์๋ฅผ ํํ๋๊ฒ ํด์ฃผ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ต๋๋ค.Locale.current
๋ ํ์ฌ App์ ์ง์๋๋Localization
์ ์ํฅ์ ๋ฐ๋ ๊ฒ์ ์๊ฒ๋์์ต๋๋ค. ์ด๋คLocalization
์ ์ฌ์ฉํ ์ง ๊ฒฐ์ ํด์Locale.current
์ ๋ฐ๋ผ์ UI๋ฅผ ๋ค๋ฅด๊ฒ ํํํด ์ค ์์ ์ ๋๋ค.
์์ธํ ๋ณด๊ธฐ
-
์๊ตฌ์ฌํญ์ ์ฝ๋๋ก๋ง UI๋ฅผ ์์ฑํ๋ผ๋ ๋ฌธ๊ตฌ๊ฐ ์์ด์ ์๋ํด๋ณด์์ต๋๋ค.
- Main.storyboard ์ญ์
- info.plist์์ storyboard๊ด๋ จ ์ญ์
- SceneDelegate์์ ViewController๋ก ์ด๋ํ ์ ์๋๋ก RootViewController ์ค์
-
์ด์ ๊ฐ์ด ์งํํ๊ณ ์คํ์์ Main์คํ ๋ฆฌ๋ณด๋ ๊ด๋ จํ์ฌ ์๋ฌ๊ฐ ๋จ๋ ๊ฒ์ ํ์ธํ์ต๋๋ค
-
์์ ์ถ๊ฐ ๊ณผ์ ์ ํตํด Main ์คํ ๋ฆฌ๋ณด๋ ์์ด ํ๋ก์ ํธ๋ฅผ ์งํํ ์ ์์์ต๋๋ค!
์์ธํ ๋ณด๊ธฐ
- MainStoryboard๊ฐ ์์ด ์ฝ๋๋ก๋ง UI๋ฅผ ๊ตฌ์ฑํด ๋ดค์ต๋๋ค.
NavigationController
๋ฐrootViewController
๋ฅผSceneDelegate
์์ ์ธ์คํด์คํ ํด์ฃผ์ด์ ์ฒซ ํ๋ฉด์ด ๋ณด์ฌ์ง๊ฒ ๊ตฌํํด ๋ดค์ต๋๋ค. ํ์ง๋ง iOS 15๋ถํฐ NavigationBar์ ๋์์ธ์ด ์์ ๋์ด ๊ตฌ๋ถ์ ์ด ๋ณด์ด์ง ์๋ ํ์์ด ๋ฐ์ํ์ต๋๋ค. UINavigationBarAppearance
๋ฅผ ์ธ์คํด์คํ ํ ํconfigureWithOpaqueBackground()
๋ฉ์๋๋ก ํ์ฌ ํ ๋ง์ ์ ํฉํ ๋ถํฌ๋ช ํ bar appearance object๋ก ๊ตฌ์ฑํ ๋คNavigationController.navigationBar
์standardAppearance
๋ฐscrollEdgeAppearance
์ ํ ๋นํด ์ค์ผ๋ก ์ด์ ์ ๋ฐ์ํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ต๋๋ค.
์ฝ๋ ๋ณด๊ธฐ
let navigationController = UINavigationController(rootViewController: mainViewController)
let navigationBarAppearance = UINavigationBarAppearance()
navigationBarAppearance.configureWithOpaqueBackground()
navigationController.navigationBar.standardAppearance = navigationBarAppearance
navigationController.navigationBar.scrollEdgeAppearance = navigationBarAppearance
์์ธํ ๋ณด๊ธฐ
// 1๋ฒ
static let identifier: String = String(describing: self)
// 2๋ฒ
static func getIdentifier() -> String {
return String(describing: self)
}
- 1๋ฒ๊ณผ 2๋ฒ ๋ฐฉ๋ฒ ์ค Cell์ identifier์ ์ด๋ป๊ฒ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ด ๋ ๋์์ง ๊ณ ๋ฏผํ์ต๋๋ค.
- ํ๋กํ ์ฝ์ ์ฌ์ฉํด์ ํด๊ฒฐํ์ต๋๋ค.
์ฝ๋ ๋ณด๊ธฐ
protocol ReusableView: class {
static var defaultReuseIdentifier: String { get }
}
extension ReusableView where Self: UIView {
static var defaultReuseIdentifier: String {
return String(describing: self)
}
}
- CoreData ๋ชจ๋ธ ์ฌ์ฉ
- Factory Method Pattern ํ์ฉ
- Singleton Pattern ์ ์ฉ
- UITableViewDiffableDataSource
- Date Formatter ํ์ฉ
- UIContextualAction
- UISwipeActionsConfiguration
- UIActivityViewController