ToDo
✅ 조금은 부지런해진 나
✅ 감사해 🙏

 

매일 나태해 지는 나를 어떡하면 조금 부지런하게 살아갈수 있을지를 고민하던중

공부하는 환경을 바꾸기로 했습니다..하하 

바로 스터디 카페에 출첵을 하는것이죠!

이제 시간도 정해서 매일 오는 것으로 합시다 하하.하..ㅎ..ㅇ..

 

배운점

강의를 들으며 AppDelegate에 있는 코드를 뜯어보고있었습니다.
눈에 안들어오는 document까지,,

//SQLite DB
lazy var persistentContainer: NSPersistentContainer = {

    let container = NSPersistentContainer(name: "DataModel")
    container.loadPersistentStores(completionHandler: { (storeDescription, error) in
        if let error = error as NSError? {

            fatalError("Unresolved error \(error), \(error.userInfo)")
        }
    })
    return container
}()

// MARK: - Core Data Saving support

func saveContext () {
    //context는 git의 스테이징area와 바슷
    let context = persistentContainer.viewContext
    if context.hasChanges {
        do {
            try context.save()
        } catch {

            let nserror = error as NSError
            fatalError("Unresolved error \(nserror), \(nserror.userInfo)")
        }
    }
}

 

 

1. persistentContainer 변수.

- NSPersistentContainer는 데이터 모델과 저장소를 관리합니다.

- lazy var로 선언되며 처음 접근할때만 초기화됩니다.

- loadPersistentStores를 호출하여 데이터모델을 로드하고 영구 저장소를 설정합니다.

 

2. saveContext 함수

- saveContext함수는 데이터 변경을 저장소에 반영하는 역할을 합니다.

- viewContext는 github의 스테이징 영역과 유사한 개념으로 데이터를 변경하고 업데이트 할 수 있는 영역이다.

- context.hasChanges를 통해 현제 컨텍스트에 변경 사항이 있는지 확인하고, 변경사항이 있을경우

context.save()를 호출하여 저장소에 변경을 저장합니다.

 

 

 

CoreData CRUD

let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext

context를 AppDelegate의 persistentContainer로 부터 가져와서 사용한다.

 

- Create

let newItem = Item(context: self.context)
newItem.title = textField.text!
newItem.done = false
newItem.parentCategory = self.selectedCategory //Item과 Category의 정보저장
self.itemArray.append(newItem)

self.saveItems()

 

새로운 Item 객체를 생성합니다.

이 객체가 데이터에 할당된 후에 context.save()를 통해 CoreData에 저장됩니다.

 

-Read

    func loadItems(with request: NSFetchRequest<Item> = Item.fetchRequest(), predicate: NSPredicate? = nil) {
        do {
            itemArray = try context.fetch(request)
        } catch {
            print("Error fetching data from context \(error)")
        }
    }

loadItems메서드는 CoreData에서 데이터를 가져와 itemArray에 할당합니다.

NSPredicate를 통해 득정 조건에 따라 데이터를 필텉링합니다.

 

-Update

//MARK: - TableView Delegate Method
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

    itemArray[indexPath.row].done = !itemArray[indexPath.row].done

    //DB에 저장
    saveItems()
}

func saveItems() {

    do {
        try context.save()
    } catch {
        print("Error saving context \(error)")
    }

    DispatchQueue.main.async {
        self.tableView.reloadData()
    }
}

itemArray[indexPath.row].done = !itemArray[indexPath.row].done
으로 변경이 된다.

context.save()로 변경사항을 DB에 저장한다.

 

-Delete

//context delete부터 먼저 제거해야함!
context.delete(itemArray[indexPath.row])
itemArray.remove(at: indexPath.row)

삭제시에는 context.delete에 삭제될 객체를 넣어주어야 context에 삭제사항이 반영된다.

context에 삭제사항을 반영하고 객체를 삭제하는 순서로 이루어져야함!

 

 

 

 

 

 

