Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
kangddong opened this issue Jan 17, 2023 · 2 comments
Open

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

kangddong opened this issue Jan 17, 2023 · 2 comments

Comments

@kangddong
Copy link
Contributor

No description provided.

@Lim-YongKwan
Copy link

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

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

@obtusa07
Copy link

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants