함수와 메서드는 클로저에서 시작 한다.
func _____
로 정의되어 있는 함수와 메서드도 엄밀히 말하면 클로저이지만(named closure
),
보통 클로저라고 언급할 때는 이름이 없는, unnamed closure
를 말한다.
✔︎ closure
이름 없는 함수 ⇒ 클로저
따라서 클로저도 함수이기 때문에, 함수형 프로그래밍이 가능하다.
이는 스위프트 함수가 **1급 객체(1st class object)**의 특성을 가지고 있기 때문인데..
✔︎ 1급 객체
?
1등 시민처럼, 많은 권한을 부여 받은 것!
얼마나 많은 것을 할 수 있는데?
1. 변수 또는 상수에 `함수`를 담을 수 있다.
2. 인자(파라미터)로 `함수`를 전달할 수 있다.
3. 반환값(리턴벨류)으로 `함수`를 전달할 수 있다.
함수는, 클로저에서 시작한다. 따라서,
1. 변수 또는 상수에 `클로저`를 담을 수 있다.
2. 인자(파라미터)로 `클로저`를 전달할 수 있다.
3. 반환값(리턴벨류)으로 `클로저`를 전달할 수 있다.
라는 말이 된다.
👉 (String) -> Bool
은 Function Type
//(String) -> Bool
let tupleExample = (1, true, "dkd", 3.3)
tupleExample.0 //.을 통해서 접근
let tupleExample: (Int, Bool, String, Double)
이렇게 튜플 타입이 유동적인 것처럼, 함수의 타입도 유동적!