[swift] 프로퍼티 래퍼(Property Wrappers)

목차

프로퍼티 래퍼란?

프로퍼티 래퍼는 getter와 setter를 커스텀화하는 데 사용됩니다. 이것은 속성의 값이나 동작을 관리하거나 메모리에 접근할 수 있는 방법을 변경할 수 있게 해줍니다.

프로퍼티 래퍼는 @propertyWrapper 속성을 사용하여 정의됩니다. 사용자는 getter와 setter의 작동 방식을 정의할 수 있고, 이를 통해 속성에 대한 구성을 제어할 수 있습니다.

프로퍼티 래퍼의 사용 예

프로퍼티 래퍼를 사용하면 코드의 반복을 줄이고 가독성을 높일 수 있습니다. 예를 들어, 값을 제한하거나 변경하기 위해 매번 동일한 코드를 작성하는 대신, 프로퍼티 래퍼를 사용하여 이러한 로직을 한 곳에 정의할 수 있습니다.

@propertyWrapper
struct TwelveOrLess {
    private var number = 0
    var wrappedValue: Int {
        get { return number }
        set { number = min(newValue, 12) }
    }
}

struct Example {
    @TwelveOrLess var value: Int
}

var example = Example()
print(example.value) // 출력: 0
example.value = 10
print(example.value) // 출력: 10
example.value = 15
print(example.value) // 출력: 12

위의 코드는 TwelveOrLess 래퍼를 사용하여 value의 값을 제한하고 있습니다.

UserDefault 래퍼 사용하기

프로퍼티 래퍼를 사용하여 UserDefault 값을 쉽게 관리할 수도 있습니다.

@propertyWrapper
struct UserDefault<T> {
    let key: String
    let defaultValue: T
    var wrappedValue: T {
        get { UserDefaults.standard.object(forKey: key) as? T ?? defaultValue }
        set { UserDefaults.standard.set(newValue, forKey: key) }
    }
}

struct Settings {
    @UserDefault(key: "isDarkModeEnabled", defaultValue: false)
    static var isDarkModeEnabled: Bool
}

Settings.isDarkModeEnabled = true
print(Settings.isDarkModeEnabled) // 출력: true

위의 코드는 UserDefault 래퍼를 사용하여 UserDefault 값을 가져오고 설정하는 예시입니다.

마무리

프로퍼티 래퍼를 사용하면 코드를 더 간결하고 유지보수하기 쉽게 작성할 수 있습니다. 이러한 래퍼들을 사용하여 Swift 코드를 깔끔하게 구성하여 보다 효율적으로 관리할 수 있습니다.

참고 자료