#클로저 Closure ?

함수와 메서드는 클로저에서 시작 한다.

func _____로 정의되어 있는 함수와 메서드도 엄밀히 말하면 클로저이지만(named closure),

보통 클로저라고 언급할 때는 이름이 없는, unnamed closure를 말한다.

✔︎ closure

  1. **이름 없는 함수 ⇒ 클로저**
  2. 이름 있는 함수 ⇒ 함수/메서드

따라서 클로저도 함수이기 때문에, 함수형 프로그래밍이 가능하다.

이는 스위프트 함수가 **1급 객체(1st class object)**의 특성을 가지고 있기 때문인데..

✔︎ **1급 객체** ?

1등 시민처럼, 많은 권한을 부여 받은 것!

얼마나 많은 것을 할 수 있는데?

1. 변수 또는 상수에 `함수`를 담을 수 있다.
2. 인자(파라미터)로 `함수`를 전달할 수 있다.
3. 반환값(리턴벨류)으로 `함수`를 전달할 수 있다.

함수는, 클로저에서 시작한다. 따라서,

1. 변수 또는 상수에 `클로저`를 담을 수 있다.
2. 인자(파라미터)로 `클로저`를 전달할 수 있다.
3. 반환값(리턴벨류)으로 `클로저`를 전달할 수 있다.

라는 말이 된다.

# 1급객체 함수

👉 (String) -> BoolFunction Type

//(String) -> Bool
let tupleExample = (1, true, "dkd", 3.3)
tupleExample.0 //.을 통해서 접근

let tupleExample: (Int, Bool, String, Double)

이렇게 튜플 타입이 유동적인 것처럼, 함수의 타입도 유동적!