캠프 중 던져진 화두로 깊은 고민에 빠졌다
Swift에서 함수를 자유자재로 할당하고 사용한다는 것(a.k.a 일급객체)은 알고 있는데 타입인지는 의문이 들었다
아니 그전에 내가 타입이 무엇인지 설명하지 못한다는 것을 깨달았다

우선, Swift에서는 타입들을 Named Type과 Compound Type으로 분류한다
둘은 명확한 시각적인 차이를 보인다
//Named type
let hisName: String = "Alex"
let hisAge: Int = 20
//Compound type
let hisAction: (Int) -> Bool = goToSchool
let hisParents: (mother: String, father: String) = ("Kim", "Jang")
Name type은 명확하고 통일된 타입으로 명시한다
(ex. String, Int)
Compound type은 이게 Function이다/Tuple이다를 명시하는게 아니라 요소들을 조합하여 마치 타입처럼 사용한다
(ex. (Int) -> Bool, (String, String))
결론적으로,
함수타입은 요소들을 조합하여 만들어내는 Compound type의 일종이므로 타입이다
여기까지 함수타입은 타입이 맞다는 사실을 증명했다
하지만, 원래 질문은 "함수는 타입인가?"하는 질문이었다
그렇다면 "
함수타입은 타입이다"라는 명제가
"함수는 타입이다"를 증명할 수 있을까?
우선, 함수타입과 함수가 같은 것인지 알아보자
이해의 편의를 위해 질문을 조금 바꿔보았다
정수타입과 정수는 다른가?
이 질문의 답은 생각보다 명확하게 떠올랐다
let number: Int = 10
위의 코드에서 Int는 정수타입이고 10은 정수이다
즉, 정수타입과 정수의 관계는
타입과 인스턴스의 관계로 볼 수 있다
다시 돌아와서,
함수타입과 함수는 다른가?
다르다.
함수 타입은 타입이고 함수는 함수 타입의 인스턴스이다
함수 타입은 타입이 맞다
하지만,
함수는 타입이 아니다
(함수 타입의 인스턴스 개념)