오늘부터 이제 클로저에 대해서 알아볼거임
그 전에 일급객체라는거에 대해서 알면 좋음
모르면 이거 보는거 추천함
https://jmin-developer.tistory.com/43
[Swift] 함수의 타입이랑 일급객체
클로저에 대해서 알아보기 전 사전공부로 함수의 타입 및 일급객체에 대해서 알아보겠음 1. 함수의 타입 함수의 종류? 함수에는 파라미터와 리턴타입의 유무의 기준으로 크게 4가지 종류가 있다
jmin-developer.tistory.com
아 그리고 클로저부턴 좀 복잡해서 메모리 관련 설명도 할 예정임
클로저란?
클로저란 이름(익명)이 없는 함수라 할 수 있음
?? 그냥 함수쓰면 되지 왜 이름없는 함수가 필요함 ??
클로저는 보통 함수를 실행할때 전달하는 형태로 사용됨
그렇기때문에 이름이 필요가 없음
지금은 뭔소린지 이해안돼도 이 클로저 시리즈가 끝날때쯤이면 이해될거임 아마도
그리고 함수의 파라미터로 전달할 수 있기 때문에 클로저는 일급객체임
클로저의 형태

클로저는 이렇게 생겼음
?? 클로저는 이름이 없다하지 않았음? 저 someClosure는 이름이 아니면 뭐임 ??
헷갈리면 안되는게 someClosure는 클로저를 담는 상수일뿐 클로저 자체의 이름은 아님
하나하나 살펴보겠음

먼저 클로저의 타입임
Int형 값을 두게 받고 Int값을 리턴해주는 타입임
이게 뭔소린지 모르면 위 링크의 글을 읽고오는걸 추천함
저기 중괄호 안에있는 내용이 진짜 클로저라 할 수 있는데
일단 저기 in 전후로 나눌수 있음
전에 있는것부터 보자면 일단 (a, b)는 클로저의 파라미터임
Int값 두개를 받아서 a와 b라는 상수에 할당하겠다라는 뜻이라 이거임
-> Int는 리턴타입이고
in 후에 있는것은 그냥 클로저의 실행문임
이렇게 클로저는 in 을 기준으로 클로저의 헤더와 본문이 나뉨

방금 클로저와 동일한 일을 하는 함수임
보면서 비교해보면 클로저의 문법이 어떤식인지 이해할 수 있을거임
함수의 파라미터와 클로저
위에서 클로저는 함수를 실행할때 전달한다고 했잖슴
그거에 대해서 알아보겠음

doSomething 함수에서 closure라는 파라미터로 () -> Void 타입의 클로저를 받아서 실행해주고 있음
이 함수의 실행결과는
"함수시작"
"함수종료"
가 될거임
그냥 doSomething 함수에서 "함수종료"까지 출력하면 되는걸 왜 굳이 클로저로 실행하냐면은
클로저로 실행시 원하는대로 정의할 수 있어 활용도가 늘어나기 때문임
이게 뭔소리냐 하면 만약 저 함수를 종료한 다음에 "함수종료"가 아닌 "함수 끝!!!" 이라는걸 출력하고 싶을수도 있잖슴
이럴때 클로저로 실행하는게 유리하다는거지
즉, 클로저의 실행문에 따라 같은 함수라도 다르게 동작할 수 있다는거임
이해가 잘 안되면 다른얘를 들어보겠음

이걸 보면 좀더 명확이 이해될거라 생각함
doSomething 내에서 closure를 실행하고 그 결과값을 출력하는 함수임
그런데 이제 closure는 클로저이기 때문에 그 실행문을 어떻게 작성하냐에 따라서 출력결과가 달라지는거임
실제 클로저를 사용하는 함수
스위프트에 기본 내장되있는 함수도 클로저를 사용하는 함수가 많음
그중 하나만 예를 들어보겠음

map 이라는 함수인데 대충 설명해서 배열을 받아서 배열의 요소들을 잘 어떻게 지지고 볶아서 새로운 배열을 리턴하는 함수임
그 지지고 볶는 방법을 클로저에서 실행하고 실제로 클로저의 실행문이 달라지니 결과도 달라지는것을 볼 수 있음
?? 근데 저거는 위에서 본 클로저의 형태랑 좀 다른것같은데 ??
그거는 이제 다음글에서 클로저의 문법최적화라는것으로 알아볼거임
암튼 오늘 기억할건 이거임
클로저는 이름이 없는 함수이며 주로 함수를 실행할때 전달해서 사용한다
아 그리고 대충 눈치 챘겠지만 함수 뒤에 블록이 있으면 그건 99.999% 확률로 클로저임
-끝-