스위프트에는 디스크에 저장할 수 있는 프레임 워크는 크게 두가지 나누는데 그중 하나라고 생각하면된다.
그리고 UserDefaults는 코어데이터 보다 간랸하게 사용이 가능하나
단점이 있다. 복잡한 로직에는 사용이 불가능하며 보통 키값을 받는 정도에만 사용하는게 좋다고 이야기한다.
클래스나 스트럭트 사용할때는 제이슨을 사용해서 하는 방법이 있긴하나
오류의 원인이 될 수 있으니 내가 만드는 앱의 기준을 잘 보고 둘 중에 어떤걸 사용할지 결정하면 될 것 같다.
그 기준은 키값이나 클래스에 서브클래스 까지 들어가면 UserDefaults 사용하기 힘들지 않을까 생각한다.
간략하게 정의하면
- UserDefaults 또한 디스크에 데이터를 저장할 수 있게 돕는 도구.
- CoreData 보다 사용성이 간단.
- key 와 value 를 이용해서 값을 저장.
- 대량의 데이터를 담는데에는 CoreData 가, 비교적 단순한 데이터를 담는 데에는 UserDefaults 가 적절.
이렇게 보면 될 것 같다.
UserDefaults 의 CRUD
- UserDefaults.standard.set() 메서드를 통해서 Create, Update
- UserDefaults.standard.string(forKey: "") 메서드를 통해서 Read (각 타입에 맞는 메서드사용)
- bool 타입 Read: UserDefaults.standard.bool(forKey: "")
- Int 타입 Read: UserDefaults.standard.integer(forKey: "")
- UserDefaults.standard.removeObject(forKey: "") 메서드를 통해서 Delete
예시로는 이렇게 사용을 한다.
```swift
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// Create
UserDefaults.standard.set("010-1111-2222", forKey: "phoneNumber")
// Read
let phoneNumber = UserDefaults.standard.string(forKey: "phoneNumber")
print("저장된 전화번호: \(phoneNumber)")
// Update
// 같은 키에다가 set 을 하면 됨.
UserDefaults.standard.set("010-6666-7777", forKey: "phoneNumber")
let newPhoneNumber = UserDefaults.standard.string(forKey: "phoneNumber")
print("바뀐 전화번호: \(newPhoneNumber)")
// Delete
UserDefaults.standard.removeObject(forKey: "phoneNumber")
print("전화번호가 남아있는가: \(UserDefaults.standard.string(forKey: "phoneNumber"))")
}
}
```
아까도 말했지만 Int, String 과 같은 원시타입이 아닌 Struct 나 Class 타입을 저장하기 위해서는 json 인코딩 과정이 필요하다.
간단하게 메모지 기능을 만들어 볼 수 있다.
import UIKit
import SnapKit
class ViewController: UIViewController {
private let label: UILabel = {
let label = UILabel()
label.text = "포스트잇"
label.font = .boldSystemFont(ofSize: 30)
label.textColor = .black
return label
}()
private let textView: UITextView = {
let textView = UITextView()
textView.text = UserDefaults.standard.string(forKey: "memo")
textView.layer.cornerRadius = 10
textView.backgroundColor = UIColor(red: 75/255, green: 253/255, blue: 30/355, alpha: 1.0)
textView.font = .boldSystemFont(ofSize: 30)
return textView
}()
private lazy var button: UIButton = {
let button = UIButton()
button.setTitle("적용", for: .normal)
button.backgroundColor = .red
button.setTitleColor(.white, for: .normal)
button.titleLabel?.font = .boldSystemFont(ofSize: 30)
button.layer.cornerRadius = 10
button .addTarget(self, action: #selector(buttonTapped), for: .touchUpInside )
return button
}()
override func viewDidLoad() {
super.viewDidLoad()
configureUI()
}
private func configureUI() {
[label,
textView,
button
].forEach { view.addSubview($0)}
view.backgroundColor = .white
label.snp.makeConstraints {
$0.top.equalToSuperview().offset(100)
$0.centerX.equalToSuperview()
}
textView.snp.makeConstraints {
$0.top.equalTo(label.snp.bottom).offset(50)
$0.centerX.equalToSuperview()
$0.height.width.equalTo(200)
}
button.snp.makeConstraints {
$0.top.equalTo(textView.snp.bottom).offset(50)
$0.width.equalTo(60)
$0.height.equalTo(40)
$0.centerX.equalToSuperview()
}
}
@objc
private func buttonTapped() {
UserDefaults.standard.set(textView.text, forKey: "memo")
print("저장완료")
}
}
나는 스냅킵 라이브러리를 사용해서 만들어 보았다.
이번 처럼 코어데이터 파일로 생성해주면 된다.
아직 배워야 될 것이 너무 많은 것같다.
내 생각에는 IT 배움은 시작만 있을뿐이다 ㅋㅋㅋㅋ
반응형
'코딩' 카테고리의 다른 글
swift JSON & API 대해 공부해보자 (1) | 2024.07.17 |
---|---|
swift 네트워크 기본개념에 대해 공부해보자 (0) | 2024.07.17 |
swift 메모리 관리에 대해 공부해보자 (0) | 2024.07.16 |
swift 캡처 참조 타입에 대해 배워보자(강한참조, 약한참조, 순환참조) (1) | 2024.07.16 |
swift 뷰콘트롤러 생명주기 알아보자 (2) | 2024.07.15 |