(Swift) CoreData로 데이터 저장 및 관리하기

Hanulyun
5 min readFeb 26, 2020
  • Swift 5, Xcode 11.3.1 기준

iOS 앱을 개발할 때 내부에 데이터를 저장하여 활용하는 방법은 여러 개가 있지만, 오픈소스를 활용하지 않는 방법은 대표적으로 2가지가 있죠. UserDefault &CoreData

첫 앱을 개발할 때는 내부에 데이터를 거의 저장할 일이 없어서 자동로그인 정도만 UserDefault 로 활용했었는데, key값이 String 인데다가 일반적인 Model 형식으로 쓰지 않아서 개발하는데 실수가 많았어요. 그래서 CoreData 를 활용하는 방법을 간단히 공유할게요.

Step1. Create CoreData

프로젝트 처음 시작부터 CoreData 를 포함할 수 있지만, 보통의 업무 환경에서는 프로젝트 시작 중 데이터를 생성할 일이 많기 때문에, 우선 프로젝트 생성 이후 추가하는 방법으로 해볼게요.

일단 이렇게 시작해볼게요. 👍

아래와 같이 Data Model 을 추가해요. 저는 Users 라는 이름으로 생성했어요.

Users.xcdatamodeld 를 생성했으면 아래쪽에 있는 Add Entity를 눌러서 Users 라는 Entity를 만들었어요. Entity가 하나의 구성요소, 모델의 역할을 할거예요.

여기서 devices 사용자가 보유하고 있는 애플 Device의 종류로 array 값으로 들어갈건데, 아래 이미지처럼 Custom Class 에 [String] 으로 지정해요.

그리고 id 라는 변수를 추가해서 나중에 삭제하거나, 수정하는 작업을 할 때 해당 model을 불러올 수 있도록 할거예요.

Step2. Create Model

CoreData 로 데이터를 관리하는 방법은 2가지가 있는데 가장 간단한 방법으로는

var models: [NSManagedObject] = [NSManagedObject]()let name: String = models.first?.value(forKey: "name") as? String

이렇게 각 값을 불러와서 사용할 수 있어요. 그런데 이렇게 사용하면 name, age 와 같은 값의 타입이 무엇인지 기억해야하고, 항목이 많아질수록 복잡해 지겠죠? 그래서 model 파일을 생성해서 사용할거예요.

엄청난 삽질을 하게 만든 옵션..

그 전에, Codegen 부분을 Manual/None 으로 변경할게요. Class Definition으로 선택되어 있으면 SubClass를 삭제하더라도 눈에는 안보이지만 계속 남아있어요. 그래서 나중에 파일이 꼬일 수 있더라구요. 😞

이렇게 Create NSManagedObject Subclass 를 누르면 자동으로 Subclass가 생성됩니다.

이제 평소에 구조체나 클래스로 모델을 만들어 사용한 것처럼 사용할 준비가 되었어요.

Step3. CoreData Code Setting

우선 AppDelegate로 갈게요. 모든 코드는 제일 아래 GitHub 주소로 가면 다운받을 수 있어요. CoreData 예제를 찾아보면 AppDelegate 에서 설정하는 부분을 따로 설명하지 않는 글이 많아서 이 부분을 모르면 이후 작업을 할 수 없어요. 😫

저는 공통 코드는 Manager로 만들어 사용하는걸 선호하기 때문에 CoreDataManager.Swift 파일을 만들어 주었어요.

자세한 Code는 GitHub으로 👉

CoreDataManager 에 get, save, delete 함수를 만든 후 잘 들어가고, 잘 받는지 로그를 찍어볼게요.

Danny의 Device가 부럽네요. 👀

Conclusion

이번 예제는 코드가 길어서 글에 다 입력하지 못한 관계로, 급 마무리를 하게 되었어요. 이 코드를 실제 프로젝트에 활용하려면,

1. id는 User List 를 불러온 후 마지막 index + 1 로 자동 입력되게 한다.
2. User를 등록, 삭제뿐만 아니라 값을 일부 수정하려면, delete 하는 코드와 save 하는 코드를 잘 mix 하면 된다. 테스트 하다 보면 감이 잡힐듯..😋

CoreData 를 사용하는 방법을 엄청 간단하게 소개했지만, 기본만 알고 있으면 간단한 유틸리티 앱 정도는 충분히 만들 수 있을 것 같아요.

RelationShips 와 같이 더 심화된 기능도 있어서 CoreData 는 꾸준히 공부하고 공유할거예요. 구글 광고를 달 수 있는 유틸리티 앱을 제작할 때까지 파이팅 👏

GitHub: https://github.com/hanulyun/CoreDataDemo

--

--

Hanulyun

iOS 주니어 개발자입니다. 개발하면서 막히는 부분을 해결한 후 기록으로 남깁니다. #Swift