본문 바로가기

iOS

iOS - CoreData

iOS - CoreData 

 

- Executive Summary 

  • 앱의 데이터를 로컬에 저장하는 기법 중의 하나로 SQL을 이용하지 않고, 내부의 SQLite3를 사용할 수 있으며, 실행 할 때, 메모리에 모든 데이터를 적재해 놓고 사용하는 in MEMORY 방식의 데이터 관리 프레임워크 임.

  • Core Data를 사용하고자 할 때는 애플리케이션 생성 시 use core data 옵션을 체크 

  • 이 옵션을 체크하지 않으면, core data 사용 객체를 직접 만들어서 사용해야 함.  
    Core Data의 주요 용어:

  1. PersistencyContainer : 데이터 저장소의 개념으로 실제로는 SQLite DB를 이용하고, Documents 디렉터리에 .sqlite파일로 존재. 

    2. Data Model : Persistency Container에 데이터를 저장할 수 있도록 타입을 설정하는 파일. 

  • 프로젝트에 .xcdatamodeld라는 파일로 존재. 

  • 위에 파일을 더블클릭을 해서 Data Model Editor를 화면에 출력해서 데이터 모델링을 함.

    1)
    Entity(객체) 

  • 관계형 DB테이블에 해당하는 개념.

        2) Attribute (속성 , 프로그램: property라는 단어를 사용. Column과 유사한 개념.) 

  • Entity의 구성요소로 하나의 항목을 나타내는 개념.

        3) Relation

  • 외래키와 조인에 관련된 개념. 

3. Persistency Container의 생성.

  • 처음 application을 만들 때 use core data옵션을 체크하면 AppDelegate클래스에 persistencyContainer라는 프로퍼티 이름으로 생성하는 코드가 작성되어 있음. 

  • ((UIApplication.shared.appDelegate) as! Appdelegate).persistencyContainer로 사용.

4. ManagedObject Context 

  • 실제 DB작업을 수행해주는 class. 

  • 이 클래스의 인스턴스는 앞에 persistency container의 viewContext라는 프로퍼티에 이미 생성되어 있음. 

  • 이 클래스에 save(), delete(), 등의 메소드가 이미 구현되어 있음. 

 

5. ManagedObject 

  • save나 delete메소드의 매개변수로 사용되는 클래스인데, 이 클래스가 VO(DTO(Data transfer object), Domain) 클래스의 역할을 수행.

 

** 프로그래밍 언어로 DB연동.

  1. 프로그래밍언어가 제공하는 API와 DB 드라이버(패키지)만을 이용해서 사용하는 방식.

  2. SQL을 별도로 작성하고, mapping하는 클래스를 만들어서 파라미터나 결과를 자동으로 매핍해주는 방식 - MyBatis 

  3. SQL없이 매핑하는 클래스를 만들어서 클래스의 instance를 이용해서 DB를 사용하는 방식.

  • ORM(Object Relation Mapping - Hibernate등, Android에서 ContentValue를 이용해서 SQLite연동) 

  • DB설계를 따로 하고 DAO 클래스나 DTO클래스를 개발자가 직접 생성을 해야 함. 

- Apple의 CoreData는 데이터모델링만 하면 DAO, DTO클래스를 자동으로 생성하고 인스턴스까지 자동으로 만들어 줌. 

- SmartPhone 앱 개발시, 앱자체의 효율성을 높이는 것도 중요하지만 얼마나 빨리, 여러 기종에서 사용가능한 것도 중요함. 

- 애플에서는 coredata사용을 권장함.

 

'iOS' 카테고리의 다른 글

iOS - Cocoa Pods  (0) 2020.04.09
iOS - Custom Fonts  (0) 2020.04.01
iOS - ImagePicker (이미지 피커)  (0) 2020.03.27
iOS - Application 배포  (0) 2020.03.26
iOS - URLSession  (0) 2020.03.18