๐ UserDefaults
class UserDefaults : NSObject
๐ก An interface to the userโs defaults database, where you store key-value pairs persistently across launches of your app.
์ฌ์ฉ์์ defaults ๋ฐ์ดํฐ๋ฒ ์ด์ค์ Key-Value ํํ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ์ ์๋ ๋ฐฉ๋ฒ์ ๋๋ค. Foundation framework ์ ํฌํจ๋์ด ๊ธฐ๋ณธ์ผ๋ก ์ ๊ณต๋๋ ํด๋์ค๋ก ๊ฐ๋จํ๊ฒ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ์ ์์ต๋๋ค.
defaults ๋ผ๊ณ ๋ถ๋ฅด๋ ์ด์ ๋ ์ผ๋ฐ์ ์ผ๋ก ์ฑ ์์์ ๊ธฐ๋ณธ ์ํ ๋๋ ๊ธฐ๋ณธ ์๋ ๋ฐฉ์์ ๊ฒฐ์ ํ๋ ๋ฐ ์ฌ์ฉ๋๊ธฐ ๋๋ฌธ์ด๋ผ๊ณ ํฉ๋๋ค.
โ๏ธ UserDefaults object ๊ฐ์ ธ์ค๊ธฐ
let defaults = UserDefaults.standard
UserDefault ์ ํตํด ๊ฐ์ ์ ์ฅํ๊ณ ๋ถ๋ฌ์ค๊ธฐ ์ํด object ๋ฅผ ๊ฐ์ ธ์์ผ ํฉ๋๋ค. ์์ ์ฝ๋๋ฅผ ํตํด object ๋ฅผ ๊ฐ์ ธ์ต๋๋ค.
โ๏ธ UserDefaults ๋ฅผ ์ด์ฉํด ๊ฐ ๊ฐ์ ธ์ค๊ธฐ
func object(forKey defaultName: String) -> Any?
UserDefaults ๋ฅผ ์ด์ฉํด defaults DB ์ ์ ์ฅ๋ ๊ฐ์ ๊ฐ์ ธ์ค๊ธฐ ์ํด object method ๋ฅผ ์ด์ฉํ ์ ์์ต๋๋ค.
ํ๋ผ๋ฏธํฐ์ ๋ฆฌํด๊ฐ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- defaultName : ํ์ฌ ์ฌ์ฉ์์ defaults DB ์ ์ ์ฅ๋ key ๊ฐ
- return : ํน์ ํ key ์ ์ฐ๊ฒฐ๋ object ๋ฅผ ๋ฐํํ๋ค. key ๊ฐ ์๋ ๊ฒฝ์ฐ nil ์ ๋ฐํํ๋ค.
์ฌ๊ธฐ์ ์ค์ํ ์ ์, ๋ฆฌํด๋๋ object ๋ immutable ํ๋ค๋ ๊ฒ์ ๋๋ค. ๋ณ๊ฒฝํ ์ ์๋ ๊ฐ์ด๋ผ๋ ์๋ฏธ์ ๋๋ค!
์๋ set ํจ์๋ฅผ ํตํด mutable object ๋ฅผ ์ ์ฅํ๋๋ผ๋, ๋ฐํ๋๋ ๊ฐ์ immutable object ๋ผ๊ณ ํฉ๋๋ค.
์๋ ์ฌ์ง์ method ๋ฅผ ์ด์ฉํด์ ๊ฐ type ์ ๋ง๋ ๊ฐ์ ๊ฐ์ ธ์ฌ ์๋ ์์ต๋๋ค.


โ๏ธ UserDefaults ๋ฅผ ์ด์ฉํด ๊ฐ ์ ์ฅํ๊ธฐ
func set(_ value: Any?, forKey defaultName: String)
UserDefaults ์ ์ด์ฉํด defaults DB ์ ๊ฐ์ ์ ์ฅํ๊ธฐ์ํด์ set method ๋ฅผ ์ด์ฉํฉ๋๋ค.
ํ๋ผ๋ฏธํฐ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- value : defaults ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅํ object
- defaultName : value ๋ฅผ ์ ์ฅํ๊ธฐ ์ํ key
ํด๋น ํจ์๋ ํ๋ผ๋ฏธํฐ value ์ ๊ฐ์ผ๋ก property list object ๋ง ๊ฐ๋ฅํฉ๋๋ค.
- NSData, NSString, NSNumber, NSDate, NSArray, NSDictionary
Float, Double, Int, Bool, URL type ์ ๋ฐ์ดํฐ๋ set ํจ์๋ค์ ์ด์ฉํด ๊ฐ์ ์ค์ ํฉ๋๋ค.
- ํ๋ผ๋ฏธํฐ์ data type ๋ง ๋ค๋ฅด๊ฒ ์ ์๋์ด ์์ด์, ์ฌ์ฉํ ๋์๋ ๋๊ฐ์ ๊ฒ ๊ฐ์ต๋๋ค.

