iOS앱에서 앱 상태 및 설정, 사용자 기본값과 같은 간단하고 작은 데이터를 저장하기 위한 인터페이스.
특징
앱이 시작될 때, 특정 용도로 객체 인스턴스를 최초 1회 하나만 생성(static)하여 공용으로 사용하는 디자인 패턴
특징
: 클래스를 여러번 호출하더라도 인스턴스는 딱! 한번만 생성. 전역변수처럼 코드의 어느 곳에서 접근하던 간에 같은 메모리에 접근 가능.
장점
- 인스턴스를 최초 1회만 생성하므로 메모리와 성능 측면에서 효율이 좋다.
- 클래스 간 데이터 공유가 쉽다.
- 인스턴스가 1개라는 것을 보증받는다.(Thread Safe)
단점
- 싱글톤을 위한 코드 구현 필요
- 데이터 공유가 많아질 시, 다른 클래스의 인스턴스들 사이의 결합도가 높아져 개방-폐쇄 원칙(OCP, Open-Closed Principle)을 위배
⇒ 수정과 테스트가 어려워짐
<예시코드>
// 데이터 저장
UserDefaults.standard.set("Doyeon Kim", forKey: "name")
UserDefaults.standard.set(31, forKey: "age")
// 데이터 검색
if let username = UserDefaults.standard.string(forKey: "name") {
print("사용자 이름: \(username)")
}
if let age = UserDefaults.standard.integer(forKey: "age") {
print("나이: \(age)")
}
// 데이터 업데이트
UserDefaults.standard.set(32, forKey: "age")
// 데이터 삭제
UserDefaults.standard.removeObject(forKey: "name")
// 기본값 설정
let defaultSettings = ["soundEnabled": true, "notificationsEnabled": true]
UserDefaults.standard.register(defaults: defaultSettings)
// 기본값으로부터 데이터 가져오기
let soundEnabled = UserDefaults.standard.bool(forKey: "soundEnabled")
let notificationsEnabled = UserDefaults.standard.bool(forKey: "notificationsEnabled")