카테고리 없음

swift userdefaults 데이터 저장하기

kingarthur 2024. 9. 13. 10:46

앱을 구동 시키면 유저가 저장한 정보가 그대로 불러와져야 한다 ~ 

 

그럴때 몇가지 방법이 있는데 userdefaults로 데이터 저장을 해보았다. 

 

    private func saveProfileInfo(image: UIImage?, name: String, goal: String, memo: String) {
        if let image = image, let imageData = image.pngData() {
            UserDefaults.standard.set(imageData, forKey: "profileImage")
        }
        UserDefaults.standard.set(name, forKey: "profileName")
        UserDefaults.standard.set(goal, forKey: "profileGoal")
        UserDefaults.standard.set(memo, forKey: "profileMemo")
    }
    
    private func loadProfileFromUserDefaults() {
        let defaults = UserDefaults.standard
        
        // 프로필 이미지 로드
        if let imageData = defaults.data(forKey: "profileImage"), let image = UIImage(data: imageData) {
            profileView.profileImageView.image = image
        }
        
        // 이름, 목표, 메모 로드
        let name = defaults.string(forKey: "profileName") ?? ""
        let goal = defaults.string(forKey: "profileGoal") ?? ""
        let memo = defaults.string(forKey: "profileMemo") ?? ""
        
        // UI 업데이트
        profileView.goalLabel.text = goal
        profileView.memoLabel.text = memo
        
        // 네비게이션 바의 왼쪽 버튼 아이템 업데이트
        let savedNameLabelText = defaults.string(forKey: "profileName") ?? name
        let nameLabel = UILabel()
        nameLabel.textColor = .white
        nameLabel.text = savedNameLabelText
        nameLabel.font = .boldSystemFont(ofSize: 20) // 필요에 따라 폰트 조정
        nameLabel.sizeToFit() // 적절한 크기로 조정
        
        let leftBarButtonItem = UIBarButtonItem(customView: nameLabel)
        self.navigationItem.leftBarButtonItem = leftBarButtonItem
    }

이렇게 작성하면 내부에 데이터를 저장해준다. 뷰 디드로드에는 당연히 로드프로필프롬유저디파울처를 불러야 저장된 데이터가 앱이 켜지면서 불러와진다.

 

제이슨이나 코어데이터로도 가능하지만 간단한 자료들은 userdefaults 가능하다 

 

비교하자면 

 

1. UserDefaults

  • 목적: iOS 앱에서 간단한 설정 값이나 작은 데이터를 영구적으로 저장하기 위해 사용됩니다. 주로 앱의 설정, 사용자 환경설정, 마지막 실행 상태 등을 저장할 때 사용됩니다.
  • 데이터 유형: UserDefaults는 Bool, Int, Float, Double, String, Array, Dictionary 등의 기본 데이터 유형을 저장할 수 있습니다.
  • 저장 위치: UserDefaults는 iOS 시스템의 파일 시스템에 저장되며, 앱을 종료하고 다시 실행해도 데이터를 유지합니다.
  • 사용 용도: 주로 소규모 데이터, 예를 들어 사용자 설정, 로그인 정보(간단한 토큰), 앱의 상태 등을 저장할 때 유용합니다.
  • 장점: 간편하고 빠르게 데이터 저장 및 불러오기가 가능하며, 데이터가 영구적으로 유지됩니다.
  • 단점: 대용량 데이터나 구조화된 데이터를 저장하는 데는 부적합합니다.

2. JSON (JavaScript Object Notation)

  • 목적: 데이터를 구조화하고 교환하기 위한 포맷으로, 서버와 클라이언트 간의 데이터 통신 시 주로 사용됩니다. 구조화된 데이터를 쉽게 저장하고 전달할 수 있도록 설계되었습니다.
  • 데이터 유형: String, Number, Boolean, Array, Object (Swift에서는 Dictionary와 유사) 등의 형식으로 데이터를 구조화할 수 있습니다.
  • 저장 위치: JSON 데이터는 파일로 저장될 수도 있고, 메모리나 네트워크 요청의 응답으로도 사용됩니다. 즉, 파일로 로컬에 저장하거나 서버에서 데이터를 주고받는 데 많이 쓰입니다.
  • 사용 용도: 복잡한 구조의 데이터를 서버와 주고받거나, 로컬 파일에 저장하여 유지하고 싶을 때 사용됩니다. 예를 들어 여러 개의 객체를 포함한 리스트나 딕셔너리 등의 복잡한 데이터 구조를 저장할 때 유용합니다.
  • 장점: 구조화된 데이터를 표현하기에 매우 유연하고, 네트워크 통신이나 파일 저장에 적합합니다.
  • 단점: 데이터를 직접 저장하거나 불러오는 과정이 복잡할 수 있으며, 별도의 파일 저장 및 불러오는 메커니즘이 필요합니다.

차이점 정리

특징UserDefaultsJSON

저장 대상 기본형 데이터 (Bool, Int, String 등) 구조화된 데이터 (딕셔너리, 리스트 등)
사용 목적 앱 설정, 간단한 데이터 저장 구조화된 데이터 저장 및 교환
저장 방식 iOS 시스템에 자동 저장 (간편) 파일로 저장하거나 네트워크 전송
데이터 크기 작은 크기의 데이터 대용량 데이터도 가능
사용 편리성 간단하고 직관적 JSON 인코딩/디코딩 필요
네트워크 사용 불가능 가능 (서버와 데이터 교환에 자주 사용)

결론적으로, UserDefaults는 앱 내에서 간단한 설정값을 저장할 때, JSON은 구조화된 데이터를 저장하거나 서버와 데이터를 주고받을 때 유용합니다.

 

이렇게 알려준다. 

 

용도에 맞게 잘 사용하자.