이번에 운이 좋게 좋은기업의 이직 면접을 볼 기회가 있어 기술면접을 보게 되었는데
과제리뷰를 진행하는 과정에서 Property Wrapper를 사용한 코드에 대해 질문을 주셨고
한참을 고민하다가 답변을 드렸는데 잘 몰라서 이상하게 답변을 했고 면접이 끝나고 찾아보니 뭐 당연히 틀린내용을 ㅜㅜ
실패는 성공의 어머니라고 하지 않은가... 기억안나면 복습하면되지뭐
Property Wrapper
직독직해 해보면 속성 래퍼 라고 하는데 이게 뭘하느냐는 잠시뒤에 말해드리고
SwiftUI를 사용해보신분들이라면 @State , @Binding같은 것들을 많이 보았을텐데 이런것들을 Property Wrapper라고 한다.
이게 뭐냐? 컴파일러에게 이 타입은 특별한거야! 라고 소개를 해줍니다.
그럼 어떻게사용하냐
실제로 사용하고있던 Property Wrapper다
@propertyWrapper
struct Storage {
private var defaultValue: String
//필수값
var wrappedValue: String {
get {
defaultValue
}
set {
defaultValue = newValue.uppercased()
}
}
init(wrappedValue initialValue: String) {
self.defaultValue = initialValue
}
}
이렇게 사용할수있는데 wrappedValue가 하는역활이 무엇이냐?
Swift 의 연산프로퍼티를 보면 이해가 가능한데
https://babbab2.tistory.com/119
상당히 정리가 잘된자료가있어 첨부하고 설명을 생략한다
해당 프로퍼티로 설정한 값에 필요한 처리를 진행한후 defaltValue에 값을 전달한다 라고 생각하면 편하다.
(면접 질문에서 프로퍼티레퍼 클래스보시고 이거 사용하냐고 물어보셨는데 안한다고 답변함 쥐구멍사요~~~)
그리고 실제사용은
@propertyWrapper
struct Storage {
private var defaultValue: String
var wrappedValue: String {
get {
defaultValue
}
set {
print("변경전 \(newValue)")
defaultValue = newValue.uppercased()
print("변경값 \(newValue.uppercased())")
}
}
init(wrappedValue initialValue: String) {
self.defaultValue = initialValue
}
}
struct TESTStruct{
@Storage(wrappedValue: "qweqwe")
var item : String
init(){
print(item)
}
}
var item = TESTCLASS()
print(item.item) //qweqwe 초기값이나오고
item.item = "abcdefg"
print(item.item) //연산프로퍼티가 적용된 ABCDEFG 가 출력이된다.
연산프로퍼티가 적용된 대문자가 출력되는것을 확인 할 수 있다.
혹시라도 이 글을 읽으시는 분들은 무엇인가를 사용하고있다면 까먹지마세요... 끝나고나니 상당히 창피하고 꼭 사용하는 기술은 원리와 동작을 이해하면서 사용하기 필수입니다. 그래도 면접을통해 다시한번 공부 할 수 있는 기회를 얻었고 복습할 계기가 되어 의미있는 시간이였습니다.
'Swift 공부' 카테고리의 다른 글
ViewModel에 Driver를 사용하면 안티패턴? (2) | 2022.04.14 |
---|---|
RxSwift Disposable 이란? (0) | 2022.04.13 |
RxMoya를 직접 만들어서 사용해보자 (0) | 2022.04.08 |
RxDataSources Multiple Object Multiple Section (1) | 2022.04.08 |
Swift Throw Error Handling (0) | 2022.04.07 |