[Swift] - 클로저와 클로저 표현식

sai06266·2023년 8월 29일
0

Swift 문법

목록 보기
2/9

클로저 표현식과 클로저는 비슷하지만 차이점이 있다.

클로저란?

함수나 클로저 표현식과 같은 독립적인 코드 블록과 코드 블록 주변에 있는 하나 이상의 변수가 결합된 것

  • 함수나 메서드와 비슷한 형태를 가지며 코드 블록으로써 사용되는 개체이다.
  • 이름 없이 독립적으로 실행 가능한 코드 블록을 나타내며, 함수와 비슷한 구조를 가지며 변수나 상수를 캡처(capture)하여 저장할 수 있다.
  • 주로 함수 내부에서 사용되거나 함수 인자로 전달되며, 코드를 캡슐화하고 모듈성을 높이는 데에 유용하다.
  • 파이썬의 람다(lambda)와 비슷한 개념

클로저는 크게 3가지의 형태를 띈다.

  • 전역 함수 - 이름이 있으며, 주변 환경에서 캡처할 어떤 값도 없는 클로저
  • 중첩 함수 - 이름이 있으며 자신을 둘러싼 함수로부터 값을 캡처할 수 있는 클로저
  • 클로저 표현식 - 이름이 없으며 주변 환경으로부터 값을 캡처할 수 있는 경량 문법으로 작성된 클로저

클로저 표현식이란?

독립적인 코드 블록이다.

let sayHello = { print("Hello") }
sayHello()

위의 코드가 클로저 표현식을 선언하고 상수에 할당하여 상수 참조를 통해 함수를 호출한 것이다.

클로저 표현식은 매개변수를 받아 결과값을 반환하도록 할 수도 있다.

{(<매개변수 이름>: <매개변수 타입>, <매개변수 이름>: <매개변수 타입>,...)-><반환 타입> in
	//클로저 표현식 코드
}
//example
let multiply = {(_ val1:Int, _ val2:Int) -> Int in
	return val1 * val2
}
let result = multiply(10, 20)

클로저 표현식은 이름을 갖지 않으며, 매개변수와 반환타입은 괄호 안에 포함하고, 클로저 표현식 코드의 시작을 알리기 위해 in키워드를 사용한다.

클로저 표현식은 비동기 메서드 호출에 대한 완료 핸들러를 선언할 때 종종 사용된다. 예를 들면, ios 어플리케이션을 개발할 때 어떤 작업을 백그라운드에서 작업하게 해서 어플리케이션이 다른 작업을 계속 할 수 있도록 운영체제에게 요청해야하는 경우가 종종 생기는데, 이때는 시스템이 어플리케이션에게 작업이 완료된 것을 알리고 작업을 호출할 때 선언했던 완료 핸들러를 호출하여 결과를 반환한다. 완료 핸들러가 주로 클로저 표현식의 형태로 구현된다.

0개의 댓글