이번 기술 공유를 통해 만든 키노트입니다.

코어 데이터란 무엇일까요?

코어데이터는 iOS 프레임워크입니다. 프레임 워크는 객체 생명주기와 객체 그래프관리에 관련된 솔루션을 제공합니다. 우리가 데이터베이스처럼 사용할 Persistence 객체 그래프 관리에 포함이 됩니다.

객체그래프 관리 내용 추가(https://velog.io/@ssionii/Core-Data%EC%97%90-%EB%8C%80%ED%95%B4-%EC%95%84%EB%9D%BC%EB%B3%B4%EC%9E%90-1-%EA%B8%B0%EB%B3%B8-%EA%B0%9C%EB%85%90)

코어 데이터로 있는 기능들입니다. 하지만, 대부분의 아카데미 러너들이 그랬듯이, 이번 키노트에서는 Persistence 사용한 데이터 저장, 읽기, 수정, 삭제에 대해서만 다룰 예정입니다.

코어 데이터의 대부분 기능들은 애플리케이션의 Entity, Property, relationship 사이의 관계를 설명하기 위해 생성하는 스키마에 따라 결정됩니다. CoreData NSManagedObjectModel 인스턴스인 관리 객체 모델 (Managed Object Model)이라는 스키마를 사용합니다. 이러한 모델이 많을 수록 CoreData 좋게 앱을 지원해 있습니다.

우선 지금까지 해왔던 것처럼 프로젝트를 생성해줍니다.

그리고 옵션 설정에서 Use CoreData 선택해줍니다.

그러면 평소에 보던 화면이랑 약간 다른 느낌의 창이 뜹니다. ContentView Hello World 사라졌습니다.

디바이스를 iPhone으로 바꿔주면,

이렇게 타임 스탬프가 찍혀져 있고 추가 수정이 가능해 보이는 리스트가 나옵니다.

또한 네비게이션 영역에 프로젝트 이름과 똑같은 xcdatam…파일이 보입니다.

들어가서 보니 xcodeproj 파일이랑 비슷한 느낌으로 구성되어있는 것을 확인할 있습니다.

자동으로 생성되어 있는 item 엔티티와 timestamp Attribute 확인할 있습니다.

엔티티와 어트리뷰트 설명 추가

Entity를 추가하려면 하단의 add entity 누르면 되고, Attribute 추가하려면 하단의 add atribute 혹은 attribute 테이블 안에 있는 + 버튼을 클릭하면 됩니다.

Entity나 Attribute를 삭제하려면 선택한 상태에서 백스페이스버튼을 눌러주면 됩니다.

엔티티를 누르고 인스펙터창을 보면 일단 먼저 이름 설정칸과 Codegen이라는 칸이 있습니다.

Codegen 설명 추가

Attribute를 선택후 인스펙터 창을 보면 이름과 타입이 있습니다. 애플 공식문서(아카이브)에서는 디폴트인 Optional 사용하는 것을 권장합니다. 왜냐하면 값이 0일때, 없을때를 구분해주기 때문입니다. 여기서 옵셔널은 스위프트 문법이 아닌 SQL에서의 문법입니다.

하단의 에디터 스타일을 변경하면 UML 다이어그램으로 관계를 있습니다. 하지만, relationship을 사용하지 않는다면 쓸모는 없을 것입니다.

우리가 앞으로 진행해야할 과정입니다.

구조체를 생성후, 인스턴스를 만들고 저장하는 과정을 거칩니다.(1 - 2과정)

코어데이터에 저장이 되었는지 불러오기를 통해 확인합니다.(3 - 5과정)

그러기 위해서는 우선 코어 데이터 스택이란 것에 대해서 알고가야 합니다.

NSManagedObjectModel 인스턴스는 properties relationships 포함하여 app's types 설명합니다.

Entity 설명하는 DB 스키마라고 합니다.

Managed object Structure 정의합니다.

NSManagedObjectContext 인스턴스는 app's types 인스턴스에 대한 변화를 추적합니다. 객체를 통해서 create, delete, fetch, update 작업을 있습니다. (core data 메모리에 로드된 상태로 처리되는데, 때의 메모리가 context 의미합니다.)

여기서 Context가 Transaction 이라는 설명도 있었습니다.

NSPersistentStoreCoordinator 인스턴스는 store 에서 app's types 인스턴스를 저장하고 가져옵니다. (Context Container 사이를 통신합니다.)

Persistent storage managed object model 연결합니다.

NSPersistentContainer 인스턴스를 사용해서 model, context, store coordinator 동시에 설정합니다. (전체적으로 관리하는 최상단의 객체)

Core Data Stack 나타내는 필요한 모든 객체를 포함한다.

그리고 우리가 사용하기 편하게 위의 데이터 스택들을 관리해주는 PersistenceManager를 만들어 줍니다.

NearCat:ch에 대한 설명은 여기

우리가 DB용으로 사용하는 CoreData를 이 파일에서 전체적으로 다루겠다! 그런 의미로 생각하면 됩니다.

우선 PersistenetContainer는 다음 코드처럼 만들어집니다.

밑의 코드 내용 설명 보강

NSPersistentContainer 키워드를 사용하여 만들어집니다.

데이터베이스에서 기본적으로 해줘야할 CRUD는 다음처럼 구현합니다.

키워드 위주로만 설명이 될텐데 생성을 담당하는 키워드는 save가 있습니다.

불러오기, 읽기를 담당하는 키워드는 fetch입니다.

rollback 키워드를 통해 업데이트 할 수 있습니다.

delete 키워드를 통해 삭제가 가능합니다.

이번 키노트를 만들면서 많이 도움이 되었던 사이트들입니다.

 

 
사전 앱 만들기를 주제로 프로젝트 시작하려고 한다.
 
스케치로 만든 이번 프로젝트의 Hi-fi 프로토타입이다.
 
 

Sketch

Sketch

www.sketch.com

구현해야할 목록은 다음과 같다.

카테고리뷰

1. 서치바

2. 리스트

3. 스크롤뷰

4. 음성인식(?)

딕트뷰

1. 북마크 기능

2. 컨텐츠 작성

그 외

-북마크 추가한 내용을 동시에 북마크뷰 리스트에 추가하기

- 같은뷰의 같은 버튼이 다른 동작을 하도록 ( 딕트 뷰에서 뒤로가기 네비게이션 링크가 넘어갈때, 카테고리뷰에서 시작했으면 카테고리뷰로, 북마크뷰에서 시작했으면 북마크뷰로 넘어가도록) 구현

 

Swift 입문이다. 빠르게 기초를 끝내고 넘어가려고 블로그 정리를 시작한다.

이번 Swift 기초 다지기 포스팅은 부스트코스에 있는 야곰의 'iOS 프로그래밍을 위한 스위프트 기초' 강의를 보면서 배운점 위주로 진행할 예정이다.

이름짓기 규칙

-Lower Camel Case : 소문자로 시작해서 단어의 시작부분을 대문자로 구성한다.

함수, 메서드, 변수, 상수에서  LCC를 사용한다.

ex) eatMintChocolate

