Bibi's DevLog ๐Ÿค“๐ŸŽ

[Foundation] UserDefaults ๋ณธ๋ฌธ

๐Ÿ“ฑ๐ŸŽ iOS/๐Ÿ Apple Developer Documentation

[Foundation] UserDefaults

๋น„๋น„ bibi 2022. 6. 17. 00:23

UserDefaults

๊ณต์‹ ๋ฌธ์„œ https://developer.apple.com/documentation/foundation/userdefaults/

: ์•ฑ ์‹คํ–‰ ๋™์•ˆ ์ง€์†์ ์œผ๋กœ ํ‚ค-๊ฐ’ ์Œ์„ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋Š” ์‚ฌ์šฉ์ž์˜ ๊ธฐ๋ณธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋Œ€ํ•œ ์ธํ„ฐํŽ˜์ด์Šค.

class UserDefaults : NSObject

UserDefaults๋Š” ๊ธฐ๋ณธ ์‹œ์Šคํ…œ๊ณผ ์ƒํ˜ธ์ž‘์šฉํ•˜๊ธฐ ์œ„ํ•œ ํ”„๋กœ๊ทธ๋žจ์ ์ธ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ์‹œ์Šคํ…œ์€ ์•ฑ์ด ์‚ฌ์šฉ์ž๊ฐ€ ์„ ํ˜ธํ•˜๋Š” ๋™์ž‘์„ ์ปค์Šคํ„ฐ๋งˆ์ด์ฆˆํ•˜๋„๋ก ํ•ด ์ค๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋‹น์‹ ์€ ์‚ฌ์šฉ์ž๊ฐ€ ๊ทธ๋“ค์ด ์„ ํ˜ธํ•˜๋Š” ์ธก์ • ๋‹จ์œ„๋‚˜ ๋ฏธ๋””์–ด ์žฌ์ƒ ์†๋„๋ฅผ ๊ตฌ์ฒดํ™”ํ•˜๋„๋ก ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์•ฑ์€ ์‚ฌ์šฉ์ž์˜ ๊ธฐ๋ณธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์žˆ๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ์˜ ์ง‘ํ•ฉ์— ๊ฐ’๋“ค์„ ํ• ๋‹นํ•จ์œผ๋กœ์จ ์ด๋Ÿฌํ•œ ์„ ํ˜ธ๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ์ด ํŒŒ๋ผ๋ฏธํ„ฐ๋“ค์€ ๊ธฐ๋ณธ์œผ๋กœ์„œ ์ฐธ์กฐ๋ฉ๋‹ˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด ์ด๋“ค์ด ์ผ๋ฐ˜์ ์œผ๋กœ ์•ฑ์˜ ์‹œ์ž‘ ์‹œ์ ์˜ ๊ธฐ๋ณธ ์ƒํƒœ๋กœ ์‚ฌ์šฉ๋˜๊ฑฐ๋‚˜, ๊ธฐ๋ณธ์ ์ธ ๋™์ž‘ ๋ฐฉ์‹์„ ๊ฒฐ์ •ํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

์‹คํ–‰ ์‹œ์ ์—์„œ, ์‚ฌ์šฉ์ž์˜ ๊ธฐ๋ณธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋กœ๋ถ€ํ„ฐ ๋‹น์‹ ์ด ์•ฑ์ด ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ๋ณธ๊ฐ’์„ ์ฝ๊ธฐ ์œ„ํ•ด UserDefaults ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค. UserDefaults๋Š” ์ •๋ณด๋ฅผ ์บ์‹ฑํ•จ์œผ๋กœ์จ, ๋‹น์‹ ์ด ๊ธฐ๋ณธ๊ฐ’์„ ํ•„์š”๋กœ ํ•  ๋•Œ๋งˆ๋‹ค ์‚ฌ์šฉ์ž์˜ ๊ธฐ๋ณธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์—ฌ๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ๊ฐ’์„ ์„ค์ •ํ•  ๋•Œ, ๊ทธ๊ฒƒ์€ ๋‹น์‹ ์˜ ํ”„๋กœ์„ธ์Šค์— ๋”ฐ๋ผ ๋™๊ธฐ์ ์œผ๋กœ ๋ณ€ํ™”ํ•˜๋ฉฐ, ์˜๊ตฌ ์ €์žฅ์†Œ์™€ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค์™€๋Š” ๋น„๋™๊ธฐ์ ์œผ๋กœ ๋ณ€ํ™”ํ•ฉ๋‹ˆ๋‹ค.