โ๏ธ UserDefaults ๋ฅผ ์ด์ฉํด ์ฑ์ ์ฒซ ์คํ ์ฌ๋ถ ํ๋จํ๊ธฐ [์์ ]
public class Storage {
static func isFirstTime() -> Bool {
let defaults = UserDefaults.standard
if defaults.object(forKey: "isFirstTime") == nil {
defaults.set("No", forKey:"isFirstTime")
return true
} else {
return false
}
}
}
์์ ์ฝ๋๋ฅผ ํตํด์ ์ฑ์ด ์ค์น๋๊ณ ์ฒ์ ์คํ๋์๋์ง ์ฌ๋ถ๋ฅผ ํ๋จํ๊ธฐ ์ํ ํจ์์ ๋๋ค. UserDefaults ๋ฅผ ๋ค๋ฅธ ๊ณณ์์๋ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ Storage ํด๋์ค๋ฅผ ๋ง๋ค์ด method ๋ก ๋ง๋ค์์ต๋๋ค.
Sotrage.isFirsTime() method ๋ฅผ ํธ์ถํด์ ์จ๋ณด๋ฉ ํ์ด์ง๋ฅผ ๋์ฐ๊ฑฐ๋, ๋ฉ์ธ ํ์ด์ง๋ก ์ด๋ํ๊ฑฐ๋ ํ ์ ์์ต๋๋ค.
Property Wrapper ๋ฅผ ์ด์ฉํด์ UserDefaults ๋ฅผ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ ์ ์๋ ๋ฐฉ๋ฒ์ ๋ํด ์๋ ํฌ์คํ ์์ ์ ๋ฆฌํ์ต๋๋ค.
[iOS/Swift] Property Wrapper ๋ฅผ ํ์ฉํ UserDefaults ์ด์ฉํ๊ธฐ
์ง๋ ํฌ์คํ ์์ UserDefaults, Onboarding ํ์ด์ง์ ๋ํด์ ์์ฑํ์๊ณ , Onboarding ํ์ด์ง๋ฅผ ๊ตฌํํ๊ธฐ ์ํด UserDefaults ๋ฅผ ์ด์ฉํ์์ต๋๋ค. ์คํฐ๋ํ์๋ ๋ถ ์ค์์ Property Wrapper ๋ฅผ ์ด์ฉํ๋ฉด ํจ์จ์ ์ผ๋ก..
jellysong.tistory.com
์ฌ์ค ์ฒ์์๋ ์จ๋ณด๋ฉ ํ์ด์ง, ์ฐ์ปด ํ์ด์ง, ์ด๊ธฐ ์ค์ ํ์ด์ง ๋ฑ์ ๋ํด์ ์ฐพ์๋ณด๋ค๊ฐ UserDefaults ๋ฅผ ์๊ฒ ๋์์ต๋๋ค.๋ค์ ํฌ์คํ ์์ ์จ๋ณด๋ฉ ํ์ด์ง์ ์ฐ๊ฒฐ๋๋ ๋ถ๋ถ๊น์ง ํฌ์คํ ํด๋ณด๊ฒ ์ต๋๋ค. ๐ฅฐ
[iOS/Swift] ์จ๋ณด๋ฉ(Onboarding) ํ์ด์ง ๋ง๋ค๊ธฐ - Storyboard, UserDefaults, SceneDelegate
๐ก ์จ๋ณด๋ฉ, Onboarding ์จ๋ณด๋ฉ ํ์ด์ง๋ ์๋ก์ด ์ ์ ๋ ๋ค์ ๋์์จ ์ ์ ๋ฅผ ํ์ํด์ฃผ๋ ์ญํ ์ ํ๋ค. ์ ์ ์๊ฒ ์ดํ์ ์ฌ์ฉ๋ฒ์ ์๋ ค์ฃผ๊ฑฐ๋ ๊ธฐ๋ฅ์ ๋ํ ํ, ์ฝํ ์ธ ์ํ ๋ฑ์ ๋ณด์ฌ์ฃผ๊ธฐ ์ํด ์ฌ์ฉ
jellysong.tistory.com
๊ณต์ ๋ฌธ์
์ฐธ๊ณ ๋งํฌ
- lemon-dev.tistory.com/entry/NSUserDefaults
- stackoverflow.com/questions/39352907/how-can-i-make-the-uiviewcontroller-visible-only-once-during-first-run-of-the-ap