클로저란(Closure)?

이진욱(JIN WOOK)·2024년 11월 10일
0

제비에관하여(Swift)

목록 보기
1/10

네이버 블로그 2024. 11. 2. 22:06 에 작성된 글을 옮겨왔습니다.

애플과 관련된 개발자가 되기로 마음 먹으시고 공부를 하신분들은 느끼실 것이다.
클로저와 관련된 내용은 다른 내용보다 유독 강의양이 많다.
그리고 이해하기가 좀 힘들다.
왜 그런지는 모르겠지만 중요한 내용인가보다.
나도 사실 개념만 알고 제대로 공부 해본적이 없었다.
클로저와 함수는 일급객체다.이름이 없는 함수이다.
이정도?

클로저를 정복하기 위해서 공식문서를 한번 보자

https://bbiguduk.gitbook.io/swift/language-guide-1/closures

?
뭔소리냐 이게?

약간의 개념을 알고 있는 상태에서 정독했지만 도통 무슨소리인지 모르겠다.
하지만 이번 계기로 공식문서 기반으로 공부를 해보자.
(프로그래밍도 "교과서 위주로 공부했어요"가 통할까?)

공식문서상 클로저는 함수의 생성 "함수명()" 이런거 없이 실행 할수 있는 이름이 없는 함수이다.

라고 하니
이렇게 알고 사용문법을 한번 알아보자.

공식문서상 예제코드를 조금 보기 편하게 바꿔봤다.

공식문서는 초보자들을 위한게 아닌거 같다;;
sorted메서드에 대해서 설명이 너무 부족하다;;
sorted(by: )메서드의 파라미터로는
(파라미터, 파라미터) -> Bool 의 형태의 함수를 통째로 함수를 받을수도 있고
수를 비교하면서 Boolean (true,false) 값을 받을수 있다고 까지만 생각하자
이건 배열을 정렬해서 새로운 배열을 만들어서 리턴해주는 메서드 이다.

아무튼 일반적인 함수 표현식으로는 이렇게 작성이 가능한데

클로저의 경우 위와 같이 줄여서 표현이 가능하다.
또한 바로 전달이 가능하다.
변경된 코드는 이렇다.

실행해보면 결과는 동일하다.
클로저는 이름이 없는 함수이기때문에 실행문 구별을 in으로 하게 된다.
나는 이렇게 생각했다.
이름이 있는 함수는 {} 로 가두고
클로저는 in을 통해 실행문을 가둔다.

이제 클로저의 흥미로운 부분이 시작된다.
클로저는 코드를 줄이려고 만든게 아닌가 싶을 정도로 축약문법이 다양하게 존재한다.

파라미터 타입을 생략할수 있다.

이경우 Int라는 배열에 접근해서 클로저를 전달하는것이기 때문에
sorted 메서드를 기반으로 (Int, Int) -> Bool 이라는 형태를 클로저는 유추를 할수 있는것이다.

리턴문 생략이 가능하다.

위와 동일한 이유로 return형도 Boolean으로 명확하기 때문에 생략이 가능하다.

심지어 이렇게 명확한 경우
죄다 생략하고

Boolean값만을 리턴하는 표현식만 담을수도 있다.

$0 - > 첫번째 파라미터
$1 -> 두번째 파라미터 라는뜻

흠 우선 여기까지만 봤을때는 클로저를 쓰는 이유는
코드의 가독성도 좋아지고 간편한 코드작성도 가능해진다.
또 변수처럼 다룰수있어 ( 파라미터로 전달)
함수안에 함수를 넣는 작업이 더욱 간편해진다.

편하니까 쓰는거같다(우선은!)

다음글은 후행클로저,캡처값,클로저는 참조타입 에 대해서 글을 작성할 예정입니다.

profile
기술로부터 소외 되는 사람이 없도록 우리 모두를 위한 서비스를 만들고 싶습니다.

0개의 댓글

관련 채용 정보