https://inuplace.tistory.com/1005

 

[CoreData] 기초개념 (1): Entity, CRUD

CoreData란? Apple에서 제공하는 데이터관리 프레임워크로, 데이터를 유지 및 캐싱할 수 있을 뿐 아니라 Cloudkit을 사용해 여러 장치에 데이터를 동기화하는 것도 가능하다. 내부적으로 SQLite를 사용

inuplace.tistory.com

https://80000coding.oopy.io/72aca705-64d9-4be6-aaf5-34c1def4223a

 

(Swift) 코어 데이터 이해하기

"아래 모든 내용은 애플 공식 문서를 참고하여 정리 및 구현한 내용입니다."

80000coding.oopy.io

생각과 감정

오늘까지 졸업유예기간이다.. 유예는 하지 않겠다,,, wOO yEaH~,,,,

 

'TIL' 카테고리의 다른 글

TIL-Vapor 맛보기  (1) 2025.01.16
TIL_20241009 Rx를 곁들인..  (0) 2024.10.09
TIL_20240116 iOS에서 데이터를 저장하는 방법  (0) 2024.01.16
TIL_20240110 Swift_AppSandbox, NSCoder  (0) 2024.01.10
TIL_20240109 Swift_SingletonPattern  (0) 2024.01.09

ToDo
✅ 운동
✅ 취지직...준비 
✅ 공부

 

글을 쓴지 조금 지났군요 하하 ^_^ 갑작스레 잡힌 면접을 준비하느라 공부는 살짝 미뤄뒀습니다.

솔루션 회사에 면접을 보고왔습니다만,, 여러 느낌은 제껴두고 면접관님에게 감사한 느낌이 듭니다. 

물론 합불을 떠나서 개발자로써 좋은 조언들을 해주시고 분위기도 편안하게 해주셔서 너무 감사드려요 ^_^/

하지만 저는 손에 땀이 너무 많이나더군요 하하.. 긴장했는지 발을 살짝 떨었는데 들킨거같은 느낌ㅋ

 

하튼~ 취준을 할때마다 느끼는 거지만 생각을 하면 할수록 머리가 복잡해집니다..~~

그래서 이제부터 스터디 카페에서 공부를 하려구요..ㅎ

타자를 좀 우다다다 치고싶지만 다른 공부하시는 분들을 위해 살살 누르는중..ㅋ

 

마저못한 CoreData와 데이터를 저장하는 방법들을 후다닥 알아봅시다~

 

배운점

UserDefaults

- 정보를 저장하고 검색하는 가장 일반적이고 편안한 방법

- 사용자 기본설정인 작은 정보 (ex. dark or ligh mode, volume크기(소리) 등) 를 저장할때 사용.

- 일반적으로 앱에 설정 화면이 있는 경우 UserDefaults가 적합

- 이는 Key-Value 로 property plist 또는 plist로서 disk에 저장된다.

- AppData > Library > Preferences 안에 plist 파일이 있는데 이게 표준 UserDefaults의 database 파일

 

Keychain

- 이는 disk에 있는 특수한 파일

- 암호화하고 보안을 유지해야 하는 작은정보 (ex. 암호, 자격증명, 토큰 등) 를 저장할때 사용

- 모든 것이 Data로 저장되어야 함. 따라서 해당 유형으로 직렬화 할 수 있는 object와 value만 전달해야함.

- 참고로 Keychain Sharing 을 활성화하려면 keychain에 저장한 값을 같은 팀에서 개발한 다른 앱과 공유 가능.

