์๋ ํ์ธ์, ๊ฐ์์ ๋๋ค. ์ด๋ฒ์ ์๋ก์ด ํ๋ก์ ํธ๋ฅผ ์งํํ๋ฉด์ Core Data๋ฅผ ์จ๋ณด๋ ค๊ณ ํ๋๋ฐ์, ๊ทธ ์ ์ core data๊ฐ ๋ญ์ง๋ถํฐ ์ดํดํ๊ณ ๋์ด๊ฐ๋ณด๋ ค๊ณ ํฉ๋๋ค! ํ์๋ค ๋ชจ๋๊ฐ core data ์ ์ต์ํ์ง ์์์ ์ด๋ ค์ด ๊ธธ์ด๊ฒ ์ง๋ง,, ์ต์ ์ ๋คํด์,, ์ด์ฐ์ ์ฐ ๊ตฌํ์ ํด๋ณด๋๊ฒ ๋ชฉํ์ ๋๋ค. ํํ ๊ทธ๋ผ start - !
๐ป Core Data๋?
๊ฐ๋ตํ๊ฒ ๋งํด์, Core Data๋ macOS ๋ฐ iOS ์ด์ ์ฒด์ ์์ Apple์ด ์ ๊ณตํ๋ ๊ฐ์ฒด ๊ทธ๋ํ ๋ฐ ์ง์์ฑ ํ๋ ์์ํฌ์ ๋๋ค. ๊ตฌ์ฒด์ ์ธ ์ค๋ช ์ ์๋ ๊ณต์ ๋ฌธ์์์ ํ์ธํด๋ณผ ์ ์๋๋ฐ์,
https://developer.apple.com/documentation/coredata
์ ํ์์๋ ์๋์ ๊ฐ์ด core data๋ฅผ ์ค๋ช ํ๋ค๊ณ ํฉ๋๋ค.
Core Data is a framework that you use to manage the model layer objects in your application. It provides generalized and automated solutions to common tasks associated with object life cycle and object graph management, including persistence.
โถ Core Data๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ชจ๋ธ ๊ณ์ธต์ ๊ฐ์ฒด๋ฅผ ๊ด๋ฆฌํ๊ธฐ ์ํ ํ๋ ์์ํฌ์ ๋๋ค. ์ด ํ๋ ์์ํฌ๋ ๊ฐ์ฒด์ ์์ ๊ธฐ๋ฅ์ ํฌํจํ ๊ฐ์ฒด ์๋ช ์ฃผ๊ธฐ ๋ฐ ๊ฐ์ฒด ๊ด๊ณ๋ ๊ด๋ฆฌ ์์ ์ ๋ํ ์ผ๋ฐ์ ์ด๊ณ ์๋ํ ๋ ๋ฐฉ๋ฒ์ ์ ์ํฉ๋๋ค.
๐๐ป Core Data๋ DataBase ์ธ๊ฐ?
์์์ ์ค๋ช ํ๋ฏ, Core data๋ 'ํ๋ ์์ํฌ' ์ ๋๋ค. Core data๋ DB๋ ์๋๊ณ , ๋ฐ์ดํฐ๋ฅผ ์ ์งํ๊ธฐ ์ํ API๊ฐ๋ ๋ ์๋๋๋ค. ์ฑ์ ๋ชจ๋ธ ๊ณ์ธต์ด๋ฉฐ, ๊ฐ์ฒด ๊ทธ๋ํ๋ฅผ ๊ด๋ฆฌํ๋ ํ๋ ์์ํฌ๋ผ๊ณ ์๊ฐํ๋ฉด ๋ฉ๋๋ค. ๊ฐ์ฒด ๊ทธ๋ํ๋ฅผ ๋์คํฌ์ ์ ์ฅํด์ Persistence ๊ธฐ๋ฅ์ ์ด์ฉํ๋ ๊ฒ์ด๋๊น์! (persistence ๋ ๋ค์์ ์ค๋ช )
์๋ฌดํผ Core data๋ DB๊ฐ ์๋๋ผ๊ณ ํฉ๋๋ค.,,
๐ป Core data์ ๊ธฐ๋ฅ
(๊ณต์๋ฌธ์ ๋ฒ์ญ) Core Data๋ฅผ ์ฌ์ฉํ์ฌ ์คํ๋ผ์ธ ์ฌ์ฉ์ ์ํด ์ ํ๋ฆฌ์ผ์ด์ ์ ์๊ตฌ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ , ์์ ๋ฐ์ดํฐ๋ฅผ ์บ์ํ๊ณ , ๋จ์ผ ์ฅ์น์์ ์ฑ์ ์คํ ์ทจ์ ๊ธฐ๋ฅ์ ์ถ๊ฐํฉ๋๋ค. ๋จ์ผ iCloud ๊ณ์ ์ ์ฌ๋ฌ ๊ธฐ๊ธฐ์์ ๋ฐ์ดํฐ๋ฅผ ๋๊ธฐํํ๊ธฐ ์ํด Core Data๋ ์คํค๋ง๋ฅผ CloudKit ์ปจํ ์ด๋์ ์๋์ผ๋ก ๋ฏธ๋ฌ๋งํฉ๋๋ค.
Core Data์ ๋ฐ์ดํฐ ๋ชจ๋ธ ํธ์ง๊ธฐ๋ฅผ ํตํด ๋ฐ์ดํฐ์ ์ ํ๊ณผ ๊ด๊ณ๋ฅผ ์ ์ํ๊ณ ๊ฐ๊ฐ์ ํด๋์ค ์ ์๋ฅผ ์์ฑํฉ๋๋ค. ๊ทธ๋ฌ๋ฉด Core Data๋ ๋ฐํ์์ ๊ฐ์ฒด ์ธ์คํด์ค๋ฅผ ๊ด๋ฆฌํ์ฌ ๋ค์ ๊ธฐ๋ฅ์ ์ ๊ณตํ ์ ์์ต๋๋ค.
1. Persistence - ์ ์ฅ๊ธฐ๋ฅ? ์ด๋ผ๊ณ ์๊ฐํ๋ฉด ํธํ ๋ฏ ํฉ๋๋ค,,
Core data๋ ๊ฐ์ฒด๋ฅผ ์ ์ฅ์์ ๋งคํํ๋ ์ธ๋ถ ์ ๋ณด๋ฅผ ์ถ์ํํ์ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅด ์ง์ ๊ด๋ฆฌํ์ง ์๊ณ ๋ swift์์ ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ฒ ์ ์ฅํ ์ ์๊ฒ ํฉ๋๋ค.
2. ๋ฐ์ดํฐ ๋ณํ๋ฅผ ์ถ์ ํด์ ๋๋๋ฆฌ๊ธฐ(Undo), ์ฌ์คํ(Redo) ๋ฑ์ ์ ์ฉํ ์ ์์
Core Data๋ ๋ณ๊ฒฝ์ฌํญ์ ์ถ์ ํด์ ๊ฐ๋ณ์ ์ผ๋ก, ๊ทธ๋ฃน์ผ๋ก ๋๋ ํ๋ฒ์ ๋ชจ๋ ๋กค๋ฐฑํ ์ ์์ด์ ์ฑ์ ์คํ ์ทจ์ ๋ฐ ๋ค์ ์คํ์ ์ฝ๊ฒ ๊ตฌํํ ์ ์๋ค.
3. ์ด์ธ์๋
- ๋ฐฑ๊ทธ๋ผ์ด๋ ๋ฐ์ดํฐ ์์
- ๋ฐ์ดํฐ์ ๋ณํ๋ฅผ ์๋์ผ๋ก ์ ํํด์ ๋ชจ๋ธ์ ์ผ๊ด์ฑ ์ ์ง
- ๋ฐ์ดํฐ ์ฒ๋ฆฌ๋ฅผ ์ต์ ํํ์ฌ ์ค๋ฒํค๋๋ฅผ ์ค์ฌ์ฃผ๊ธฐ
- ๋ฐ์ดํฐ ๋ฒ์ ๊ด๋ฆฌ๋ ๋ง์ด๊ทธ๋ ์ด์ ๊ธฐ๋ฅ ์ ๊ณต
์ด๋ฌํ ๊ธฐ๋ฅ๋ค์ ๊ฐ์ง๊ณ ์์ต๋๋ค.
๐ป Core Data Stack
Core Data๋ ๋ค์๊ณผ ๊ฐ์ ์คํ ๊ตฌ์กฐ๋ฅผ ๊ฐ๋๋ค๊ณ ํฉ๋๋ค.
๊ฐ๋ตํ ์ค๋ช ์ ํด๋ณด์๋ฉด,
- Model(NSManagedObjectModel)
- Core Data์์ ๊ด๋ฆฌํ๋ ๊ฐ์ฒด๋ค๊ณผ ๊ทธ ๊ฐ์ฒด๋ค ์ฌ์ด์ ๊ด๊ณ๋ฅผ ํํํ ๋ฐ์ดํฐ๋ชจ๋ธ (๊ฐ์ฒด ๊ทธ๋ํ) ํ์ผ์ ์๋ฏธํ๋ค.
- Store Coordinator(NSPersistenceStoreCoordinator)
- Model์ ์ํด ์ ์๋ ๋ฐ์ดํฐ๋ค์ด ์ค์ ๋ก ์ ์ฅ๋ Persistance store ์ ๊ด๋ฆฌํ๋ ๊ฐ์ฒด์ด๋ค. Persistence store์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๊ณ , ์ ์ฅ๋ ๋ ๋ฐ์ดํฐ๊ฐ ์ฌ๋ฐ๋ฅธ์ง ๊ฒ์ฆํ๋ ์ญํ ๋ํ ์ํํ๋ค.
- Context(NSManagedObjectContext)
- Persistence Store๋ทฐ์ ํด๋นํ๋ ๊ฐ์ฒด์ด๋ค.
- ํด๋น ๊ฐ์ฒด๋ฅผ ํตํด์ ์ํ๋ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๊ณ ์กฐ์ํ๊ณ , ์ํ๋ฉด Persistence store์ ๋ฐ์ํ ์ ์๋ค.
- Persistence Container(NSPersistenceContainer) - iOS 10์ด์
- ์ 3๊ฐ์ ์์๋ฅผ ๊ฐํธํ๊ฒ ์ฌ์ฉํ ์ ์๋๋ก ์ถ์ํ ์์ผ ๋์ ๊ฐ์ฒด์ด๋ค.
- iOS 10 ์ด์ ์๋ ์ 3๊ฐ ์์๋ฅผ ๊ฐ๋ฐ์๊ฐ ์ง์ ์ด๊ธฐํํด์ ์ฌ์ฉํ์ง๋ง, iOS 10 ์ด์๋ถํฐ๋ NSPersistenceContainer ๋ฅผ ์ด์ฉํด์ ๊ฐ๋จํ๊ฒ 3๊ฐ ์์๋ฅผ ํ๊บผ๋ฒ์ ์ด๊ธฐํํ ์ ์๊ฒ ๋๋ค.
๐ References
https://zeddios.tistory.com/987
์ด๋ ๊ฒ ๊ฐ๋ ์ ๋ํด์ ๋ค๋ค๋ดค๋๋ฐ, ์์ง ๋ฌด์จ๋ง์ธ์ง ์ดํด๊ฐ ์๋๋ ๋ถ๋ถ์ด ๋ง์ต๋๋ค. ํ์ง๋ง ์ง์ ๊ตฌํํด๋ณด๊ณ ๋ค์ ์ฝ์ด๋ณด๋ฉด ์ดํด๊ฐ ๋๋ ๋ถ๋ถ์ด ์๊ธฐ๊ฒ ...์ง...!! ๋ค์์๋ entity ์์ฑํ๊ณ , ๊ทธ์ ๊ด๋ จ๋ ์ฉ์ด๋ค๊ณผ ์ด๊ฒ ์ด์ ์ด๋ป๊ฒ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋์ง!!์ ๋ํด์ ์์ธํ ๋ค๋ค๋ณด๋๋ก ํ๊ฒ ์ด๋ค