본문 바로가기

iOS

computed property로 코드 예쁘게 적는 법

728x90

Computed property란?


클래스, 구조체 또는 열거형 내에서 정의되는 프로퍼티의 한 유형이다.
이 프로퍼티는 값을 직접 저장하지 않고, 대신 호출될 때마다 특정 연산을 수행하여 값을 계산해서 제공한다.

쉽게 말해 저장 프로퍼티에 의존하거나 다른 계산을 통해 동적으로 값을 결정해준다.

keypath 표현식(\)이란?

\는 키 경로(Key Path)를 나타내는 표기법이다.
키 경로는 객체의 특정 프로퍼티로의 접근 경로를 나타내고 데이터 바인딩이나 값 관찰, 컬렉션의 요소등을 다룰 때 유용하게 사용된다.

type safe한 방식으로 객체의 프로퍼티에 접근할 수 있다.

struct Person {
    var name: String
}

let person = Person(name: "John")
let keyPath = \Person.name

let name = person[keyPath: keyPath]
print(name) // 출력: John

computed property 적용 전

let models = appSearchResult.results.map { result -> DetailModel in
    return DetailModel(appIcon: result.artworkUrl100,
                       title: result.trackName,
                       description: result.description,
                       company: result.sellerName,    
                       mockupImage: result.screenshotUrls)
}

위 코드는 appSearchResult.results 배열의 각 요소를 DetailModel로 변환하는 과정이다.

computed property 적용 

    var uiModel: DetailModel { .init(appIcon: artworkUrl100,
                                     title: trackName,
                                     description: description,
                                     company: sellerName,
                                     mockupImage: screenshotUrls)
    }
let models = appSearchResult.results.map(\.uiModel)​


computed property는 값을 직접 저장하지 않으므로 extension에 작성이 가능하다.
AppResult 구조체에 uiModel이라는 computed property를 추가하여 DetailModel을 반환하게 했다.

그 결과, map 함수 내에서 복잡한 클로저 대신 키 경로를 사용하여 간결하게 표현을 할 수 있게 되었다.

레퍼런스


https://www.avanderlee.com/swift/computed-property/

 

What is a Computed Property in Swift?

Computed Properties allow you to define values based on other properties. Define a property in an extension and always consider performance.

www.avanderlee.com

 

https://woozoobro.medium.com/swift%EC%97%90%EC%84%9C-key-path-%ED%91%9C%ED%98%84%EC%8B%9D-%EC%89%BD%EA%B2%8C-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0-5956923a8976