-Upper Camel Case: 대문자로 시작한다.

타입 ( 클래스, 구조체, 열거형, 익스텐션 등)

ex) Mint, Chocolate, Toothpaste

스위프트는 대소문자를 구분한다. 

콘솔로그 남기기

- print 함수 : 단순 문자열 출력

- dump 함수 : 인스턴스의 자세한 설명 (description 프로퍼티) 까지 출력

/* 콘솔로그와 문자열 보간법 */
import Swift

let age: Int = 10

"안녕하세요! 저는 \(age)살 입니다"
// == "안녕하세요! 저는 10살 입니다"

"안녕하세요! 저는 \(age+5)살 입니다"
// == "안녕하세요! 저는 15살 입니다"

print("안녕하세요! 저는 \(age+12)살 입니다")

print("\n###########################\n")

class Person{
    var name: String = "mincho"
    var age: Int = 22
}

let mincho: Person = Person()

print(mincho)

print("\n##########################\n")

dump(mincho)

위와 같이 코드를 짜는 경우 다음과 같은 로그가 찍힌다.

안녕하세요! 저는 22살 입니다

###########################

__lldb_expr_5.Person

##########################

▿ __lldb_expr_5.Person #0
  - name: "mincho"
  - age: 22

문자열 보간법(String Interpolation)

- 프로그램 실행 중 문자열 내에 변수 또는 상수의 실질적인 값을 표현하기 위해 사용

c에서 printf의 형식지정자로 %d, %c 썼던것과 비슷한 맥락인듯 하다.

\()

'IOS' 카테고리의 다른 글

SwiftUI Views - Basic Concepts  (0) 2022.04.29
SwiftUI Search Bar / 검색 기능 구현하기  (0) 2022.04.28
SwiftUI에서 리스트 동적으로 사용하기 (1)  (0) 2022.04.28
iOS 개인 프로젝트 시작  (0) 2022.04.28
Xcode 화면 구성  (0) 2022.04.27

+ Recent posts