UserDefaults Singleton

신동준·2022년 6월 2일
0

CoreData 가기전에 영구적인 데이터를 보존하는 가장쉬운방법인 UserDefault를 한번 살펴보고 가겠다 크키가 작은 데이터의 경우 Xcode폴더에 영구적으로 보관하는방식이 쉽다보니 UserDefault방식을 선호하고 이것을 DB로 쓰는 사람도 종종 있다고한다..

// Xcode에 저장된 UserDefault 데이터 경로확인법, Key,Value 형식으로 저장되있는 plist을 확인할수있다
print(NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true).last! as String)

경로 ex) /Users/david/Library/Developer/CoreSimulator/Devices/365092AC-CBE3-4AB4-A77E-A08A7B8AB76C/data/Containers/Data/Application/DEB6640B-B903-44D3-BBB7-3F6D8F9E5B23/Library/Preferenc
위의 폴더를 열어보면 BundleID 생성된 plist파일을 확인할수있다...

let defaults = UserDefaults.standard

defaults.set(0.24, forKey: "Volume")
defaults.set(true, forKey:"MusicOn")
defaults.set("Angela", forKey:"PlayerName")
defaults.set(Date(), forKey:"AppLastOpenedByUser")

let array = [1, 2, 3]
defaults.set(array, forKey: "myArray")
let dictionary = ["Name": "Angela"]
defaults.set(dictionary, forKey: "myDictionary")

let volume = defaults.float(forKey: "Volume")
let appLastOpen = defaults.object(forKey: "AppLastOpenedByUser")
let myArray = defaults.array(forKey: "myArray") as! [Int]
let myDictionaory = defaults.dictionary(forKey: "myDictionary")


// Singleton  -> 클래스변수,클래스메소드와 비슷한개념 Instance와 다르게 클래스밖으로 나가서 사용가능하며 값을 바꾸면 사용하는 어느클래스에서도 값이 바뀐다 static 키워드를 사용하면된다...

class Car {
    var colur = "Red"
}

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

let yourCar = Car()
print(yourCar.colur)

class Bus {
    var colur = "Red"
    static let singletonBus = Bus()
    
}

let myBus = Bus.singletonBus
myBus.colur = "Blue"

let yourBus = Bus.singletonBus
print(yourBus.colur)

class A {
    init() {
        Bus.singletonBus.colur = "Yellow"
    }
}

class B {
    init() {
        print(Bus.singletonBus.colur)
    }
}

let testA = A()

let testB = B()
// Yellow가 출력된다

UserDefault 사용하면 Key값을 가지고 접근하여서 Primitiv한 데이터셋을 전부 저장가능하다 그리고 UserDefault Property타입은 Singleton이라 하고 API 통신떄쓰는 URLSession 같은 타입이다

추후에는 UserDefault를 사용하여 여러가지 데이터를 영구적으로 가져야하는 코드를 작성해봐야겟다...

profile
Swift 예비개발자

0개의 댓글