[SwiftUI] @State란 무엇일까?

2024. 5. 27. 10:23·Apple/SwiftUI
728x90
반응형

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

 

이번 포스팅에서는 SwiftUI에서 사용하는 @State에 대해서 정말 간단하게 포스팅을 해보겠습니다. 

 

그럼 바로 시작할게요!

 

@State란?

애플 공식 문서를 먼저 살펴보면

'SwiftUI가 값을 관리하고 읽고 쓸 수 있는 속성 래퍼'

라고 나와 있습니다.

 

개요는 아래처럼 나와 있는데 해석해보면,

SwiftUI는 속성의 저장을 관리합니다. 값이 변경되면 SwiftUI는 값에 따라 뷰 계층 구조의 일부를 업데이트합니다. 상태의 기본 값에 액세스하려면 해당 속성을 사용합니다. 그러나 Swift를 사용하면 상태 인스턴스를 직접 참조하여 래핑된 값에 액세스할 수 있습니다. 위의 예에서는 속성을 직접 참조하여 상태 속성의 래핑된 값을 읽고 씁니다.

 

정리해보자면!

@State는 뷰의 상태를 관리하기 위한 속성 래퍼입니다. SwiftUI는 선언형 프레임워크로, 뷰가 상태에 따라 자동으로 업데이트되도록 설계되어 있습니다. @State는 뷰의 상태 변화를 감지하고, 상태가 변경될 때 해당 뷰를 자동으로 다시 그리도록 합니다.

 

이렇게만 보면 사실 이해하기 어려우니 제가 소스코드와 함께 보여드리겠습니다.

 

@State 사용 예시

자 우선 제가 이렇게 소스코드를 작성해보았습니다. 이 소스코드는 화면에 0이라고 나와 있는 숫자가 숫자 감소 버튼을 누르면 1씩 감소되고 숫자 증가라는 버튼을 누르면 1씩 증가되는 소스코드입니다. 

 

근데 소스를 살펴보면 13번째 줄에서 에러가 발생한 것을 볼 수 있습니다. 에러를 살펴보자면

 

Left side of mutating operator isn't mutable: 'self' is immutable

 

해석해보면

 

변경 연산자의 왼쪽이 변경 가능하지 않습니다:  'self'가 불변(immutable)임을 나타냅니다.

라는 의미로, 속성이나 값이 변경 불가능한 상태임을 나타내고 여기서 'self'는 현재 인스턴스를 가리키며, 이 인스턴스의 속성을 변경할 수 없다는 것을 의미합니다.

 

그럼 어떻게 해결하지??

 

이럴 때 사용해야 하는 것이 바로 @State입니다. 

 

@State의 특징

@State는 뷰의 로컬 상태를 관리해주는 프로퍼티입니다.

 

@State는 상태가 변경되면 해당 상태를 사용하는 모든 뷰를 자동으로 다시 그리게 해주는 프로퍼티라고 생각해주시면 됩니다!

정말 편한 프로퍼티죠!!

자 이렇게 var 앞에 @State를 붙여주면 에러 메세지도 사라지고 정상적으로 작동하게 됩니다. 

 

@State var count: Int = 0

위 코드에서 @State 속성 래퍼는 count 변수를 선언하는 데 사용되었습니다. count 변수는 @State로 선언되었기 때문에, 이 변수의 값이 변경될 때마다 SwiftUI는 자동으로 해당 뷰를 다시 그립니다.

 

  • @State var count: Int = 0
    count 변수는 뷰의 상태를 나타내며, 초기 값은 0입니다.
    @State 속성 래퍼를 사용하여 이 변수를 선언함으로써, SwiftUI는 이 변수가 변경될 때마다 해당 뷰를 다시 그리게 됩니다.
  • Text(count.formatted())
    count 변수를 사용하여 텍스트를 표시합니다. count가 변경되면 이 텍스트 뷰도 자동으로 업데이트됩니다.

  • Button("숫자 감소") { count -= 1 }
    이 버튼을 누르면 count 값이 1 감소합니다. count가 변경되므로 SwiftUI는 뷰를 다시 렌더링합니다.

  • Button("숫자 증가") { count += 1 }
    이 버튼을 누르면 count 값이 1 증가합니다. count가 변경되므로 SwiftUI는 뷰를 다시 렌더링합니다.

 

구체적인 역할

상태 변수 선언!!

@State는 count 변수를 상태 변수로 선언합니다. 이는 count가 뷰의 상태를 나타내며, 변경될 수 있음을 의미합니다.

Button 액션에서 count 변수가 변경될 때마다 SwiftUI는 자동으로 뷰를 다시 그립니다. 예를 들어, "숫자 감소" 버튼을 누르면 count가 1 감소하고, "숫자 증가" 버튼을 누르면 count가 1 증가합니다.


이때 Text(count.formatted()) 뷰는 count의 변경된 값을 반영하여 다시 렌더링됩니다.

 

요약

  •  @State는 SwiftUI에서 뷰의 상태를 관리하고, 상태가 변경될 때 뷰를 자동으로 업데이트하는 역할
  • 특징: 상태관리, 자동 업데이트

감사합니다.

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

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

728x90
반응형

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

[SwiftUI] Core Data를 사용해보자  (0) 2024.07.07
[SwiftUI] ObservedObject가 뭘까??  (0) 2024.06.06
[SwiftUI] List 동적 리스트로 구현하기  (2) 2024.05.15
[SwiftUI] List에 대한 기본기 이해하기  (1) 2024.05.06
[SwiftUI] 애플은 왜 SwiftUI를 출시 했을까?  (0) 2024.04.01
'Apple/SwiftUI' 카테고리의 다른 글
  • [SwiftUI] Core Data를 사용해보자
  • [SwiftUI] ObservedObject가 뭘까??
  • [SwiftUI] List 동적 리스트로 구현하기
  • [SwiftUI] List에 대한 기본기 이해하기
P_Piano
P_Piano
Apple 생태계 개발자가 되기 위한 학습과 경험의 기록
    반응형
    250x250
  • P_Piano
    피피아노의 개발 일지
    P_Piano
  • 전체
    오늘
    어제
    • 분류 전체보기 (201)
      • Apple (119)
        • iOS (22)
        • visionOS (4)
        • Swift (65)
        • 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)
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

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

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
P_Piano
[SwiftUI] @State란 무엇일까?
상단으로

티스토리툴바