UserDefaults
Apple Developer Documentation 에서 가져온 정의
An interface to the user’s defaults database, where you store key-value pairs persistently across launches of your app.
UserDefaults의 특징
- 앱 내부에 보안이 필요하지 않는 소량의 데이터를 저장해야 하는 경우 사용
- [데이터, key(String)] 형태로 저장됨
UserDefaults 사용법
<Switch의 토글 상태를 저장하고 싶은 경우>
let myUserDefaults = UserDefaults.standard
myUserDefaults.set(TestSwitch.isOn, forKey: "switchState")
// .set(<저장하고자 하는 값>, forKey: <key 이름>)
→ 그때그때 알맞는 key 값 만들어 데이터 저장할 수 있다!
<사용하고자 하는 곳에 UserDefaults의 값 전달>
TestSwitch.isOn = UserDefaults.standard.bool(forKey: "switchState")
// .<가져올 데이터 타입>(forKey: <key 값>)
→ TestSwitch의 isOn 값에 UserDefaults 값 전달
→ isOn이 boolean형이기 때문에 .bool 붙여줌
<추가 꿀팁>
extension UserDefaults {
var testSwitchIsOn: Bool {
get {
guard let isOn = UserDefaults.standard.bool(forKey: "switchState") else {
return nil
}
return isOn
}
set {
UserDefaults.standard.set(newValue, forKey: "switchState")
}
}
}
→ 이렇게 extension 파일로 미리 정해두면 사용할때 훨씬 편하게 가능!
// get
TestSwitch.isOn = UserDefaults.testSwitchIsOn
// set
UserDefaults.testSwitchIsOn = false
→ 요로코롬 쉽게 가능하다! 이말이지~
참고자료: [UIKit]UserDefaults
Singleton Pattern
객체의 인스턴스가 오직 1개만 생성되는 패턴
즉, 전역변수를 사용하지 않고 객체를 오직 하나만 생성하게 하여 생성된 객체를 어디에서든 접근할 수 있도록 하는 패턴
class member {
var name: String?
var age: Int?
var gender: String?
}
이와 같은 클래스가 있을 때, 서로 다른 뷰에서 객체를 생성하여 값을 대입하면,
var member = member()
member.name = "Id"
var member = member()
member.age = 23
var member = member()
member.gender = "male"
총 3개의 서로 다른 객체가 생성된다!
하지만, singleton pattern을 사용한다면,
하나의 객체에 name, age, gender 값을 넣어 사용함!
사용 방법
Singleton Class 만들기
static property로 instance 생성 후!
혹시나 모를 Singleton class가 하나 더 생길걸 대비해서 init을 private로 설정!
class member {
static let sharedMember = member()
var name: String?
var age: Int?
var gender: String?
private init() {}
}
Singleton Class 사용하기
let member = member.shared
member.name = "Id"
let member = member.shared
member.age = 23
let member = member.shared
member.gender = "male"
요로코롬 접근하면 끝~
사용하는 이유
- 오직 하나만 사용하기 때문에 메모리 측면에서 이점이 있음
- 이미 생성한 하나의 인스턴스를 사용한다면 속도 측면에서도 이점이 있음
- 다른 클래스 간의 데이터 공유가 쉬움
- → 동시성에서 문제가 생길수도 있기 때문에 주의
문제점
- 코드 자체가 많이 필요함..!
- 테스트하기 어려움
참고자료: 싱글톤(Singleton) 패턴이란? , https://babbab2.tistory.com/66
다음 구글링 내용은 다음 게시글에!!
추가)
갓 호야의 피드백으로 UserDefaults도 싱글톤 패턴이라는걸 알게 됐지 ㅎㅎ...
UserDefaults.standard ~~ 이런 식으로 접근하는데,
여기서 UserDefaults가 싱글톤 패턴으로 사용된대!
'멀고도 험난한 개발 일지' 카테고리의 다른 글
개발공부 ToDo - UI를 그릴 수 있게 된 뒤에는? (0) | 2022.12.24 |
---|---|
WWDC21 - Discoverable Design (2) | 2022.10.03 |
UIKit_유투브_신동규 - #5 UI 실습 (0) | 2022.07.18 |
UIKit_유투브_신동규 - #3 아무곳이나 클릭했을때 키보드 숨기는 법 (0) | 2022.07.18 |
UIKit_유투브_신동규 - #2 Pro처럼 UI 디자인하기 (0) | 2022.07.10 |