Notice
Recent Posts
Recent Comments
Link
관리 메뉴

김종권의 iOS 앱 개발 알아가기

[iOS - swift] 12. 코어 데이터(Core Data)의 개념 - (2) 본문

iOS 실전 (swift)/데이터베이스

[iOS - swift] 12. 코어 데이터(Core Data)의 개념 - (2)

jake-kim 2020. 5. 18. 22:31

기초 개념은 다음 링크 참조 : 11. 코어 데이터(Core Data)의 개념 - (1)

 

[iOS - swift] 12. 코어 데이터(Core Data)의 개념 - (1)

* Core Data는 DataBase가 아님 ( Core Data는 ORM 매핑 프레임워크가 맞는 의미, 데이터 저장에 관한 일종의 프레임워크 ) 1. Core Data란? 1) In-Memory 방식 : 사용 하려는 모든 데이터는 우선 메모리에 로딩되..

ios-development.tistory.com

 

1. MO모델을 위한 엔터티 설정

1) 엔터티(데이터 저장 구조) 정의 : 레코드 단위의 데이터를 관리객체(Managed Object)로 만들기 위한 기본 모델 역할 담당

Use Core Data 체크
.xcdatamodeld생성된 것을 확인 

* AppDelegate.swfit에 코드가 추가된것을 확인

AppDelegate.swift에 추가된 import문

 

AppDelegate.swift에 추가된 변수와 함수

* 추가된 핵심 코드

 (1) 추가된 xcdatamodeld파일을 코어 데이터 시스템에 등록, NSPersistentContent객체 생성하는 역할

  ※ 프로젝트 이름이 변경된다면 이 부분을 수정해야함

let container = NSPersistentContainer(name: "CoreDataTest")

(2) 컨텍스트 객체(데이터를 읽고 쓸 때 필요한 객체)를 참조하는 부분

let context = persistentContainer.viewContext

 

창 하단 탭에서 Add Entity선택 -> 추가된 엔터티 선택 -> 엔터티명 수정

3가지 엔터티가 생성된 상태

2) 어트리뷰트 생성(엔터티의 하위속성들을 정의하는 역할)

앤터티 선택 -> Attributes에서 "+"버튼으로 추가 

 

3) 릴레이션(엔터티끼리의 관계) 기입

데이터를 MO로 만들기 위한 기본 모델 완성

 4) 클래스명 설정

 (엔터티와 클래스의 차이: 엔터티는 데이터 저장 구조를 나타내며, 이것을 통해 "데이터 모델 클래스"정의 )

엔터티 이름이 Employee라면, 클래스 이름을 EmployeeMO라함(접미사 "MO")

 

 5) 엔터티의 상속과 추상 엔터티

 엔터티는 클래스처럼 상속 기능이 존재

Parent Entity속성에서 상속 선택

* 위 그림에서 "Abstract Entity"를 체크한다면 추상 엔터티로 지정 가능

(추상엔터티 : 인스턴스 생성 불가, 단순 상속 용도)

Editor Style에서 관계 파악 가능

2. 어트리뷰트 정의

1) 어트리뷰트 명명 규칙

- 대소문자를 구분하지만 대문자로 시작 불가

 

2) 도메인(Domain) : 특정 속성이 가질 수 있는 값의 범위

Date의 범위 설정 확인

3. 릴레이션 정의

1) 참조방식

 데이터베이스에서의 "조인"은 정규화된 공통 칼럼을 이용하여 양쪽의 테이블을 연결하고 필요한 칼럼을 가져오는 방식이지만,

"릴레이션"은 다른 쪽 엔터티를 직접 참조함으로 해당 데이터를 모두 반입하는 방식

 

* 데이터베이스의 조인("사원"테이블과 "부서"테이블을 사원코드를 통해 조인)

사원명 사원코드 부서명 근무지
김길동 20001 개발팀 301호
이하늘 20007 인사팀 302호

 

* 릴레이션에서의 참조(사원 릴레이션이 부서 엔터티를 참조)

사원명 사원코드 부서
김길동 20001 부서명   근무지
개발팀   301호
이하늘 20007 부서명   근무지
인사팀   302호

 

2) 릴레이션의 데이터 관계

 1 : 1 엔터티 A의 레코드 하나와 엔터티 B의 레코드 하나가 서로 참조하는 형태 

 1 : M 엔터티 A의 레커드 하나와 엔터티 B의 레코드 여러 개가 서로 참조하는 형태 

 M : N 엔터티 A의 레코드 여러 개와 엔터티 B의 레코드 여러 개가 서로 참조하는 형태 (==양쪽 모두 1:M관계)

 

* 릴레이션의 참조는 엔터티를 기준으로 방향성을 갖음

  - 일반참조 : 엔터티 A가 B를 참조

  - 역참조 : 엔터티 B가 A참조

 

ex) 사원 엔터티에서 부서 엔터티로의 참조 = 1:1 (한명의 사원은 한 부서에만 속하므로)

      부서 엔터티에서 사원 엔터티로의 참조 = 1:M(한 부서에는 여러명의 사원이 속할 수 있으므로)

 

데이터 관계 표현 1:1관계

* 1:M 관계를 표현하려면 "To Many"속성으로 변경

 

3) 옵셔널 설정

 - 참조 대상에서 nil이 올 수 있는 대상이 있을 때 체크

4) Inverse항목 설정

 - 두 개의 엔터티가 상호 참조하는 경우 순환 참조의 오류를 방지하기 위해 사용 (위 그림에서 Inverse항목 확인)

   (상대방 릴레이션과 서로 역참조 관계라는 것을 알림)

 

5) Delete Rule

- 참조 대상 엔터티의 레코드가 삭제되었을 경우 이를 참조하고 있는 엔터티의 레코드를 어떻게 할 것인가를 결정

Delete Rule속성

*옵션

Nullify 참조 대상이 삭제되면 nil 값으로 처리하도록 하는 옵션
Cascade 참조 대상이 삭제되면 이를 참조하고 있던 모든 레코드를 같이 삭제
Deny 참조하고 있는 엔터티가 있을 경우 참조 대상을 삭제하지 못하도록 설정

4. 데이터 모델 클래스

1) Codegen속성 선택 : Class Definition(코어 데이터가 자동으로 생성되게끔)

 

2) 생성 : .xcdatamodeled 파일 선택 -> 상단 "Editor"탭 선택 -> "Create NSManagedObject Subclass"선택

단, 우측에서 "Class"의 Name(EmployeeMO)를 먼저 설정

 

cf) CoreData 프로토콜과 in-memory 개념까지 적용한 설계 방법: https://ios-development.tistory.com/236

 

[iOS - swift] CoreData 사용 (protocol 이용, in-memory 개념)

기본개념은 여기 참고 DataModel추가 새로 만들기에서 Data Model추가 완성된 화면 "Add Entity"눌러서 엔터티 추가: 중요한 것은 Data형태의 updateDate를 추가 (이 데이터는 나중에 addData할 때 같은 데이터..

ios-development.tistory.com

 

Comments