티스토리 뷰
클로저
- 이름이 없는 익명 함수
- 이름이 없는 코드의 묶음이다.
- 이름 없이 호출할 수 있는 형태로 사용된다.
- 클로저와 함수는 기능은 완전히 동일하지만, 형태가 다르다.
- 클로저가 함수보다 더 큰 범위이다.
- Python의 lambda와 동일하다.
함수와 클로저의 비교
// 함수의 타입 표기법
let functionA: (String) -> String // 1)파라미터 문자열, 2)리턴형 문자열
let functionB: (Int) -> () // 1)파라미터 정수, 2)리턴형 없음
let functionC: (String) -> Void // 1)파라미터 문자열, 2)리턴형 없음
// 함수로 표현
func aFunction(str: String) -> String {
return "Hello, \\(str)"
}
// 클로저로 표현 -> **중괄호**는 클로저라고 생각하자.
let _ = { (str: String) -> String in
return "Hello, \\(str)"
}
let aClosureType = { () -> () in // 변수에 담아서 호출 가능
print("안녕")
}
Swift는 함수를 1급 객체로 취급한다.
- 함수를 변수에 할당할 수 있다.
- 함수를 파라미터로 전달할 수 있다.
- (함수에서) 함수를 반환할 수 있다.
func aFunction1(_ param: String) -> String {
return param + "!"
}
func aFunction2(name: String) -> String {
return name + "?!??"
}
// 1. 함수를 변수에 할당할 수 있다.
var a: (String) -> String = aFunction1
a("안녕")
a = aFunction2
a("hello")
// 2. 함수(클로저)를 변수에 할당하여 파라미터로 전달할 수 있다.
let closureType = { (param: String) -> String in // 클로저 리터럴
return param + "!"
}
함수에서 클로저로 변형시키기
- 함수의 이름을 없앤다.
- 중괄호를 맨 앞으로 보내고, 그 자리에 **in**을 넣는다.
- 리턴형은 보통 생략한다. (타입 추론 가능)
- 타입 추론이 가능한 경우, 파라미터의 자료형을 생략한다. (대부분 생략 가능)
func add(a: Int, b: Int) -> Int {
let result = a + b
return result
}
{ (a, b) in
let result = a + b
return result
}
앨런님의 강의를 듣고 공부하며 정리한 글입니다.
'Swift > Swift 문법' 카테고리의 다른 글
[클로저 - 3] 클로저 문법 최적화 (0) | 2022.12.28 |
---|---|
[클로저 - 2] 클로저를 사용하는 이유 (0) | 2022.12.28 |
[중첩 타입] 중첩타입 사용 이유와 예제 (0) | 2022.12.27 |
[SwiftUI 5.7] if let 바인딩 (0) | 2022.10.11 |
[데이터 타입] 딕셔너리(Dictionary) (0) | 2022.04.02 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- CHR
- Code up
- 부르트포스
- Swift
- 이것이 코딩테스트다
- 16진수 입력
- 코드 업
- do while
- COMMIT
- replit
- ord
- 정답
- 깃허브
- SwiftUI
- 설명
- 레플릿
- 반복문
- 기초 100제
- for문
- python
- baekjoon
- 파이썬
- 프로그래머스
- CodeUp
- 코드업
- 깃
- level1
- 백준
- 시간초과
- 리플릿
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |
글 보관함