- ( 실제로 앱에서 키체인을 사용하려 한다면 좋은 라이브러리를 검색하여 그 라이브러리가 대신 작업을 해야 시간과 스트레스에 도움이 된다합니다 ^_^ 

 

File Sytem

- 저장해야하는 항목이 UserDefaults, Keychain에 해당하지 않는 경우 파일시스템 사용.

- 컴퓨터의 파일 시스템과 똑같이 작동하며, 경로와 URL을 사용하여 디스크의 리소스를 식별.

- 암호화 해야 하지만 키체인에 저장할 수 없는 대용량 파일의 경우 파일에 쓸 때 적절한 암호화 옵션을 사용하는 것이 좋음.

- 사용자의 진행 상황을 저장하기 위한 파일을 Library 폴더에 만들 수 있음.

- 앱의 파일 시스템은 샌드박스 처리됩니다. (링꾸)

 

언제사용?

- 웹에서 다운로드 한 이미지를 저장해서, 로딩 시간을 단축할 때는 Library/Caches 폴더 사용

- 앱에서 사용자가 콘텐츠를 만들 수 있도록 허용하는 경우 Document 폴더 사용 (ex. 사용자가 내보낼 수 있는 CSV 파일의 위치)

다만 동영상과 사진을 편집하는 경우 CameraRoll이 더 나은 선택.

 

sqlite

- 데이터를 저장하는 장소 이상으로 내부 데이터베이스의 사실상 표준.

- Library 폴더는 일반적으로 SQLite 데이터베이스를 저장하기에 가장 좋은 장소.

- 잘 구조화된 수많은 데이터가 있을때 사용하기 좋음

- 스토리지 기능 외에도 SQL 데이터베이스가 있으면 효율적인 검색이 가능하고 복잡한 쿼리를 작성하여 흥미로운 인사이트를 얻을 수 있음

 

CoreData

- Core Data는 iOS가 제공하는 ORM (Objected - Relational Mapping) 프레임 워크

- 데이터를 저장하고 관리하기 위한 프레임워크 즉 데이터를 조작하는 방법

- CoreData는 해당 기기에 데이터를 저장하므로 오프라인에서도 동작 가능하며,icloud에 데이터 공유 가능.

- SQL을 쓸 일 없이 오롯이 object - oriented 방식으로만 데이터를 다룰 수 있음. 데이터는 Object로 표현되며, 이러한 Object가 관계를 형성하어 Object Graphs를 이루고 이를 관리하는 프레임 워크가 바로 Core Data

- CoreData도 내부적으로는 SQL을 이용하여 데이터를 저장하지만, 개발자는 Xcode에 내장된 데이터 모델 에디터를 통해 데이터의 타입, 관계(Graphical Relationship)를 지정하고 코드로 관련 클래스를 수정할 수 있음.

- 우리는 Context에 의해 관리되는 DataModel을 만듦. 그리고 Context는 데이터 저장 및 검색을 담당하는 StorePresistor와 상호작용함.

- 여러 엔티티와 관계가 있는 복잡한 오브젝트 모델을 추적해야 할 때 좋음

- SQLite보다 더 빠르게 기록을 가져올 수 있지만, 더 많은 메모리와 저장 공간을 사용.

 

 

앞으로의 계획선언

CoreData부분은 더욱 알아봐야 할 것 같습니다. (persistentcontainer, context)등 아직 이해가 덜된것이 많군요

 

https://betterprogramming.pub/5-ways-to-store-user-data-in-your-ios-app-595d61c89667

 

5 Ways To Store User Data in Your iOS App

Choose the right storage based on your requirements

betterprogramming.pub

https://github.com/sujinnaljin/TIL/blob/master/Swift/5%20Ways%20To%20Store%20User%20Data%20in%20Your%20iOS%20App.md

https://80000coding.oopy.io/72aca705-64d9-4be6-aaf5-34c1def4223a

 

'TIL' 카테고리의 다른 글

TIL_20241009 Rx를 곁들인..  (0) 2024.10.09
TIL_20240119 iOS)CoreData로 부숴지기.. CRUD  (0) 2024.01.19
TIL_20240110 Swift_AppSandbox, NSCoder  (0) 2024.01.10
TIL_20240109 Swift_SingletonPattern  (0) 2024.01.09
TIL_20240103  (0) 2024.01.05

+ Recent posts