์ค‘์š”

ํ™˜๊ฒฝ ์„ค์ •(์„ ํ˜ธ) ํ•˜์œ„ ์‹œ์Šคํ…œ์— ์ง์ ‘์ ์œผ๋กœ ์ ‘๊ทผํ•˜๋ ค๊ณ  ์‹œ๋„ํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค. ์„ ํ˜ธ ํ”„๋กœํผํ‹ฐ ๋ชฉ๋ก ํŒŒ์ผ์„ ์ˆ˜์ •ํ•˜๋ฉด ๋ณ€๊ฒฝ ๋‚ด์šฉ์„ ์žƒ๊ฑฐ๋‚˜, ๋ณ€๊ฒฝ ๋‚ด์šฉ์˜ ๋ฐ˜์˜์ด ๋Šฆ์–ด์ง€๊ฑฐ๋‚˜, ์•ฑ์˜ ์ถฉ๋Œ์„ ์•ผ๊ธฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ™˜๊ฒฝ ์„ค์ •(์„ ํ˜ธ)๋ฅผ ๊ตฌ์„ฑํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š”, macOS์— ์žˆ๋Š” defaults ์ปค๋งจ๋“œ๋ผ์ธ ์œ ํ‹ธ๋ฆฌํ‹ฐ๋ฅผ ๋Œ€์‹  ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค.

๊ต์œก๊ธฐ๊ด€์˜ ๊ด€๋ฆฌ ์žฅ๋น„์™€ ๊ฐ™์€ ์˜ˆ์™ธ์ ์ธ ๊ฒฝ์šฐ๋ฅผ ๋นผ๋ฉด, ์‚ฌ์šฉ์ž์˜ ๊ธฐ๋ณธ๊ฐ’์€ ํ•˜๋‚˜์˜ ์žฅ๋น„์— localํ•˜๊ฒŒ ์ €์žฅ๋˜๋ฉฐ, ๋ฐฑ์—…๊ณผ ๋ณต์›์„ ์œ„ํ•ด ์œ ์ง€๋ฉ๋‹ˆ๋‹ค. ํ™˜๊ฒฝ ์„ค์ •(์„ ํ˜ธ)๊ณผ ์‚ฌ์šฉ์ž์˜ ์—ฐ๊ฒฐ๋œ ๋‹ค๋ฅธ ์žฅ๋น„์™€์˜ ๋ฐ์ดํ„ฐ ๋™๊ธฐํ™”๋ฅผ ์œ„ํ•ด์„œ๋Š”, NSUbiquitousKeyValueStore ๋ฅผ ๋Œ€์‹  ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค.

๊ธฐ๋ณธ ์‚ฌ์šฉ

  • UserDefaults.standard๋กœ ์‚ฌ์šฉํ•œ๋‹ค.

  • UserDefaults์— ๋ฐ์ดํ„ฐ ์ €์žฅ

    • Any? ํƒ€์ž…์˜ ๊ฐ’๊ณผ Stringํƒ€์ž…์˜ ํ‚ค๋กœ ์ €์žฅํ•œ๋‹ค.

      UserDefaults.standard.set("๊ฐ’", forKey: "ํ‚ค")
  • UserDefaults์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ ๊ฐ€์ ธ์˜ค๊ธฐ

    • ์•„๋ž˜ ๊ฐ’ ๋ชจ๋‘ ์˜ต์…”๋„๋กœ ๊ฐ€์ ธ์˜จ๋‹ค.

      let ๊ฐ’1 = UserDefaults.standard.object(forKey: "ํ‚ค1") as ํƒ€์ž… // Any? ๋ฆฌํ„ด
      let ๊ฐ’2 = UserDefaults.standard.string(forKey: "ํ‚ค1") // String? ๋ฆฌํ„ด
      let ๋ฐฐ์—ด = UserDefaults.standard.array(forKey: "ํ‚ค") // [Any]? ๋ฆฌํ„ด
    • string, array ์™ธ์— URL, Data, Dictionary ๋“ฑ์˜ ํƒ€์ž…์œผ๋กœ๋„ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋‹ค - ๊ณต์‹๋ฌธ์„œ ์ฐธ์กฐ (https://developer.apple.com/documentation/foundation/userdefaults/)

  • UserDefaults์˜ ๋ฐ์ดํ„ฐ ์ง€์šฐ๊ธฐ

    • removeObject(forKey: String)