안녕하세요, iOS 개발하는 루피입니다!
오늘은 저번 시간에 이어 클로저 문법 경량화(최적화)에 대해 정리해 보도록 하겠습니다.
바로 시작하겠습니다.
클로저의 문법 경량화
클로저 문법 사용 방식을 최적화하여 간단하게 코드를 작성하는 방식을 말합니다.
쉽게 이해할 수 있도록 몇 개의 단계로 나누어 순차적으로 말씀드리겠습니다.
한번 아래의 형식을 경량화해보겠습니다. 예시는 공식문서에 나와 있는 filter(:_)를 가지고 왔습니다!!
let arr[1,2,3,4,5,6,7,8,9]
arr.filter(isIncluded: (Int) throws -> Bool)
arr.filter({ (num: Int) -> Bool in
return num.isMultiple(of: 2)
})
print(result)
1. 파라미터 타입을 생략합니다.
arr.filter({ (num) -> Bool in
return num.isMultiple(of: 2)
})
print(result)
2. 리턴형을 생략합니다.
arr.filter({ (num) in
return num.isMultiple(of: 2)
})
print(result)
-> 이렇게 파라미터 타입과 리턴형을 생략할 수 있는 이유는 컴파일러 입장에서는 똑같기 때문입니다.
3. 파리미터 키워드를 생략하고 in keyword도 제거 가능하다.
in 키워드의 역할은 파라미터와 리턴 값을 구별해 주는 용도입니다.
이젠 num으로 접근을 못하기에 $0으로 바꿔주면 됩니다.
arr.filter({
return $0.isMultiple(of: 2) // short-hand argument name $n
})
print(result)
4. 리턴문 하나뿐이라면 생략 가능합니다.
하지만, 다른 것이 포함되어 있다면 절대 해서는 안됩니다.
arr.filter({ $0.isMultiple(of: 2) }) // implicit return
print(result)
5. 괄호 뒤로 빼준다.
arr.filter() { $0.isMultiple(of: 2) } // inline closure
print(result)
6. 괄호 안에 아무것도 없다면 괄호를 지울 수 있습니다.
arr.filter{ $0.isMultiple(of: 2) } // trailing closure
print(result)
어떤가요? 이해가 잘 가시나요? 문법이 경량화된 것이 느껴졌다면, 오케이입니다.
오늘도 화이팅입니다!
'iOS > Swift' 카테고리의 다른 글
| [Swift] 함수형 프로그래밍(Functional Programming) 2/2 (0) | 2025.01.13 |
|---|---|
| [Swift] 함수형 프로그래밍(Functional Programming) 1/2 (1) | 2025.01.13 |
| [Swift] 클로저(Closure) 1/2 (5) | 2025.01.13 |
| [Swift] 접근 제어자 (Access Control) (0) | 2025.01.12 |
| [Swift] Set (0) | 2025.01.05 |