본문 바로가기
IOS App Programming/Swift

[Swift] 클로저 - 클로저란?, 후행 클로저, 클로저 표현 간소화

by B_Tori 2023. 3. 20.

클로저란?

  • 일정 기능을 하는 코드를 하나의 블록으로 모아놓은 것
  • 함수는 클로저의 한 형태 -> 함수 = 이름이 있는 클로저
  • 기본클로저 표현과 후행 클로저 표현 등 존재하며,
    각 표현 내에서 가독성을 해치지 않는 선에서 표현을 생략하거나 축약할 수 있다.

기본 클로저 문법

{ (매개변수 목록) -> 반환타입 in
    실행 코드
}

주로 클로저는 함수의 전달인자로 많이 사용된다.

아래는 기본 클로저의 예시와 전달인자로 사용된 클로저이다.

실행 결과

add와 substract라는 상수에 클로저를 할당하고 calculate라는 함수의 전달 인자로 method라는 클로저를 받아서 실행시켜 준다.

 

후행 클로저

후행 클로저는 함수나 메서드의 마지막 전달인자로 위치하는 클로저는 함수나 메서드의 소괄호를 닫은 후에 작성하는 것이다.

  • 맨 마지막 전달 인자로 전달되는 클로저에만 해당되므로 전달 인자로  클로저 여러 개를 전달할 때는 맨 마지막 클로저만 후행 클로저로 사용할 수 있다.
  • 단 하나의 클로저만 전달 인자로 전달하는 경우에는 소괄호를 생략해 줄 수 도 있다.

실행 결과

첫 번째는 전달 인자로 클로저를 바로 넣어줬을 때 마지막에 있는 전달 인자이기 때문에 소괄호 안이 아닌 소괄호 밖에 클로저를 넣어주었다.

두 번째 hello 함수는 method라는 String을 반환하는 클로저 하나만 전달 인자로 받고 있다.

따라서 hello함수의 소괄호를 생략해 준 모습이다.

 

클로저 표현 간소화하기

  • 타입 생략
    전달 인자로 전달할 클로저는 이미 적합한 타입을 준수하고 있다고 유추할 수 있다. 따라서 컴파일러는 문맥에 따라 적절히 타입을 유추할 수 있기 때문에 매개 변수의 타입이나 반환 값의 타입을 굳이 표현하지 않고 생략할 수 있다.
  • 단축 인자 이름
    첫 번째 전달 인자부터 $0, $1, $2,... 순서로 표현할 수 있다. 
    이렇게 단축 인자 이름을 사용하게 되면 매개변수 및 반환 타입과 실행 코드를 구분하기 위해 사용했던 키워드 in을 사용할 필요도 없어진다.

실행 결과

 

댓글