CoreData

Sunho·2022년 11월 17일
0

ios공부

목록 보기
6/8

코어데이터 : 애플리케이션에서 모델 계층의 객체를 관리하는데 사용하는 프레임워크이자, 라이프사이클이나 영속성 관리를 위한 기능을 제공하는 객체그래프관리자

객체: 독립적이고 자체적인 생명주기를 가지면서 속성과 기능으로 이루어진 단위 구성체
코어데이터는 영구저장소에 저장된 데이터를 읽어서 각각의 객체로 만든다. 그리고 객체 A와 B를 연결할 수 있으며 이 연결을 통해 A,B는 영속적 동기화가 된다. 즉 한쪽에서 객체를 삭제하면 코어데이터가 알아서 B의 관련데이터를 삭제해준다.
이것이 DB와의 차이점!!! DB에서는 외래키로 참조된 테이블이더라도 조인을 해주는 등 데이터 조합과정은 개발자가 구현해야한다. 코어데이터는 알아서 해주는 반면.
그래서 코어데이터는 데이터저장에 관련된 기능을 제공하는 프레임워크라고 생각하면 됨!


구조

  • 관리 객체 : 데이터 저장하기 위해 생성하는 인스턴스.(관계형 데이터에서는 행, 레코드).
    • 레코드를 구성하는 각 칼럼들이 관리 객체의 속성이 된다.
  • 관리 객체 컨택스트 :
    1. 관릭객체를 담거나 생성 삭제할수있는 만능 상자. 데이터를 읽거나 쓰고 수정하는 작업이 모두 컨택스트를 통해 처리된다. 데이터를 메모리에 로드한다? = 컨텍스트에 데이터를 담는다.
    2. 영구저장소및 영구 저장소 코데네이터에 대한 관리자.
  • 영구 저장소 코디네이터 : 컨텍스트와 직접 데이터 주고받으면서 다양한 영구저장소 접근 조정하고 해당 저장소에 대한 실제 입출력 담당.
  • 관리 객체 모델 : 엔티티의 구조를 정의하는 객체인 동시에 이 스키마를 바탕으로 정의된 MO패턴 모델 클래스를 가리킨다.
  • 영구객체저장소 :
    1. 인메모리 저장소 타입(앱 종료 되었을때 데이터 보존 X)그래서 주로 런타임 캐싱에 활용. 속도가 빠르다. 데이터 변경내역을 메모리수준에서 처리후 최종결과만 영구 저장소에 저장해서 I/o적게 발생한다.
    2. 플랫 바이너리 저장소타입(바이너리 파일형식으로 저장).
    3. XML저장소 타입(2와 비슷하지만 XML방식으로 데이터를 변환하여 저장). 항상 전체가 저장되거나 저장되지 않는 원자성. 처리속도가 느리지만 코드를 외부에서 열어보고 해석가능해 프로젝트 초기 디버깅 및 저장여부 확인해야할때 사용.
    4. SQLITE 데이터베이스 : 가장 많이 사용하는 영구저장소 타입.

한계

  1. 코어데이터는 인메모리 방식이여서 메모리에 로딩된 객체에 대해서만 수정이 가능해 객체를 메모리에 먼저 로딩해 둬야 한다. 삭제할때도 마찬가지로 메모리에 로딩해야한다. >> 성능상의 문제점 발생.
  2. 코어데이터에서는 유니크 키에 해당하는 기능이 없어서 중복키 방지하기 위한 로직을 짜줘야 한다.
  3. 싱글쓰레드만 가능하다. 그래서 싱글 유저일때 주로 쓰인다.
profile
앱개발자

0개의 댓글