OnBoarding 구현 및 UserDefaults 상태관리

Yk velog·2025년 1월 3일

Swift

목록 보기
8/8

🔍 문제 상황

  1. 앱 최초 실행 시에만 온보딩을 보여주고 이후에는 스킵해야 함
  2. 앱을 재실행해도 온보딩 표시 여부 상태가 유지되어야 함
  3. 온보딩 완료 시 상태를 영구적으로 저장해야 함

💡 해결 방안

  1. @AppStorage를 활용한 상태 관리
// Main.swift
@AppStorage(UserDefaultsKeys.hasSeenOnboarding) private var hasSeenOnboarding = false
  • SwiftUI의 @AppStorage를 사용하여 UserDefaults 접근을 단순화
    • false는 UserDefaults에 값이 없을 때만 사용되는 초기값
  1. fullScreenCover로 온보딩 표시 제어
.fullScreenCover(isPresented: .init(
    get: { !hasSeenOnboarding },
    set: { hasSeenOnboarding = !$0 }
)) {
    OnboardingView()
}
  1. 온보딩 완료 처리
// OnboardingView.swift
private func completeOnboarding() {
    UserDefaults.standard.set(true, forKey: UserDefaultsKeys.hasSeenOnboarding)
    dismiss()
}

🔧 작동 원리

  1. 최초 실행 시
 // UserDefaults에 값이 없을 때
   hasSeenOnboarding = false // 초기값 사용
  1. 온보딩 완료 후
   // UserDefaults에 true 저장
   UserDefaults.standard.set(true, forKey: UserDefaultsKeys.hasSeenOnboarding)
  1. 재실행 시
   // UserDefaults에서 저장된 값 로드
   hasSeenOnboarding = UserDefaults.standard.bool(forKey: key) // true

⚠️ 주의사항

  • @AppStorage의 초기값(= false)은 UserDefaults에 값이 없을 때만 사용됨
  • UserDefaults 값은 앱 삭제 전까지 유지됨
  • 앱 업데이트는 UserDefaults 값에 영향을 주지 않음

🎯 Best Practice

// 앱 레벨에서 상태 관리
@AppStorage(UserDefaultsKeys.hasSeenOnboarding) private var hasSeenOnboarding = false

// 온보딩 뷰에서는 단순히 완료 처리만
private func completeOnboarding() {
    UserDefaults.standard.set(true, forKey: UserDefaultsKeys.hasSeenOnboarding)
    dismiss()
}

🔍 참고

  • SwiftUI의 @AppStorage는 내부적으로 UserDefaults를 래핑
  • 상태 변경 시 자동으로 View 업데이트
  • 앱의 설정이나 사용자 기본값 저장에 적합

0개의 댓글