Userdefault 파헤치기 [스코클 TIL_230807]

7과11사이·2023년 8월 7일
0

스파르타코딩클럽

목록 보기
27/90
post-thumbnail

오늘의 학습

기술면

  • UserDefault로 Data를 보존할 수 있다.
    어떤 기기이던, 프로그램이나 어플이 종료되면 가지고 있던 데이터는 삭제가 된다.
    주 이유는 프로그램들은 RAM에서 운영되기 떄문인데, RAM은 주기억장치 역할을 하지만, 현재 실행되는 프로그램들의 데이터만 활용할 뿐 별도로 저장하는 역할은 하지 않는다. 이 때 UserDefault 같은 저장소 역할을 구성하여 RAM에서 실행되는 데이터가 지워지지 않고 보조 기억장치로 넘어가도록 처리를 해주어야 한다.

  • 코드상으로 데이터 보존 방법
    개인적으로 하나의 ViewController에서 모든 코드를 작성하는 방식보다
    개별적으로 클래스를 만들어 놓을 수 있도록 수정해보고 있는 중이다!
    데이터 보존 또한 처리하는 하나의 클래스를 만들어서 역할을 주었다.

class TodoManager() {
	static let shared = TodoManager()
    private let userDefaults = UserDefaults.standard
    private let todoKey = "Todos"
    
    func saveTodo(_ items: [Todo]) {
    	if let encodedData = try? JSONEncoder().encode(items) {
        	userDefaults.set(encodedData, forKey: todoKey)
        }
	}
    
    func loadTodo() -> [Todo] {
    	if let encodedData = userDefaults.data(forKey: todoKey), let decodedItems = try? JSONDecoder().decode([Todo].self, from: encodedData) {
        	return decodedItems
        }
        return []
	}
}
  • UserDefault는 어떻게 데이터를 보존할 수 있을까?공식 문서에서 UserDefaults는 기본으로 주어지는 데이터베이스의 접근 할 수 있는 인터페이스라고 소개를 한다. 말그대로 User의 Default 값(초기값)을 저장하는 데이터로 생각하면 될 듯하다. 딕셔너리처럼 키, 값을 활용해서 데이터를 보관하고 접근할 수 있다.

  • UserDefault는 어떤 데이터를 저장할까?
    개념적으로 들어가보면 Float, Int, Double, Bool, String, URL 등 기본 자료구조와 NS 관련 자료구조를 저장할 수 있다고 한다.
    (NSData, NSString, NSNumber 등)

    애초에는 '저장소 역할'이라기보다 사용자의 설정을 보관해두는 역할이다보니 - 미디어 재생 속도, cm, inch 중 어떤 측정 방식이 편한지 등 (맞을까...?) 전반적으로 '정보'이지만 어플을 실행하는데 있어 편의성을 제공하기 위한 데이터일뿐, 지금처럼 Todo, 메모 등을 저장하는 데이터가 아니다.

    앞서 작성했듯이 해당 데이터들은 우리가 흔히 생각하는 '저장소'에 저장되는 방식은 아니다. UserDefaults를 활용하여 저장한 데이터들은 plist파일에 존재하게 되며 키,값 으로 호출할 수 있는 방식이 되는 것이다.
    이 말은, 어떤 어플에서도 혹은 아이폰 내부에서도 잘만하면 접근이 가능한 데이터라는 치명적인 단점이 있다. 그렇기에 UserDefaults를 사용하게 된다면 그다지 중요하지 않은 정보들만 담을 수 있도록 잘 관리를 해라!

  • UserDefaults는 단일 기기 저장만 가능하다.
    애플 기기의 특장점 중 하나는 생태계로 다양한 기기들과 한번에 연동되어 데이터를 불러올 수 있다는 점이 있다. UserDefaults는 한 기기에만 설정한 사용자 데이터만 호출할 수 있기 때문에 애플이 구성한 생태계를 활용하지 못한다. 이 때 연결된 기기사이 데이터를 연동시켜놓기 위해선 NSUbiquitousKeyValueStore을 활용하는 것을 추천한다!

참고

1개의 댓글

comment-user-thumbnail
2023년 9월 14일

좋은 글 감사합니다~ 많이 배워갑니다! 👍

답글 달기