본문 바로가기

Mobile/IOS

UserDefaults 및 싱글톤

UserDefaults란 무엇인가?

간단히 표현하면 핸드폰 내에 있는 저장소 입니다. 예를 들면 XCODE에서 시뮬레이션을 실행시키고 다시 실행시켰을 때 저장이 안되고 코드로 작성했던 것만 나오지 않나요? 예를 들면 array에다가 3개의 숫자를 넣어놓고 시뮬레이션 상에서 추가 했을 때 화면이 나왔는데 다시 시뮬레이션을 켜보니 다시 초기화 되는 모습들이요.

위에 그림같이 추가하였을 때 생겨나지만 다시 시뮬레이션을 가동시키면 안되는것등.

 

그리고 사용자 기본설정과 같은 단일데이터에 적합하며 또는 대량의 유사한 데이터를 저장하는 경우에 사용하는 것이 좋습니다.

 

타입

클래스는 float, double, integer, boolean등과 NSData, NSString, NSNumber, NSDate, NSArray 또는 NSDictionary 유형의 객체도 저장할 수 있습니다.

 

사용법

UserDefaults.standard.set(값, forkey : "String") 입니다

중요한 것은 forkey는 String 값으로 넣어주어야 합니다.

또한 매번 UserDefaults.standard.set()을 넣기가 힘드시다면

import UIKit

let defaults = UserDefaults.standard//이렇게 작성

let dictionaryKey = "myDict"

print("test")

defaults.set(0.24, forKey: "Volume")
defaults.set("true", forKey: "MusicOn")

let array = [1,2,3]
defaults.set(array, forKey: "myArray")
let diction = ["name":"zo"]
defaults.set(diction, forKey: dictionaryKey)

let volume = defaults.float(forKey: "Volume")
let bo = defaults.bool(forKey: "MusicOn")
let myArray = defaults.array(forKey: "myArray")
let dic = defaults.dictionary(forKey: dictionaryKey)

이 있습니다. 다양한 사례가 있으니 봐주시면 감사하겠습니다

 

싱글톤

왜 갑자기 싱글톤 이야기가 여기서 왜 나오냐면은 UserDefaults가 싱글톤으로 제작한 것입니다.

싱글톤은 여러 참조에 의해서 매번 메모리를 할당하는 것이 아닌 메모리에 올라가 있어서 언제든지 참조하여 사용할 수 있습니다.

동일한 데이터를 여러번 사용한다면은 유용한 패턴입니다.

예를 들면

import UIKit

class Car{
    var colour = "Red"
}

let myCar = Car()
myCar.colour = "Blue"

print(myCar.colour)//Blue

let yourCar = Car()
print(yourCar.colour)//Red

이런 방식이 나올것 입니다. 왜 그러냐면 myCar와 yourCar는 다른 주소로 저장이 되어 있으니까요

만약에 싱글톤을 사용한다면

import UIKit

class Car{
    var colour = "Red"
    
    static let singletonCar = Car()
}

let myCar = Car.singletonCar
myCar.colour = "Blue"

print(myCar.colour)//Blue

let yourCar = Car.singletonCar
print(yourCar.colour)//Blue

둘다 프린트로 Blue가 출력이 될 것입니다. 왜냐하면 같은 주소값을 가지고 있어서 공유하게 됩니다.

'Mobile > IOS' 카테고리의 다른 글

CocoaPods 에러 Cannot find 'Auth' in scope  (0) 2022.05.04
UINavigationController  (0) 2022.04.26
다크모드와 벡터 작업  (0) 2022.02.22
MVC 패턴  (0) 2022.02.16
ViewController 특징 및 생명주기  (0) 2022.02.08