이 글은 작성자의 학습을 위하여 작성되었습니다
@propertyWrapper, 프로퍼티 래퍼?
속성 래퍼는 속성을 정의할 때 코드의 반복을 줄이고, 속성의 동작을 재사용할 수 있게 해주는 기능입니다.
@propertyWrapper는 WWDC 2019에서 Swift 5.1과 함께 도입되었습니다. 프로퍼티의 관리를 용이하게 하기 위해 사용됩니다. 이를 통해 코드의 중복을 줄이고, 가독성을 높이며, 특정 동작을 프로퍼티에 자동으로 적용할 수 있습니다. 선언 Attributes의 대표적인 것 중 하나 입니다.
WWDC 2019 Modern Swift API Design 중 PropertyWrapper 훑어보기
Property Wrappers
get과 set을 사용하여 매번 코드를 작성한다면 너무 많은 공간을 차지합니다. 또한 반복되는 코드가 생길 가능성이 있습니다.
이 text는 @LateInitialized에 의해 lazy 속성처럼 필요할 때 값이 초기화 되는 기능을 합니다.
반복적인 코드를 제거하고 속성이 어떻게 동작하는지 정의 지점에서 명확히 알 수 있어, 코드의 가독성과 유지보수성이 높아집니다.
아래는 LateInitialized 프로퍼티 래퍼에 대한 정의입니다.
이 속성 래퍼는 값을 늦게 초기화할 수 있도록 해줍니다.
Using Property Wrappers
저장 프로퍼티와 연산 프로퍼티로 Property wrappers의 쓰임을 확장합니다.
기존 코드에서
Using the DefensiveCopying Property Wrapper
API Design with Property Wrappers
정리 및 요약
@propertyWrapper를 사용하면, 일반적으로 속성의 값을 읽고 쓰는 방식에 추가적인 로직을 삽입할 수 있습니다. 예를 들어, 값을 읽기 전에 로깅을 하거나, 값을 설정하기 전에 유효성 검사를 하거나, 기본값을 제공하는 등의 작업을 쉽게 할 수 있습니다. 이러한 동작을 별도로 get set 등을 통해 정의하는 대신, PropertyWrapper를 통해 일관된 방식으로 처리할 수 있습니다.
PropertyWrapper를 정의하려면, 먼저 구조체나 클래스를 정의하고 앞에 @propertyWrapper 어노테이션을 추가합니다. 이 구조체나 클래스는 wrappedValue라는 속성을 포함합니다. wrappedValue 속성에 get과 set 메서드를 정의하여 값을 읽고 쓰는 동작을 커스터마이징할 수 있습니다.
projectedValue는 propertyWrapper의 추가적인 기능으로, 확장된 동작이나 추가 값을 제공하기 위해 사용됩니다. 이를 사용해 기본 wrappedValue 이외에도 추가적인 값을 이용할 수 있습니다. projectedValue는 주로 속성 래퍼 내부의 보조 속성으로 사용됩니다. 사용하려면 projectedValue라는 이름의 속성을 정의하면 됩니다
[참고]
'iOS' 카테고리의 다른 글
[Swift] 이미 사용된 변수 사용하기, 백틱으로 예약어를 식별자로 사용하기 (0) | 2024.07.04 |
---|---|
Xcode File Template 커스텀하기 (0) | 2024.06.14 |
Swift로 코딩테스트 시작하기, 시간복잡도, 공간복잡도, 입출력 (3) | 2024.03.29 |
[Xcode] 내 아이폰에서 앱 실행하기, 유선/무선 빌드하는 법 (0) | 2024.01.07 |