Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 패스트캠퍼스
- 직장인자기계발
- ios
- 입력 개수 제한
- viewDidLoad
- iOS앱개발올인원패키지Online.
- 스큐어모피즘
- 뉴북
- Xcodebuild
- Git Tutorial
- git
- 패스트캠퍼스후기
- 직장인인강
- 뉴모피즘
- 포인트
- 픽셀
- 마크다운
- .DS_Store
- 머티리얼 디자인
- 아이폰
- 디자인 트렌드
- 플랫디자인
- viewDidAppear
- commit
- 패캠챌린지
- 8 그리드 시스템
- SWIFT
- commit message
- commit messages
- git workflow
Archives
- Today
- Total
왕논의 연구실
[Swift] 모바일 저장소 - Realm 본문
Realm은 모바일에 특화된 데이터베이스입니다. 렘, 렐름 등 읽는 방식이 사람마다 조금씩 다릅니다.
장점
사용하기 전에는
- 다른 회사들이 많이 사용한다.
- 최신 데이터베이스 중 하나로서 공부해 두면 좋을 것 같다.
이런 생각으로 선택했습니다. 사용해보고나서는 괜찮은 장점들이 있었습니다.
- 코드가 직관적입니다.
- DB에서 불러온 객체를 별도의 처리과정없이 바로 다룰 수 있습니다.
- Realm 스튜디오를 통해 데이터베이스 데이터를 직접적으로 볼 수 있습니다.
제가 처음 사용할때는 필요한 데이터타입을 다루지 않는다든지, 옵셔널타입에 대해서 조금 불편하게 작성해야하는 사항이 있었는데, 지금은 업데이트되었습니다.
설치
Swift Package Manager
- File > Add Packages...
- 검색창에 주소 입력 https://github.com/realm/realm-swift.git
CocoaPods
- 팟파일에 pod 'RealmSwift', '~>10' 입력
- 해당 폴더의 커맨드 창에 pod install 입력
모델 정의
Realm 객체 모델은 RealmSwift 라이브러리의 Object에서 파생되어 Realm 데이터베이스에 저장됩니다. 그러므로 Object를 상속하는 class를 만들어줍니다. property는 앞에 @Persisted를 붙여줍니다.
class DogToy: Object {
@Persisted var name = ""
}
class Dog: Object {
@Persisted var name = ""
@Persisted var age = 0
@Persisted var color = ""
@Persisted var currentCity = ""
// 1:1관계
@Persisted var favoriteToy: DogToy?
}
class Person: Object {
@Persisted(primaryKey: true) var id = 0
@Persisted var name = ""
// 1:다 관계 - 사람은 많은 개를 가질 수 있음
@Persisted var dogs: List<Dog>
// 다:1 관계 - 사람은 많은 클럽에 가입되어 있을 수 있음
@Persisted(originProperty: "members") var clubs: LinkingObjects<DogClub>
}
class DogClub: Object {
@Persisted var name = ""
@Persisted var members: List<Person>
}
CRUD
• Create
// 클래스를 인스턴스화합니다. 편의를 위해 적절한 키와 값을 사용하여 사전에서 개체를 초기화할 수 있습니다.
let dog = Dog(value: ["name": "Max", "age": 5])
let realm = try! Realm()
// thread-safe transaction 코드 안에서 작업해야함
try! realm.write {
// realm DB에 저장
realm.add(dog)
}
• Read
let realm = try! Realm()
// realm에 있는 모든 Dog 읽기
let dogs = realm.objects(Dog.self)
// age로 필터
let puppies = dogs.where {
$0.age < 2
}
• Update
let realm = try! Realm()
try! realm.write {
let person1 = Person(value: ["id": 1234, "name": "Jones"])
// 영역에 새 사람을 추가합니다. ID가 1234인 사람이 아직 추가되지 않았으므로 인스턴스가 영역에 추가됩니다.
realm.add(person1, update: .modified)
let person2 = Person(value: ["id": 1234, "name": "Bowie"])
// 아이디로 보면 동일인물이고 이름만 다를뿐입니다. 'update'의 property별 작동:
// - .modified: 변경된 필드를 업데이트합니다.
// - .all: 변경 여부에 관계없이 모든 필드를 바꿉니다.
// - .error: 동일한 기본 키를 가진 키가 이미 존재하는 경우 예외를 throw합니다.
realm.add(person2, update: .modified)
}
• Delete
let realm = try! Realm()
try! realm.write {
// realm에서 해당 인스턴스 삭제
realm.delete(dog)
}
try! realm.write {
// 2살보다 어린 개
let puppies = realm.objects(Dog.self).where {
$0.age < 2
}
// 해당 collection을 realm에서 삭제
realm.delete(puppies)
}
try! realm.write {
// 모두 삭제
realm.deleteAll()
}
'iOS > Swift' 카테고리의 다른 글
[Swift] 커스텀 폰트 적용 (0) | 2022.06.27 |
---|---|
[Swift] Struct vs Class (0) | 2022.06.18 |
[swift] 디자인 트렌드 적용 (0) | 2022.05.25 |
[Swift]동적 아이콘 변경 (0) | 2021.09.22 |
[Swift]삼항연산자(?), 옵셔널 기본처리(??) (0) | 2021.09.22 |