Property Wrapper

2024. 9. 22. 04:55·iOS 개발/SwiftUI

오늘의 내용은?

SwiftUI로 개발을 진행하다면 State 구조체를 많이 확인하실 수 있습니다. 필수라고 생각합니다.

AppleDeveloper 문서를 통해서 읽어보면 아래와 같이 나와있습니다.

SwiftUI에서 관리하는 값을 읽고 쓸수 있는 Property Wrapper이다.

Property Wrapper가 무엇인지 궁금하여서 정리를 조금 해볼려고 합니다.

정의

Property Wrapper란 프로퍼티를 한번 감싸는 것을 의미하며 프로퍼티를 저장하고 정의하는 코드 사이를 분리 계층을 추가하여 프로퍼티를 관리할 수 있게 됩니다.

위에서도 언급이 되었지만

@State, @ObservedObject, @Published, @Binding 등등 많이 들어보셨을 겁니다. 이들을 자세히 들어다보면 아래와 같이 특정 프로퍼티값을 State로 감싸져있는 형식이라는것을 확인할 수 있습니다.

🧐그래서 이걸 왜 사용하는건데?

✏️프로퍼티의 특정 행동에 대한 보일러 플레이트 코드를 줄일 수 있는 유용한 기술입니다.

(보일러 플레이트 코드 : 유사한 코드가 여러 곳에서 사용되며, 반복적으로 비슷한 형태를 띄는 코드)

사용예시

다들 사용하는 에시로 Uppercase를 많이 활용하셔서 저는 제곱을 해주는 행동을 취하도록 만들어 보았습니다.

 

1. Square로 명칭을 정의해주면 wrappedValue가 없다고 오류가 뜹니다.

 

2. 아래와 같이 value를 Int형식으로 정의해주고 get, set을 활용하여 값을 불러와주고 변경해줍니다.

 

3. 아래와 같이 선언을 하면 math라는 구조체에 Squrare에서 재곱을 하여주는 로직을 연결할 수 있게 됩니다. 이후 구조체를 호출해주고 number값에 숫자를 기입을 하게되면 어떤일이 벌어질까요? 직접 한번 해보시는 것을 추천드립니다.

 

4. 아래와 같이 3의 재곱인 9가 출력되는 것을 확인할 수 있습니다.

Property Wrapper와 클래스, 함수, 구조체의 차이점

저만 그런지 모르겠지만 property wrapper기능이 어떤방면을 보면 클래스와 어떤 방면을 보면 함수, 구조체와 비슷할 수도 있다고 느껴집니다. 그래서 한번 간단하게 비교 분석을 해보았습니다.

1. Property Wrapper와 Class의 차이점

  • 참조 타입 vs 값 타입
    • Class는 참조 타입(reference type)입니다. 객체 인스턴스를 생성하고 이를 여러 곳에서 참조할 수 있습니다. 동일한 객체를 참조하는 모든 곳에서 변경사항이 공유됩니다.
    • Property Wrapper는 주로 구조체(struct)를 기반으로 값 타입으로 값을 복사해서 전달하며, 인스턴스가 독립적으로 존재합니다.
  • 상속
    • Class는 상속을 지원합니다.
    • Property Wrapper는 상속을 지원하지 않습니다.
  • 사용 목적
    • Class는 데이터를 저장하고 메서드를 포함해 객체의 상태와 동작을 정의하는데 사용됩니다.
    • Property Wrapper는 특정 속성의 읽기/쓰기 로직을 추상화하고 속성 값을 관리하는데 사용됩니다.

2. Property Wrapper와 Struct의 차이점

  • 적용 대상
    • Struct는 여러 속성을 포함할 수 있으며, 메서드와 함께 구조체의 인스턴스를 정의하는 데 사용됩니다.
    • Property Wrapper는 단일 속성에 적용되며, 속성에 대한 특정한 동작(값 검증, 저장 방식 등)을 정의하는 데 사용됩니다.
  • 적용 범위
    • Struct는 하나의 데이터 구조로 여러 속성과 메서드를 포함하여 독립적인 단위를 형성합니다.
    • Property Wrapper는 주로 하나의 속성에만 적용되며, 속성의 동작을 변경하거나 확장하는 데 초점을 맞춥니다.
  • 사용 목적
    • Struct는 여러 속성(Property)과 메서드를 정의하여 데이터와 동작을 캡슐화하는 데 사용됩니다. 값을 복사하여 전달하는 값 타입입니다.
    • Property Wrapper는 하나의 속성에 대한 동작을 캡슐화하는 데 사용되며, 속성에 대한 접근과 설정을 제어할 수 있습니다. 속성에 대한 접근 로직을 재사용 가능한 방식으로 추상화하는 것이 주된 역할입니다.

