앱의 콘텐츠나 데이터 자체를 저장/보관하는 특별한 객체를 무엇이라고 하는가?

seuhong·2024년 1월 18일
0

iOS interview Question

목록 보기
3/11
post-thumbnail

Swift에서는 UserDefault라는 앱의 컨텐츠나 데이터를 저장하거나 보관할 수 있는 싱글톤 객체가 존재함.

UserDefaults는 [key : value] 형태로 데이터를 저장하고 사용할 수 있는 저장소임.

사용자 기본 설정과 같은 단일 데이터와 및 소규모 데이터의 저장에 적합하고,

Codable을 채택하고 있기 때문에 UserDefaults를 사용할 struct는 Codable 프로토콜을 준수해야함.
(대규모라면 Realm, SQLite, Core Data)

런타임 환경에서 동작하는 객체이기 때문에 앱이 실행되는 동안에만 저장소에 접근하여 read, write가 가능하며
이때 읽을 데이터가 없는 경우 nil을 반환함.

하나의 기본저장소에 데이터를 읽고 쓰기 때문에 UserDefaults.standard에 여러 객체가 동시에 접근하여 데이터의 무결성이 보장되지 않는다 생각할 수 있지만 UserDefaults는 Thread-safe하기 때문에 한 스레드가 접근하고 있을경우 다른 스레드의 접근을 막아주어 데이터가 오류로 인해 유실되거나 잘못 변경되는 것을 막아줌.

이외에 iOS에서 UserDefaults 이외에 컨텐츠나 데이터를 보관하는 객체를 관리하는 데이터베이스 프레임워크 또는 객체 그래프 관리 방법에는 CoreData, Realm, SQLite3, SwiftUI의 AppStorage, SwiftData 등이 존재함.

UserDefaults

  • 애플에서 기본 제공됨
  • key-value 쌍으로 저장하는 데이터베이스
  • 런타임 환경에서만 동작하며 앱이 실행되는 동안 기본 저장소에 접근해 데이터를 기록하고 가져오는 역할을 함
  • 대용량의 데이터보다 단일 데이터(ex. 사용자의 기본설정, 로그인여부) 등을 저장하는데 적합함
  • 싱글톤 패턴으로 설계되어 앱 전체에 단 하나의 인스턴스만 존재한다.

CoreData

  • 애플에서 기본 제공됨
  • UserDefaults와 비교하여 좀 더 방대하고 복잡한 데이터를 저장하는데 적합함
  • Data Model을 생성한 후 Entity를 생성한다.

SQLite

  • 애플에서 기본 제공되는것이 아니라 외부 라이브러리임. 비교적 가벼운 데이터 처리가 필요할 때 적합함
  • CoreData는 프레임워크이지만 SQLite는 데이터베이스임
  • C언어로 작성되어 있기 때문에 매우 가벼움
  • 전체 데이터베이스를 디스크 파일 1개에 저장하고, 설정 자체가 매우 간편하기에 관리가 수월함
  • iOS, Android, Linux, Window 등과 같이 다양한 운영체제에 사용됨

Realm

  • 빠른 속도이지만 용량이 큼
  • 설치가 쉽고 대용량의 데이터에 대해 무료로 사용 가능
  • 용량에 관계없이 속도와 성능이 유지됨
  • 코드가 짧고 간결함
  • 메인스레드에서 데이터의 읽기, 쓰기 작업이 가능함

속도

: Realm > CoreData > SQLite

메모리 및 저장공간 사용

: Realm > CoreData > SQLite


++ WWDC23에서 SwiftData추가

SwiftData의 개념

  • iOS 17+에서 제공
  • Swift macro가 제공하는 표현식을 제공
  • @Model 키워드로 사용
  • SwiftData는 즉시 사용할 수 있도록 기본적인 value type 프로퍼티를 기본적으로 포함함
    • 기본타입(String, Int, Double, …)
    • Collection 타입 (Array, Set, Dictionary)
    • 기타 (Struct, Codable)
  • SwiftData 모델은 타입을 관계로 참조함
    • 모델 유형 간에 link를 만들 수 있음
  • 참고 : https://ios-development.tistory.com/1403 (김종권의 iOS)
profile
완씨의 개발기록

0개의 댓글