본문 바로가기
프로그래밍 놀이터/iOS

[ios/tutorial] Core Data - Creating a Managed Object Model

by 돼지왕 왕돼지 2017. 11. 2.
반응형

 [ios/tutorial] Core Data - Creating a Managed Object Model


https://developer.apple.com/library/watchos/documentation/Cocoa/Conceptual/CoreData/KeyConcepts.html#//apple_ref/doc/uid/TP40001075-CH30-SW1

.xcdatamodeld, Abstract, abstract entity, attribute, core data, core data tutorial, Creating an Entity and Its Properties, data model, Entity, entityname, fetched property, Framework, managed object model, many-to-many, mapping, mo, model layer, new file, NSManagedObject, NSManagedObjectModel, nsobject, one-way, optional attribute, persistent store, prefix, propert, property name 중복, Relation, relationship, schema, SQLite, sub class, sub entity, suffix, Super Class, table, to-many, to-one, transient attribute, UI, undo, weak, [ios/tutorial] Core Data - Creating a Managed Object Model, 상속, 중복, 확장자


-

model layer 를 관리하는 framework를 core data 라고 부른다.

많은 것을 자동화시켜서 제공한다.



-

Core data 의 schema 는 managed object model 로 mapping 된다. ( NSManagedObjectModel )

이 model 은 소위 table 이라고 부르는 entity 들의 집합이다.




Creating an Entity and Its Properties


-

New File -> Core Data -> Data Model

이것으로 생성된 파일의 확장자는 .xcdatamodeld 이다.



-

.xcdatamodeld 를 클릭하면 entity, attribute, relation 등을 관리할 수 있는 UI 가 나온다.

이곳에서 설정을 하면 table 을 생성한 것과 같다.



-

entity 이름과 이에 매칭되는 class 이름은 같을 필요가 없다.

entity 에 매핑되는 class 의 추천되는 이름형태는 prefix + EntityName + MO(suffix) 이다.



-

entity 도 상속될 수 있다. 

super class, subclass 와 같다.

단 이 때 모든 entity 는 한 SQLite schema 에 정의되어 있어야 한다.



-

model 에 해당하는 class 를 모두 만들 필요는 없다.

Abstract class 처럼 person 이라는 entity 를 만들고,

Employee 나 Customer 와 같은 sub entity ( concrete class ) 를 intialize 하는 방식으로 사용할 수 있다.


Entity 생성시 abstract 로 만들면, 이 녀석은 절대 직접적으로 instantiate 되지 않는다는 것을 의미한다.



-

property 이름은 NSObject 나 NSManagedObject 에서 사용하는 property name 과 중복되서는 안 된다.

예를 들어 description 같은 것은 사용할 수 없다.



-

transient attribute 는 persistent store 에 저장되지는 않는 녀석이다.

Core data 는 transient property 의 변화를 감지하고, undo 기능을 제공한다.

transient property 는 계산한 값을 사용할 수도 있고, 가져온 값을 임시 저장하는 등 여러가지 용도로 사용할 수 있다.



-

attribute 를 optional 로 설정할 수 있다.

optional 로 설정하면 꼭 value 를 가질 필요가 없다는 것을 의미한다.

하지만 이것은 그다지 추천되지는 않는다. 특히 숫자일 때 그러하다.



-

Core data 는 relation 에 to-one 과 to-many relationship 을 제공한다.

many-to-many 는 서로를 to-many 로 정의하면 된다.


또 fetched property 도 제공한다.

fetched property 는 weak, one-way 를 이야기한다.





반응형

댓글