nyancoder

Property Wrapper를 이용하여 파라메터의 속성 제한하기 본문

Swift

Property Wrapper를 이용하여 파라메터의 속성 제한하기

nyancoder 2021. 8. 1. 19:17

Swift의 Property Wrapper를 사용하여, 전달되는 파라메터의 속성을 제한하는 방법을 알아볼 것입니다.

 

예를 들어 사용자의 입력을 받아 최대 20자의 제목을 등록하는 예를 들어 볼 것입니다.

 

기존 방법

이전에는 함수를 만들고 제약 사항을 벗어나면 예외를 만들거나, assert문으로 검증하는 아래와 같은 방법이 대표적이었습니다.

예를 들어 assert로 처리하면 아래와 같습니다.

func register(title: String) {
    assert(title.count <= 20)
    
    // do something..
}

또는 내부적으로 20자가 넘는 문자열을 20자로 잘라줄 수 있을 것입니다.

func register(title: String) {
    let validTitle: String
    if title.count > 20 {
        validTitle = String(title.prefix(20))
    } else {
        validTitle = title
    }
    
    // do something..
}

하지만 이러한 코드는 전달받는 파라메터의 속성을 명확하게 드러나게 해주지 않습니다.

 

Property Wrapper를 활용한 방법

Property Wrapper로 전달인자를 감싸면, 전달인자의 타입을 변경하거나, 호출하는 쪽의 수정 없이도 위와 같이 자동으로 최대 길이를 결정할 수 있습니다.

@propertyWrapper struct Truncated {
    let maxLength: Int
    var wrappedValue: String {
        didSet { wrappedValue = String(wrappedValue.prefix(maxLength)) }
    }
    
    init(wrappedValue: String, maxLength: Int) {
        self.wrappedValue = wrappedValue
        self.maxLength = maxLength
    }
}

func register(@Truncated(maxLength: 20) title: String) {
    // do something..
}

또한 전달인자에 명확하게 제약 사항이 표시되기 때문에, 해당 함수를 사용할 때 보다 제약사항을 쉽게 알 수 있습니다.

또한 Truncated라고 선언해둔 PropertyWrapper는 여러곳에 사용 될 수 있기 때문에, 전체의 코드가 같은 형식으로 전달인자의 제약사항을 표시하게 되어 전달인자의 제약사항의 표시가 통일된 규칙을 이루게 되는 것 또한 장점입니다.

 

'Swift' 카테고리의 다른 글

Swift의 Actor와 구현 가볍게 살펴보기  (0) 2021.07.25
Comments