후로훠티 래퍼 #5
leeinae
started this conversation in
Show and tell
Replies: 1 comment
-
진짜 꼭 리펙한다 ㅜ 감사합니다 |
Beta Was this translation helpful? Give feedback.
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
-
Property Wrapper
정의?
Swift 5.1에 추가된 문법 중 하나.
냥. 이름 그대로 프로퍼티를 감싼다
사이에 분리된 레이어를 추가해준다.
⇒
struct
,enum
,class
를 사용해서 다른 프로퍼티를 정의할 때 필요한 로직을 재사용할 수 있도록 한다.기본 형태
가 필요함
wrappedValue는 프로퍼티 래퍼에서 꼭 필요한 값이다. 없으면 컴파일 에러.
해당 프로퍼티 래퍼의 의도는, number에 어떤 값을 넣어도 12보다 작은 값이 지정되는 구조체를 가지도록 함.
사용할 때는, @ ← 어노테이션을 붙여 표시한다. 이 표시를 통해서 컴파일러에게 해당 프로터피를 프로퍼티 래퍼가 관리하길 원한다고 말해주는 것임..
적용한 모습임. 선언했던 프로퍼티 래퍼를 어노테이션으로 표시하고, 해당 값들을 호출하면
didSet
,willSet
처럼 작동한다.컴파일러
프로퍼티 래퍼를 추가했을 때 컴파일러가 수행하는 세 가지 작업
getter, setter를 생성해 그 속성을 계산하게 한다.
wrapper type의 저장 프로퍼티를 가짐
It introduces a stored property whose type is the wrapper type. ~
저장 프로퍼티를 초기화한다.
💡 **A property wrapper adds a layer of separation between code that manages how a property is stored and the code that defines a property.**프로퍼티 래퍼를 사용하지 않고 구현한다면?
많은 부분에서 중복이 발생한다 ..
프로퍼티 래퍼의 존재 이유는 관리 코드를 하나로 묶어서 추상화해놓고, 재사용하는 것이라고 생각함.
아 물론.. 커스텀해서 사용할 수도 있음. 그런데 wrappedValue라는 것을 굳이 참조하지 않아도 되니까 해당 프로퍼티 래퍼를 사용하자..
didSet, willSet과의 차이
defer
라는 키워드를 이용하는 .. 방법도 있음 (?)초기값 설정이 필요하다면, initializer를 추가할 수 있음
Projected Value
또, wrapped Value 외에도 projected Value를 추가할 수 있음. 투영된 값이라고 해석하면 될까나 싶다?
해당 값은 wrappedValue를 기반으로 다른 값을 투영해 사용할 수 있다.
어떤 타입이든 가능하고, property wrapper type과 동일한 접근 제한 레벨을 가져야함~!
얘도 wrappedValue와 마찬가지로 projectedValue라는 네이밍을 사용해야함.
대표적인 사용 예는 해당 값을 통해 propertyWrapper가 저장되기 전에 값이 조정(adjust)되었는지 확인하는 용도로 사용할 수도 있다.
접근 방법
해당 값은 $기호를 통해 접근할 수 있다.
wrapperedValue
projectedValue
사용 예
예시로는 bool 타입을 들어서 말했지만, 다른 데이터 타입도 사용할 수 있다. (self, instance 타입 등)
진짜 어디에 쓰이고 있는가!!
UserDefaults
WWDC 19에서 나온 예시임
코드 중복 꼬라지 좀 봐주삼
getter / setter에 forKey 파라미터만 달라지고 있다. 이것을 프로퍼티 래퍼로 추상화해보면,
Auto Layout
뷰의 translatesAutoresizingMaskIntoConstraints가 false여야 코드로 뷰의 오토레이아웃을 설정할 수 있음. 이 속성을 늘 해주지 않기 위해서 PropertyWrapper로 감싼다.
SampleFile
디버깅이나 테스트에 필요한 파일들을 정의할 수 있음.. mock .. json 이런 것?
요약..
Beta Was this translation helpful? Give feedback.
All reactions