3. Property Wrapper와 함수(Function)의 차이점

  • 상태 관리
    • 함수는 상태를 저장하지 않으며, 호출될 때마다 새로운 값을 반환하는 일회성 작업을 처리합니다.
    • Property Wrapper는 속성의 값을 저장하고, 그 값을 읽거나 쓸 때 상태를 유지하면서 추가적인 로직을 수행할 수 있습니다. 값을 저장하고 관리하는 방식이므로 상태가 유지됩니다.
  • 적용 범위
    • 함수는 코드 전반에 걸쳐 사용되며, 다양한 곳에서 호출할 수 있습니다.
    • Property Wrapper는 특정 속성에만 적용되어 그 속성의 동작을 제어하는 데 집중합니다.
  • 사용 목적
    • 함수는 입력값을 받아 작업을 수행한 후 반환하거나, 내부 상태를 변경하지 않고 값을 일회성으로 처리합니다.
    • Property Wrapper는 특정 속성의 값을 제어하는 방식으로 동작하며, 속성의 값에 대한 접근과 설정을 일관된 방식으로 관리합니다.

Property Wrapper는 속성 동작 캡슐화, 코드 재사용성, 데이터 보호 및 검증이 장점에 해당됩니다

이렇게 오늘은 Property Wrapper 내용을 정리해보았습니다. 다음 내용은 State, Binding에 관하여 정리를 해볼려고 합니다! 부족한 내용이지만 끝까지 읽어봐주셔서 감사합니다. 지인에게 추천받은 개발자 속담으로 마무리하도록 하겠습니다! 파이팅입니다~

“가는 소스가 고와야 오는 파일에 바이러스 없다”

'iOS 개발 > SwiftUI' 카테고리의 다른 글

[SwiftUI] @Published 썼는데도 View가 안 바뀐다?  (0) 2025.05.30
[SwiftUI] Splash & Onboarding 화면 구현 리뷰 (Feat. 나만의 Todo)  (1) 2025.05.26
[SwiftUI] Figma 비율 그대로! 개발하는 Constants 구조체 만들기  (1) 2025.05.24
뷰 상태변경 제 2장  (8) 2024.11.13
뷰 상태변경 제 1장  (0) 2024.11.13
'iOS 개발/SwiftUI' 카테고리의 다른 글
  • [SwiftUI] Splash & Onboarding 화면 구현 리뷰 (Feat. 나만의 Todo)
  • [SwiftUI] Figma 비율 그대로! 개발하는 Constants 구조체 만들기
  • 뷰 상태변경 제 2장
  • 뷰 상태변경 제 1장
Riu
Riu
안녕하세요 iOS 개발자를 꿈꾸는 Riu입니다. Github: woolnd
  • Riu
    Riu 개발노트
    Riu
  • 전체
    오늘
    어제
    • 분류 전체보기 (27)
      • 티스토리 (2)
      • iOS 개발 (21)
        • SwiftUI (9)
        • UIKit (6)
        • Combine (5)
        • Architecture (1)
      • 알고리즘 (1)
      • 회고록 (2)
  • 블로그 메뉴

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

    • Github
  • 공지사항

  • 인기 글

  • 태그

    티스토리
    Architecture
    cleanArchitecture
    안드로이드
    회고록
    ios
    Combine
    시작
    SWIFT
    SWIF
    UIKit
    나만의todo
    막자알림서비스
    구름톤유니브
    figma
    앗차!
    알고리즘
    ios개발
    SwiftUI
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
Riu
Property Wrapper
상단으로

티스토리툴바