본문 바로가기

Swift 공부

Property Wrapper

이번에 운이 좋게 좋은기업의 이직 면접을 볼 기회가 있어 기술면접을 보게 되었는데 
과제리뷰를 진행하는 과정에서 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

 

Swift) 프로퍼티 정복하기 (2/4) - 연산 프로퍼티(Computed Property)

안녕하세요!! 소들입니다 :) 저번 포스팅에서 프로퍼티의 종류엔 3가지가 있고, 그중 저장 프로퍼티에 대해 공부 했어요!!! 모른다면 이 포스팅 참조 이번에 공부할 내용은 연산 프로퍼티라는 것

babbab2.tistory.com

 

상당히 정리가 잘된자료가있어 첨부하고 설명을 생략한다

해당 프로퍼티로 설정한 값에 필요한 처리를 진행한후 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 가 출력이된다.

 

연산프로퍼티가 적용된 대문자가 출력되는것을 확인 할 수 있다.

 

혹시라도 이 글을 읽으시는 분들은 무엇인가를 사용하고있다면 까먹지마세요... 끝나고나니 상당히 창피하고 꼭 사용하는 기술은 원리와 동작을 이해하면서 사용하기 필수입니다. 그래도 면접을통해 다시한번 공부 할 수 있는 기회를 얻었고 복습할 계기가 되어 의미있는 시간이였습니다.