포스트

문법 (26) Property Wrappers (프로퍼티 래퍼)

Swift에서 Property Wrappers (프로퍼티 래퍼)의 개념과 활용법을 설명합니다.

문법 (26) Property Wrappers (프로퍼티 래퍼)

Property Wrappers (프로퍼티 래퍼)

Swift의 Property Wrappers(프로퍼티 래퍼) 는 프로퍼티의 공통적인 동작을 캡슐화하여 재사용성을 높이는 기능입니다.
이를 활용하면 코드를 더 간결하고 효율적으로 관리할 수 있습니다.

1. 기본적인 프로퍼티 래퍼 사용

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
@propertyWrapper
struct UpperCase {
    private var value: String = ""

    var wrappedValue: String {
        get { value }
        set { value = newValue.uppercased() }
    }

    init(wrappedValue: String) {
        self.wrappedValue = wrappedValue
    }
}

struct User {
    @UpperCase var name: String
}

var user = User(name: "alice")
print(user.name)  // ALICE
  • @propertyWrapper를 사용하여 값을 자동으로 대문자로 변환하는 래퍼 생성

2. projectedValue 활용

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
@propertyWrapper
struct Trimmed {
    private var value: String = ""

    var wrappedValue: String {
        get { value }
        set { value = newValue.trimmingCharacters(in: .whitespacesAndNewlines) }
    }

    var projectedValue: String {
        return "**\(value)**"
    }
}

struct Message {
    @Trimmed var text: String
}

var message = Message(text: "  Swift  ")
print(message.text)  // "Swift"
print(message.$text)  // "**Swift**"
  • projectedValue를 활용하면 래퍼의 추가 정보 제공 가능

3. 기본값을 가진 프로퍼티 래퍼

1
2
3
4
5
6
7
8
9
10
11
@propertyWrapper
struct DefaultValue {
    var wrappedValue: String = "N/A"
}

struct Product {
    @DefaultValue var name: String
}

let product = Product()
print(product.name)  // "N/A"
  • 기본값을 제공하는 래퍼를 활용하여 초기값을 지정 가능

4. Codable과 함께 사용

```swift struct User: Codable { @Trimmed var username: String }

let jsonData =

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.