[SwiftUI] @AppStorage와 @SceneStorage 프로퍼티 래퍼 이해하기

2024. 9. 11. 19:55·Apple/SwiftUI
목차
  1. @SceneStorage 프로퍼티 래퍼
  2. @AppStorage 프로퍼티 래퍼
728x90
반응형

안녕하세요! 피피아노입니다 🎵

 

이번 포스팅에서는 @AppStorage와 @SceneStorage 프로퍼티 래퍼에 대해서 정리를 해보려고 합니다.

 

앱에 요구사항 중 하나는 앱을 다시 시작해도 유지되어야 하는 소량의 데이터를 앱이 저장하고 있어야 한다는 점입니다. 이러한 부분들을 위해서 SwiftUI는 소량의 앱 데이터를 지속적으로 저장하기 위해 두 개의 프로퍼티 래퍼(@AppStorage, @SceneStorage)를 제공하고 있습니다!

 

@SceneStorage 프로퍼티 래퍼

@SceneStorage 프로퍼티 래퍼는 개별 앱 화면 인스턴스의 범위 내에서 소량의 데이터를 저장하는 데 사용되며 앱이 실행되는 사이에 화면 상태를 저장하거나 복원하는 데 주로 사용됩니다. 

 

예를 들어서 우리가 어떤 앱에서 양식을 작성하고 있었는데 어떤 정보가 기억이 안 나서 메모장이나 다른 앱에 적어둔 정보를 확인하기 위해 앱을 종료하는 상황이 종종 있죠?

 

만약 저장을 안 하고 앱을 끄고 정보를 확인한 뒤, 앱에 다시 돌아가면 입력한 정보들은 손실됐을 가능성이 매우 높을 겁니다.

 

하지만 @SceneStorage를 사용하여 데이터를 유지하고 복원한다면 위와 같은 상황을 피할 수 있겠죠?

그렇기 때문에 @SceneStorage가 중요한 겁니다.

 

화면 저장소(SceneStorage)는 관련된 값을 저장하기 위해 내부적으로 사용되는 키 문자열과 함께 @SceneStorage 프로퍼티 래퍼를 사용하여 선언합니다. 

 

아래 소스 코드를 보면서 설명 드리겠습니다.

import SwiftUI

struct ContentView: View {
    @SceneStorage("userInput") private var userInput = ""
    
    var body: some View {
        VStack {
            TextField("텍스트를 입력하세요", text: $userInput)
                .textFieldStyle(RoundedBorderTextFieldStyle())
                .padding()
            
            Text("저장된 값: \(userInput)")
                .padding()
            
            Button("Clear") {
                userInput = ""
            }
        }
    }
}

 

이 소스 코드를 보면 @SceneStorage 프로퍼티 래퍼를 이용해서 "userInput"이라는 키로 문자열 값을 저장하고 있습니다.

해당 소스 코드를 실행하면 위에처럼 나오게 되는데 사용자가 입력한 텍스트가 자동으로 저장되고, 앱을 종료했다가 다시 열어도 이전에 입력한 값이 유지되는 것을 확인해볼 수 있습니다.

 

@AppStorage 프로퍼티 래퍼

다음은 @AppStorage 프로퍼티 래퍼에 대해서 살펴보겠습니다.

 

이 내용은 앞에 내용과도 살짝 연관성이 있어서 앞에 내용을 다시 한번 살펴보겠습니다.

 

@SceneStorage 프로퍼티 래퍼는 앱 내의 각 화면마다 저장된 데이터의 복사본을 가질 수 있게 해줍니다. 이 말은 다시 말하자면 한 화면에 저장된 데이터는 앱 내의 다른 화면에서 접근할 수 없습니다. 심지어 동일한 화면에 대한 다른 인스턴스라도 말이죠.

 

그래서 사용하는 것이 바로 @AppStorage 프로퍼티 래퍼입니다. 

 

@AppStorage 프로퍼티 래퍼는 앱 전체를 통해서 접근하고 사용할 수 있는 데이터를 저장하는 데 사용하게 됩니다.

 

앱 저장소(app storage)는 수년 동안 iOS에서 사용할 수 있었던 UserDefaults를 기반으로 구축되었습니다. 앱이 디폴트 사용자 설정에 접근하고 저장하는 방법으로 주로 제공되는 UserDefault는 앱에 필요한 소량의 데이터를 키-값 쌍(key-value pair)의 형태로 저장하는 데 사용할 수 있습니다.

 

@AppStorage 프로퍼티 래퍼는 키로 사용할 문자열 값이 필요하며 다음과 같이 선언할 수 있습니다.

@AppStorage("store") var text: String = ""

 

데이터는 디폴트로 표준 UserDefaults 저장소에 저장됩니다. 하지만 데이터를 저장할 커스텀 앱 그룹을 지정할 수도 있는데, 이렇게 지정해주면 앱 그룹은 앱이 동일한 그룹 내의 다른 앱 또는 타깃과 데이터를 공유할 수 있게 해준다고 합니다.

 

