์ค๋ ์ ๋ฆฌํ ์ฃผ์ ๋ Swift CoreData!!
๊ทธ๋์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ธฐ ์ํด์ UserDefaults์ Realm์ ์ฌ์ฉํด์๋๋ฐ,
์๋ ์ง์์ ๋ฐํ์ผ๋ก ๋น ๋ฅด๊ฒ ๊ฐ๋ฐ์ ํ๊ธฐ ์ํด์ CoreData๋ฅผ ์จ๋ณผ ๊ธฐํ๊ฐ ์์์ต๋๋ค..
๋ฐ์ ๊ณผ์ ๋ ๋๋ฌ๊ณ !
์ด์ ๋ ๋ถ์กฑํ ๊ฐ๋ฐ ์ง์์ ์ฑ์ธ ์๊ฐ์ธ ๊ฒ ๊ฐ์์
๊ณต๋ถํ ๊ฒธ ๋ธ๋ก๊ทธ์ ์ ๋ฆฌํด๋ณด๋ ค๊ณ ํฉ๋๋ค๐
์ฒ์ ๊ณต๋ถํ๋ ๋ด์ฉ์ด๋ผ ๊ณต์๋ฌธ์ ๋จผ์ ์ดํด๋ณผ๊ฒ์.
Core Data | Apple Developer Documentation
Persist or cache data on a single device, or sync data to multiple devices with CloudKit.
developer.apple.com
๋ถ์กฑํ ์์ด์ค๋ ฅ์ด์ง๋ง, ์ฐจ๊ทผ์ฐจ๊ทผ ํด์ํด๋ณผ๊ฒ์. ํธํํ..
(๋ฒ์ญ์ด ํ๋ฆด์๋์์..)
์ฝ๊ธฐ ์ข๊ฒ ๋ฌธ์ ๋ด์ฉ์ ์ข์ธก ์ ๋ ฌ๋ก ํ๊ฒ ์ต๋๋ค :)
Framework
์ฝ์ด๋ฐ์ดํฐ๋ ํ๋ ์์ํฌ๋๋๋ค. (Framework vs Library๋ ์ ๋ฆฌํด๋ด์ผ๊ฒ ๋ค์..)
CoreData
'Persist or cache data on a single device, or sync data to multiple devices with CloudKit.'
๋จ์ผ ์ฅ์น์์ ๋ฐ์ดํฐ๋ฅผ ์ ์ง ํน์ ์บ์ํ๊ฑฐ๋ Cloudkit์ ์ฌ์ฉํ์ฌ ์ฌ๋ฌ ์ฅ์น์ ๋ฐ์ดํฐ๋ฅผ ๋๊ธฐํํฉ๋๋ค.
OverView
'Use Core Data to save your application’s permanent data for offline use, to cache temporary data, and to add undo functionality to your app on a single device.'
์ฝ์ด๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํด์ ์คํ๋ผ์ธ ์ฌ์ฉ์ ์ํด ๋น์ ์ ์ดํ๋ฆฌ์ผ์ด์
์ ์๊ตฌ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ , ์์ ๋ฐ์ดํฐ๋ฅผ ์บ์ํ๊ณ , ๊ทธ๋ฆฌ๊ณ ๋จ์ผ ๊ธฐ๊ธฐ์์ ๋น์ ์ ์ฑ์ ์คํ ์ทจ์ ๊ธฐ๋ฅ์ ์ถ๊ฐํ ์ ์์ต๋๋ค.
'To sync data across multiple devices in a single iCloud account, Core Data automatically mirrors your schema to a CloudKit container.'
ํ๋์ iCloud ๊ณ์ ์ผ๋ก ์ฌ๋ฌ ๊ธฐ๊ธฐ์์ ๋ฐ์ดํฐ๋ฅผ ๋๊ธฐํํ๊ธฐ ์ํด์, ์ฝ์ด๋ฐ์ดํฐ๋ ๋น์ ์ ์คํค๋ง๋ฅผ Cloudkit ์ปจํ
์ด๋์ ์๋์ผ๋ก ๋ฏธ๋ฌ๋งํฉ๋๋ค.
'Through Core Data’s Data Model editor, you define your data’s types and relationships, and generate respective class definitions.'
์ฝ์ด๋ฐ์ดํฐ์ ๋ฐ์ดํฐ ๋ชจ๋ธ ํธ์ง๊ธฐ๋ฅผ ํตํด์, ๋น์ ์ ๋น์ ์ ๋ฐ์ดํฐ ํ์
๊ณผ ๊ด๊ณ๋ฅผ ์ ์ํ๊ณ , ๊ฐ๊ฐ์ ํด๋์ค ์ ์๋ฅผ ์์ฑํฉ๋๋ค.
Core Data can then manage object instances at runtime to provide the following features.
๊ทธ๋ฌ๋ฉด ์ฝ์ด๋ฐ์ดํฐ๋ ๋ฐํ์์ ๊ฐ์ฒด ์ธ์คํด์ค๋ค์ ๊ด๋ฆฌํ์ฌ ๋ค์๊ณผ ๊ฐ์ ๊ธฐ๋ฅ์ ์ ๊ณตํ ์ ์์ต๋๋ค.
โ Persistence
์ง์์ฑ
โก Undo and redo of individual and batched changes
๊ฐ๋ณ ๊ทธ๋ฆฌ๊ณ ์ผ๊ด๋ ๋ณ๊ฒฝ๋ค์ ์คํ ์ทจ์ ๋ฐ ์ฌ์คํ
โข Background data tasks
๋ฐฑ๊ทธ๋ผ์ด๋ ๋ฐ์ดํฐ ์์
โฃ View synchronization
๋ทฐ ๋๊ธฐํ
โค Versioning and migration
๋ฒ์ ๊ด๋ฆฌ์ ๋ง์ด๊ทธ๋ ์ด์
๊ฐ๊ฐ์ ๋ถ๊ฐ ์ค๋ช
๋ค์ด ์๋ค์! '1๋ฒ - ์ง์์ฑ'๋ถํฐ ์ดํด๋ณด๊ฒ ์ต๋๋ค :)
'Core Data abstracts the details of mapping your objects to a store, making it easy to save data from Swift and Objective-C without administering a database directly.'
์ฝ์ด๋ฐ์ดํฐ๋ ๋น์ ์ ์ค๋ธ์ ํธ๋ฅผ ์ ์ฅ์์ ๋งตํํ๋ ์ธ๋ถ์ฌํญ๋ค์ ์ถ์ํํฉ๋๋ค. ๊ทธ๋ ๊ฒ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ง์ ์ ์ผ๋ก ๊ด๋ฆฌ์์ด Swift์ Objective-C์์ ์ฝ๊ฒ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ์ ์๋๋ก ํด์ค๋๋ค.
'2๋ฒ - ๊ฐ๋ณ ๊ทธ๋ฆฌ๊ณ ์ผ๊ด๋ ๋ณ๊ฒฝ๋ค์ ์คํ ์ทจ์ ๋ฐ ์ฌ์คํ'
'Core Data’s undo manager tracks changes and can roll them back individually, in groups, or all at once, making it easy to add undo and redo support to your app.'
์ฝ์ด๋ฐ์ดํฐ์ ์คํ์ทจ์ ๋งค๋์ ๋ ๋ณ๊ฒฝ์ฌํญ์ ์ถ์ ํ๊ณ ๊ฐ๋ณ์ ์ผ๋ก, ๊ทธ๋ฃน, ํน์ ํ ๋ฒ์ ๋ชจ๋ ๋กค๋ฐฑํ ์ ์์ต๋๋ค. ๊ทธ๋ ๊ฒ ๋น์ ์ ์ฑ์ ์คํ ์ทจ์ ๋ฐ ์ฌ์คํ ์ง์์ ์ฝ๊ฒ ์ถ๊ฐํ ์ ์์ต๋๋ค.
'3๋ฒ - ๋ฐฑ๊ทธ๋ผ์ด๋ ๋ฐ์ดํฐ ์์
'
'Perform potentially UI-blocking data tasks, like parsing JSON into objects, in the background. You can then cache or store the results to reduce server roundtrips.'
JSON์ ๊ฐ์ฒด๋ก ํ์ฑํ๋ ๊ฒ๊ณผ ๊ฐ์ด ์ ์ฌ์ ์ผ๋ก UI๋ฅผ ์ฐจ๋จํ๋ ๋ฐ์ดํฐ ์์
์ ๋ฐฑ๊ทธ๋ผ์ด๋์์ ์ํํฉ๋๋ค. ๊ทธ๋ฌ๋ฉด ๋น์ ์ ๊ทธ ๊ฒฐ๊ณผ๋ค์ ์บ์ํ๊ฑฐ๋ ์ ์ฅํ ์ ์๊ณ ์๋ฒ์ ์ค๊ฐ๋ ํ์๋ฅผ ์ค์ผ ์ ์์ต๋๋ค.
'4๋ฒ - ๋ทฐ ๋๊ธฐํ'
'Core Data also helps keep your views and data synchronized by providing data sources for table and collection views.'
์ฝ์ด๋ฐ์ดํฐ๋ ๋ํ ํ
์ด๋ธ ๋ทฐ์ ์ปฌ๋ ์
๋ทฐ์ ๋ํ ๋ฐ์ดํฐ ์์ค๋ฅผ ์ ๊ณตํ์ฌ ๋น์ ์ ๋ทฐ๋ค๊ณผ ๋ฐ์ดํฐ ๋๊ธฐํ๋ฅผ ์ ์งํ๋ ๊ฒ์ ๋์์ค๋๋ค.
'5๋ฒ - ๋ฒ์ ๊ด๋ฆฌ ๋ฐ ๋ง์ด๊ทธ๋ ์ด์
'
'Core Data includes mechanisms for versioning your data model and migrating user data as your app evolves.'
์ฝ์ด๋ฐ์ดํฐ๋ ๋น์ ์ ์ฑ์ด ๋ฐ์ ํจ์ ๋ฐ๋ผ ๋ฐ์ดํฐ ๋ชจ๋ธ์ ๋ฒ์ ๊ด๋ฆฌํ๊ณ , ์ฌ์ฉ์ ๋ฐ์ดํฐ๋ฅผ ๋ง์ด๊ทธ๋ ์ด์
ํ๋ ๋ฉ์ปค๋์ฆ์ด ํฌํจ๋์ด ์์ต๋๋ค.
์ฌ๊ธฐ๊น์ง๊ฐ ๊ณต์๋ฌธ์ ๋ด์ฉ์
๋๋ค.
์ฝ์ด๋ฐ์ดํฐ๋ iOS ์ฑ์์ ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ๊ณ ์๊ตฌ์ ์ผ๋ก ์ ์ฅํ๋๋ฐ ์ฌ์ฉ๋๋ ํ๋ ์์ํฌ์๊ตฐ์.
๋ณ๋์ ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ง ์๊ณ , ๋ฐ์ดํฐ ๊ด๋ฆฌ๋ฅผ ํ๊ณ ์ถ๋ค๋ฉด ์ฝ์ด๋ฐ์ดํฐ๋ฅผ ์ ํํ ์ ์๊ฒ ๋ค์!
์ฝ์ด๋ฐ์ดํฐ๋ DB์ด๋ค ์๋๋ค.. ๋ธ๋ก๊ทธ๊ธ์ด ์ ๋ง ๋ค์ํ๋ฐ,
DB๊ฐ ์๋๋ผ๊ณ ํฉ๋๋ค.
์ฝ์ด๋ฐ์ดํฐ๋ก ๋ฐ์ดํฐ๋ฅผ ์๊ตฌ ์ ์ฅ์์ ์ ์ฅํ ์ ์๊ณ , ์กฐ๊ฑด์ ๋ฐ๋ฅธ ๊ฒ์ ํน์ ์ ๋ ฌ ๋ฑ
๊ธฐ์กด ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ค๊ณผ ์ ์ฌํ ์์
์ ์ํํ ์ ์๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ ํ๋ ์์ํฌ๋ผ๊ณ ํ๋ค์!
ํ๋ก์ ํธ ์์ฑ ์ ์ฒดํฌํ๋ ๊ฒ, ํ๋ก์ ํธ ์ค๊ฐ์ ์ถ๊ฐํ๋ ๋ฐฉ๋ฒ, AppDelegate ์์ ,
Entity ๋ง๋ค๊ธฐ, Attribute ์ถ๊ฐํ๊ธฐ, ๋ชจ๋ธ๊ณผ ์ ์ฅ์ ์ฐ๊ฒฐํ๊ธฐ ๋ฑ..
์ฝ์ด๋ฐ์ดํฐ๋ฅผ ์ด๋ป๊ฒ ์ฌ์ฉํ๋์ง์ ๋ํ ๊ธ์ ์ถํ์ ์ข ๋ ๊ณต๋ถํด๋ณด๊ณ ์ ๋ฆฌํด๋ณด๋ ค๊ณ ํฉ๋๋ค :)
'Swift' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Swift] ํ๋กํผํฐ(Property) โก - ํ์ (0) | 2024.06.04 |
---|---|
[Swift] AutomaticDimension (0) | 2024.06.03 |
[Swift] ํ๋กํผํฐ(Property) โ - ์ ์ฅ, ์ฐ์ฐ (0) | 2024.05.28 |
[Swift] for-in ๊ณผ forEach (0) | 2024.05.21 |
Swift ์ธ์ด๋? (0) | 2024.02.19 |