LetsSwifty / iOS_Interview

iOS 면접 대비
MIT License
0 stars 0 forks source link

[8주차] property wrapper에 대해서 설명하시오. #15

Open kangddong opened 1 year ago

Lim-YongKwan commented 1 year ago

프로퍼티를 감싸 특별한 타입으로 만들어주는 기능입니다. 프로퍼티에 커스텀한 어떤 로직들을 매번 동일하게 지정해주지 않고 Property Wrapper로 만든 타입으로 프로퍼티를 선언해 동일 로직을 수행하도록 만들어 줍니다. 만일 property wrapper가 없다면 동일한 코드를 각 프로퍼티에서 작성을 해야 한다는 단점이 생깁니다. 주의해야 할 점으로는 지역변수에서만 사용가능하다는 점이 있습니다.

*출처 : https://green1229.tistory.com/238

obtusa07 commented 1 year ago

property wrapper

프로퍼티가 저장되는 방법을 관리하는 코드와 프로퍼티를 정의하는 코드 사이에 분리 계층을 추가하는 것 만약 쓰레드 안정성 검사나 기본 데이터를 데이터베이스에 저장하는 프로퍼티가 있다면 모든 프로퍼티에 이 코드를 작성해야 한다.

간단하게 말하면 @State도 프로퍼티 래퍼다. Swift 5.1에 추가된 기능이다. 기능을 프로퍼티 자체에 넣음으로서 보일러 플레이트를 줄이고 코드 재사용성을 높인다.

어떻게 사용?

한번 정의할 떄 관리 코드를 작성하고 여러 프로퍼티에 적용하여 해당 관리 코드를 재사용한다.

wrappedValue 프로퍼티를 정의한 struct, enum, class를 만든다.

아래 예시에서는 TwelveOrLess라는 Struct에서 래핑하는 값이 항상 12와 같거나 더 작은 숫자가 포함된다. 더 큰 숫자를 저장하도록 하면 12가 저장된다. 보면 struct 위에 @propertyWrapper라고 써준걸 볼 수 있다.

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

위의 코드에서 getter는 저장된 값을 반환하고 setter는 새로운 값이 12보다 작거나 같은 것을 확인하고 있다.

init을 넣을까?

넣으면 좋다. 왜냐면 init에서 type을 지정해주지 않으면 프로퍼티 래퍼를 이용하여 만들어진 ㅇㅇ 객체는 ㅇㅇ타입이 되어 버린다.

ref: https://bbiguduk.gitbook.io/swift/language-guide-1/properties#property-wrappers https://zeddios.tistory.com/1221