본문 바로가기

Programming/Swift

Key path를 활용한 Swift Closure 활용하기

반응형

키 경로를 사용하여 코드를 더 읽기 쉽고 효율적으로 만드는 방법을 소개하도록 하겠습니다.
다음과 같이 회사의 이름 및 public 여부 등을 나타내는 Company struct가 있다고 해보겠습니다.

struct Company {
    let name: String
    let isPublic: Bool
    let stockPrice: Int
}

let companies: [Company] = [
    Company(name: "Apple", isPublic: true, stockPrice: 140),
    Company(name: "Facebook", isPublic: true, stockPrice: 12),
    Company(name: "Google", isPublic: false, stockPrice: 333),
    Company(name: "Tesla", isPublic: false, stockPrice: 1200),
    Company(name: "Visa", isPublic: true, stockPrice: 1222)
]

이중에서 isPublic한 회사를 추출하고 싶을 때 기존에는 아래와 같이 확인할 수 있었는데요

func getPublicCompany() {
    let publicCompanies = companies.filter { company in
        company.isPublic 
    }.compantMap { company in
        company.name 
    }

    print(publicCompanies)
}


["Apple", "Facebook", "Visa"]

위의 방법을

Key Path를 통해 아래와 같이 표현할 수 있습니다. 기존 방식보다 더욱 간결해지고 읽기 쉬운 방식입니다.

func getPublicCompany() {
    let publicCompanies = companies.filter(\.isPublic).map(\.name)

    print(publicCompanies)
}

["Apple", "Facebook", "Visa"]

만약, filter 부분에 조건이 여러개 필요한 경우라면?
아래와 같이 사용하면 좋을 것 같습니다.

struct Company {
    let name: String
    let isPublic: Bool
    let stockPrice: Int

    var shouldSave: Bool {
        if isPublic {
            return false
        }

        if stockPrice > 1000 {
            return true
        }

        return false
    }
}

func shouldSaveCompany() {
    let publicCompanies = companies.filter(\.shouldSave).map(\.name)

    print(publicCompanies)
}

["Tesla"]

출처: https://www.youtube.com/watch?v=2Inr35G-tW4

반응형