@State 프로퍼티 래퍼와 마찬가지로 저장된 값을 변경하면 새로운 데이터가 반영되도록 사용자 인터페이스가 새로고침 된다는 점도 기억하시면 좋을 것 같습니다!

 

오늘은 여기까지 :)


감사합니다.

 

잘못된 내용이 있거나 더 좋은 내용 피드백은 언제나 환영합니다!

궁금하신 부분은 댓글로 질문 부탁드립니다!

728x90
반응형

'Apple > SwiftUI' 카테고리의 다른 글

[SwiftUI] SwiftUI와 UIKit 통합하기 (2/2)  (2) 2024.09.21
[SwiftUI] SwiftUI와 UIKit 통합하기 (1/2)  (5) 2024.09.14
[SwiftUI] Property Wrapper 알아보기  (0) 2024.07.29
[SwiftUI] AVFoundation 톺아보기  (2) 2024.07.15
[SwiftUI] Core Data를 사용해보자  (0) 2024.07.07
  1. @SceneStorage 프로퍼티 래퍼
  2. @AppStorage 프로퍼티 래퍼
'Apple/SwiftUI' 카테고리의 다른 글
  • [SwiftUI] SwiftUI와 UIKit 통합하기 (2/2)
  • [SwiftUI] SwiftUI와 UIKit 통합하기 (1/2)
  • [SwiftUI] Property Wrapper 알아보기
  • [SwiftUI] AVFoundation 톺아보기
P_Piano
P_Piano
Apple 생태계 개발자가 되기 위한 학습과 경험의 기록

P_Piano님의
글이 좋았다면 응원을 보내주세요!

응원하기
응원은 창작의 힘

이 글이 도움이 됐다면, 응원 댓글을 써보세요. 블로거에게 지급되는 응원금은 새로운 창작의 큰 힘이 됩니다.

카카오 계정으로 누구나

응원 댓글은 만 14세 이상 카카오계정 이용자라면 누구나 편하게 작성, 결제할 수 있습니다.

응원 댓글 강조

글 본문, 댓글 목록 등을 통해 응원한 팬과 응원 댓글, 응원금을 강조해 보여줍니다.

쉬운 결제

응원금은 앱에서는 인앱결제, 웹에서는 카카오페이 및 신용카드로 결제할 수 있습니다.

응원 수익은 창작자에게 큰 힘이 됩니다.
응원 금액
응원 댓글
  • 창작 활동에 대한 감사와 격려의 의미로 창작자를 응원합니다.
  • '응원하기'는 자발적 결제이므로 청약철회(환불) 불가능합니다.
  • '응원하기'는 만 14세 이상 인증 사용자만 이용할 수 있습니다. 만 19세 미만 미성년 회원의 경우, 법정대리인이 응원하기 결제 이용에 동의하지 않으면 미성년자 본인 또는 법정대리인이 그 결제 내용을 취소할 수 있습니다.
  • '응원하기' 이용을 위한 자세한 내용은 티스토리 이용약관 및 카카오 유료서비스 이용약관을 따릅니다.
(주) 카카오 대표이사 정신아
사업자 등록 번호 120-81-47521
통신판매업신고번호 제2015-제주아라-0032호
주소 제주특별자치도 제주시 첨단로 242(영평동)
호스팅사업자 (주)카카오
고객센터 1577-3754
이메일 help.notice@kakaocorp.com
    반응형
    250x250
  • P_Piano
    피피아노의 개발 일지
    P_Piano
  • 전체
    오늘
    어제
    • 분류 전체보기 (201) N
      • Apple (119) N
        • iOS (22)
        • visionOS (4)
        • Swift (65) N
        • UIKit (2)
        • SwiftUI (20)
        • RxSwift (2)
        • Xcode (4)
      • C언어 (5)
      • C++ (8)
      • Dart (1)
      • Python (3)
      • JavaScript (17)
      • Git (1)
      • CS (39)
        • 디자인 패턴 (6)
        • 네트워크 (20)
        • 운영체제 (8)
        • Database (5)
        • 자료구조 (0)
      • IT 지식 (2)
      • IT 뉴스 (4)
      • 출처 표기 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    네트워크
    프로퍼티 래퍼
    배열
    프로세스
    운영체제
    제어문
    UIKit
    Initializers
    이니셜라이저
    옵셔널
    메서드
    swiftUI
    combine
    오블완
    티스토리챌린지
    Vision Pro
    visionOS
    Xcode
    ios
    변수
    스위프트
    함수
    비동기
    클래스
    연산자
    SWIFT
    Optional
    코딩테스트
    디자인패턴
    자바스크립트
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
P_Piano
[SwiftUI] @AppStorage와 @SceneStorage 프로퍼티 래퍼 이해하기

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.