본문으로 바로가기

[Swift] 함수의 타입이랑 일급객체

category Swift/문법 2022. 5. 17. 14:35

클로저에 대해서 알아보기 전 사전공부로 함수의 타입 및 일급객체에 대해서 알아보겠음

 

1. 함수의 타입

함수의 종류?

함수에는 파라미터와 리턴타입의 유무의 기준으로 크게 4가지 종류가 있다고 볼수있음ㅇㅇ

함수의 종류

물론 파라미터나 리턴타입이 여러개가 있는 함수도 있지만 크게 나누자면 저렇게 4개로 나눌수 있음

 

함수의 타입

함수의 타입은 '->' 를 기준으로 앞에는 함수의 파라미터로 받는 타입, 뒤에는 리턴해주는 타입으로 이루어져있음

뭔소린지 모를수도 있을것같은데 그건 제가 글솜씨가 워낙 구려서 그럼

대신 이걸보면 이해될거임

솔직히 이거보고 이해 안되면 개발 접어야한다고 생각함ㅋ

그러면 파라미터나 리턴이 여러개 있는 함수는 타입이 어떻게 표시되냐

 

이렇게 표시됨

별로 어려운거 아니니까 이해했다고 믿겠음

 

 

 

2. 1급객체

위에서 함수의 타입에 대해서 설명한 이유는 바로 1급객체를 설명하기 위함임

결론먼저 말하면 스위프트에서 함수는 1급객체임

그럼 1급객체는 무엇이냐 그걸 알아볼거임ㅇㅇ

 

1급객체란?

1. 변수나 데이터에 할당할수 있어야한다

2. 함수의 파라미터로 넘길수 있어야 한다

3. 함수의 리턴값으로 리턴할수 있어야 한다

 

위 세가지 조건을 만족하면 그것은 1급객체임

 

그럼 스위프트에서 기본타입 즉, String, Bool, Int, Double 등은 1급객체이나요?

ㅇㅇ 당연히 변수에 할당이 가능하며 함수의 파라미터나 리턴값에 사용할수 있기때문에 1급객체임

 

 

스위프트의 함수는 1급객체?

위에서 이미 말했듯이 스위프트의 함수는 1급객체임

그말은 함수를 변수에 할

당하거나 함수의 파라미터 및 리턴값에 사용할수 있다는것임

 

일단 설명에 들어가기 전에 주의할점을 먼저 말할려함

함수의 실행
함수의 할당

위 두게의 코드는 당연하게도 다른코드임

위에코드는 함수의 실행 결과를 변수에 할당하는것이고(리턴값이 있을경우)

밑에 코드는 함수의 표기법을 사용해서 함수 자체를 변수에 할당하는것임

함수를 변수를 할당하고 싶으면 꼭 함수의 표기법을 사용해서 할당해줘야함

 

1. 함수를 변수에 할당하는 경우

함수를 변수에 할당한 경우

변수에 함수가 할당됐으므로 변수를 함수처럼 사용가능하다

지금같은경우는 변수의 타입을 명시해줬지만 안해줘도 타입추론으로 타입이 정해진다

cnts라는 변수에 changeNumToString(num:) 함수가 할당된다
cnts변수는 타입 자체가 함수이기때문에 일반 함수를 사용하는것처럼 사용할 수 있다

 

2. 함수를 함수의 파라미터에 전달하는 경우

함수의 파라미터로 함수를 전달하는 경우

함수를 실행하면서 파라미터로 함수를 전달받게 되고 전달받은 함수는 실행되는 함수의 내부에서 실행된다

즉 cnts에 changeNumToString(num:) 함수가 할당되고 실행된다

 

3. 함수에서 함수를 리턴하는 경우

함수에서 함수를 리턴하는 경우

함수의 실행결과가 반환한 함수가 된다

함수의 실행결과 자체가 함수가 되기때문에 바로 이어서 실행할수 있다

 

함수가 1급객체면 좋은점?

1.고차함수를 만들수 있다

2.  콜백을 사용할수 잇다

3. 함수형 프로그래밍이 가능하다

 

위 내용들은 나중에 기회대면 설명해보는걸로 하고

클로저에 대해서 설명하기 전에 이 내용에 대해서 먼저 설명하는 이유는 위 내용들이 클로저랑 크게 관련이 있기 때문임

 

개인적으로 처음 스위프트를 공부할때 처음으로 막힌부분이 클로저인데

위 내용을 공부하고 다시 공부하니 전에 이해가 안되던 부분이 많이 이해됐음

 

다음부턴 클로저에 대해서 알아보겠음

 

 

끝!