4T2F / ThinkBig2

🌟씽크빅 2팀 스터디 🌟
2 stars 0 forks source link

iOS 앱에서 데이터를 저장하는 방법에는 어떤 것들이 있나요? #4

Open xohxe opened 8 months ago

xohxe commented 8 months ago
xohxe commented 8 months ago

iOS 앱에서 데이터를 저장하는 방법에는 어떤 것들이 있나요?

iOS에는 앱에 데이터를 저장하기 위한 여러가지 방법들이 있다.

각 방법마다 사용하기 좋은 상황들이 다르기 때문에 어떤 데이터를 저장하고 싶냐에 따라 적절한 기술을 선택해야 한다.

1. UserDefaults의 사용 예시와 주의 사항을 설명해주세요.

UserDefaults는 이름 그대로 사용자의 기본 설정을 저장하는 용도로 사용된다.

게시물에 대한 정보처럼 대용량의 데이터를 저장하기에는 부적합하고 자동 로그인 여부, 유저가 언제 마지막으로 접속 했는지, 마지막으로 본 글이 무엇인지, 라이트 다크모드 중 선호하는 테마는 무엇인지 등 환경설정 을 담당하는 단일 데이터를 저장할 때에 적합하다.

코드의 예시를 간단히 알아보자.

1-1. set: 데이터 저장

let userName = "김소혜"
UserDefaults.standard.set(userName, forKey: "name")

1-2. get: 데이터 가져오기

UserDefaults.standard.string(forKey: "name") 

1-3. remove: 데이터 삭제

UserDefaults.standard.removeObject(forKey: "name")

1-4.  전체 UserDefault 객체 목록 조회

for (key, value) in UserDefaults.standard.dictionaryRepresentation() {
  print("\(key) = \(value) \n")
}

2. Keychain은 어떤 데이터를 저장하는 데 적합한가요?

Keychain은 비밀번호, 신용카드정보, API 키, 사용자 자격 증명과 같은 소량의 민감한 데이터를 안전하게 저장하는데 적합하다.

UserDefaults는 info.plist에 데이터가 저장되기에 앱이 삭제되면 정보도 삭제되지만, Keychain 데이터는 암호화되어 앱을 삭제하거나 다시 설치해도 유지된다.

3. Core Data와 SQLite의 차이점은 무엇인가요?

SQLite는 전세계적으로 많이 사용되는 오픈소스 기반 데이터 베이스(DB)이다. 안드로이드와 iOS 개발을 동시에 한다면, 양쪽에서 사용할 수 있어 공유가능하며 가장 많이 사용되기에 레퍼런스도 많은 장점이 있다.

CoreData는 iOS에서 지원하는 관계형 데이터베이스 라이브러리로 객체 형식으로 저장관리할 때 편리하다. SQLite대비 속도가 빠르며, 네이티브용 Widget을 개발하거나 @FetchRequest 라는 프로퍼티 래퍼를 사용해서 편하게 쓸 수 있다.

두 차이를 간단히 비교하자면, Core Data가 SQLite보다 더 빠르게 기록을 가져올 수 있지만 더 많은 메모리와 저장 공간을 사용한다.

kmh5038 commented 8 months ago

userDefaults와 appStorage의 차이점이 뭔가요?

Phangg commented 8 months ago

SwiftData 는 CoreData 나, SQLite 와 비교하면 속도나 메모리 / 저장공간 사용에서 어떤 성능을 보이는지 궁금합니다..

Hminchae commented 8 months ago

저는 파도를 구현할 때 캐시삭제의 경우 filemanager를 통해 캐시를 삭제했었는데 캐시데이터의 경우 filemanager에만 저장이 되는지 궁금합니다..

xohxe commented 7 months ago

userDefaults와 appStorage의 차이점이 뭔가요?

UserDefaults 와 AppStorage의 차이

Swift에서 UserDefaultsAppStorage는 데이터를 저장하고 읽는 데 사용되는데 이 두 가지 방식의 차이점을 알아보자.

UserDefaults

    @State private var count = UserDefaults.standard.integer(forKey: "cliked")

AppStorage

import SwiftUI

struct ContentView: View {
    @AppStorage("cliked") private var count = 0

    var body: some View {
        VStack {
            Text("clicked count: \(count)")
            Button("click") {
                count += 1
            }
        }
    }
}

정리하자면...

각각의 사용 환경과 목적에 따라 선택할 수 있으며, SwiftUI를 사용하는 경우 AppStorage가 더 편리하고 선언적인 접근 방식을 제공한다.