클로저

김윤홍·2024년 7월 13일
post-thumbnail

클로저
한글번역 문서
공식문서 링크

클로저는 개념이 정말 어려운것 같다.. 처음 봤을때는 이해가 안되고 지금은 어느정도 이해가 되었다 싶은데.. 조금만 문법이 복잡해지면 어려워져서 가볍게 정리를 한번더 하려고 한다.!

클로저는 그냥 이해하기 쉽게 이름없는 함수라고 생각을 해왔다 그런데 축약표현이 많아질 수록.. 또는 문법이 조금 복잡해질수록 더욱 알기 어려워지는것 같다.

클로저는 왜사용할까? 그냥 함수작성 하면 되는거아니야?

클로저를 사용하는 이유 중 하나는 기능을 저장하는 것에 있다. 반드시 필요하지만 지금은 사용하지 않을때?
예를 들어 비동기적인 상황에 어떤 Task가 끝나고 나서 수행해야 할 작업들을 클로저로 관리 하면 편하다.

클로저의 축약표현들

먼저 클로저의 기본 표현식은 다음과 같다.
클로저의 in 키워드는 클로저의 파라미터와 리턴 타입 정의가 끝남을 나타내며 클로저의 본문이 시작함을 알림
따라서 in은 파라미터와 리턴타입 그리고 클로저의 본문을 구분함.

{ (파라미터) -> (반환 타입) in
	클로저 식
}
  1. 타입의 추론
closure(param: { (str: String) in 
	return str.count
})

closure(param: { (str in
	return str.count
})
  1. 리턴 생략
closure(param: { str in
	$0.count
})
  1. 아규먼트 이름 축약
closure(param: {
	$0.count
})
  1. 트레일링 클로저(후행 클로저)

함수의 마지막 인수에 함수에 클로저 표현식을 전달해야하고 클로저 표현식이 긴 경우

closure() { $0. count }

0개의 댓글