함수는 타입인가?

J.Noma·2021년 10월 10일
0

Swift : 가벼운 주제

목록 보기
1/9
post-custom-banner

캠프 중 던져진 화두로 깊은 고민에 빠졌다

Swift에서 함수를 자유자재로 할당하고 사용한다는 것(a.k.a 일급객체)은 알고 있는데 타입인지는 의문이 들었다

아니 그전에 내가 타입이 무엇인지 설명하지 못한다는 것을 깨달았다


🐵 함수"타입"은 타입이다

우선, Swift에서는 타입들을 Named TypeCompound 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정수이다

즉, 정수타입과 정수의 관계는
타입과 인스턴스의 관계로 볼 수 있다

다시 돌아와서,
함수타입함수는 다른가?

다르다.
함수 타입은 타입이고 함수는 함수 타입의 인스턴스이다


🎉 결론

함수 타입은 타입이 맞다

하지만, 함수는 타입이 아니다
(함수 타입의 인스턴스 개념)

profile
노션으로 이사갑니다 https://tungsten-run-778.notion.site/Study-Archive-98e51c3793684d428070695d5722d1fe
post-custom-banner

0개의 댓글