[iOS/Swift] 타입 추론을 이용한 클로저 축약

이민경·2022년 10월 8일
0

Swift는 Type-Safe한 언어입니다.
...
필요한 값의 타입을 지정하지 않으면 Swift는 타입 추론 을 사용하여 적절한 타입을 계산합니다.
...
타입 추론은 Swift 코드를 더 간결하고 읽기 쉽게 만드는 데 도움이 됩니다.

애플이 제공하는 스위프트 공식 가이드 문서에서는 스위프트를 type-safe한 언어라고 소개함과 동시에 추론을 통해 코드를 더 간결하고 깔끔하게 만들어준다고 소개하고 있다.


오늘 이야기 할 클로저의 축약도 이 추론에 원리를 기반하고 있다.











클로저 축약하기

예시로는 Int 배열의 요소들에 2를 곱해서 새로운 배열을 반환하는 map 함수를 들어서 축약해보겠다!

0️⃣ 클로저의 기본 표현식

let multipliedArray : [Int] = array.map( { (element : Int) -> Int in
    return element * 2} )


1️⃣ return 생략

: 클로저에서 in 뒤에는 항상 return이 따라오므로 return이 생략 가능하다.

let multipliedArray : [Int] = array.map( { (element : Int) -> Int in element * 2} )


2️⃣ parameter, return 타입 생략

: 클로저가 들어가는 함수에서 클로저의 매개변수와 반환 값의 타입이 정의되어 있으므로 추론이 가능하다. 따라서 parameter와 return 타입 생략이 가능하다.

let multipliedArray : [Int] = array.map( { element in element * 2} )


3️⃣ parameter 생략

: 매개변수는 순서대로 $0, $1, $2 등 달러사인을 붙여 참조할 수 있다.
-> 매개변수 이름이 필요하지 않음. 매개변수 생략과 함께 in 없이 작성이 가능하다.

let multipliedArray : [Int] = array.map( { $0 * 2} )


4️⃣ 후행 클로저 문법

: 후행 클로저(매개변수로 마지막에 있는 클로저)인 경우, 소괄호 밖으로 클로저를 꺼낼 수 있다.
-> 후행 클로저 문법은 클로저가 길어지거나, 가독성이 떨어질 때 주로 사용한다.

let multipliedArray : [Int] = array.map { $0 * 2}




클로저의 최종 축약 형태

let array : [Int] = [1,2,3,4,5]
let multipliedArray : [Int] = array.map { $0 * 2}
print("\(multipliedArray)") // [2, 4, 6, 8, 10]

클로저는 위와 같이 깔끔하고 간결한 코드를 제공할 수 있는 다양한 방법을 제공한다.
하지만 코드에 축약이 난무하면, 나중에 본인이나 타인이 봤을 때 한 눈에 코드를 이해하기 어려울 수 있으므로 적절한 사용이 필요한 부분이다.















0개의 댓글