Tags :

Date :

클로저

클로저 표현식

 {(parameters) -> returnType in
    실행구문
 }

클로저 종류

  • Named Closure = 함수
  • Unnamed Closure

클로저는 Argument Label을 사용하지 않는다.

  • 클로저는 둘다 포함하지만 보통 Unnamed Closure를 말한다.
  • 클로저도 익명이긴 하지만 함수이기 때문에, 함수형 프로그래밍이 가능하다.
  • Swift의 함수와 클로저는 1급 객체(First-Class Citizen)로 동작한다.

1급 객체

  • 프로그래밍 언어에서 값처럼 다룰 수 있는 객체를 의미한다.
  • 1등 시민처럼, 많은 권한을 부여 받은 것

권한

  • 변수 또는 상수에 함수/클로저를 담을 수 있다.
  • 인자(파라미터)로 함수/클로저를 전달할 수 있다.
  • 반환값(리턴벨류)으로 함수/클로저를 전달할 수 있다.

클로저와 함수 차이

  • 클로저는 상위 스코프 변수 캡처 가능
  • 함수는 캡처 기본 제공 x

용도

  • 클로저 - 일회성 로직 전달(ex. 콜백)
  • 함수 - 명시적 로직 분리
func doSomething() {
    print("hello world")
}
let closuredoSomething = { print("hello world") }



func doSomething2(name: String) {
    print("hello world \(name)")
}
let closuredoSomething2 = { (name: String) -> Void in
    print("hello world \(name)")
}
let closuredoSomething22: (String) -> Void = { name in
    print("hello world")
}

func doSomething3(name: String) -> String {
    return name
}
let closuredoSomethihg3: (String) -> String = { name in
    return name
}

func doSomething4(closure: () -> ()) {
    closure()
}

let closuredoSomethihg4: () -> () = {
    print("test")
}


@main
struct Main {
    static func main() {
        // doSomething()
        // closuredoSomething()
        doSomething2(name: "인덱스")
        closuredoSomething2("인덱스2")
        
        doSomething4(closure: closuredoSomethihg4)
        
        // MARK: - 마지막 매개변수가 클로저이면 후행 클로저를 사용할 수 있다.
        doSomething4 {
            closuredoSomethihg4()
        }
    }
}

## reference

- https://babbab2.tistory.com/81

Leave a comment