iOS/Swift

클로저 2편

밤새는 탐험가89 2024. 2. 8. 04:39

 

 

클로저는 다음 2개를 말함 

 

Named Closure

func someFunc {
    print("Named Closure")
}

 

Named Closure는 그냥 함수라고 부름

 

 

Unnamed Closure

let someClosure = {
    print("Unnamed Closure")
}

 

이름을 붙이지 않고 사용하는 함수 = 클로저

 

클로저는 Named Closure & Unnamed Closure 둘 다 의미하지만, 

보통은 Unnamed Closure라고 지칭함

 

 

★ 클로저는 함수이기 때문에 1급 객체 함수의 특성 갖고 있음 ★ 

 

 

 

클로저 표현식

 

키워드 "in"을 기준으로 

Closure Head 라고 부르고, 

Closure Body 라고 부름 

{
    (Parameters) -> Return Type in 
    실행 구문
}

 

 

 

Parameter와 Return Type이 없는 클로저 

 

클로저는 함수로써, 1급 객체 특성을 가짐

따라서 상수에 클로저 대입 가능 

 

let someClosure = { () -> () in 
    print("some Closure")
}

 

 

위에 처럼 Return Type이 없는 경우, 생략 가능 

(단, Return Type이 있어도 생략 가능 + Parameter도 생략 가능)

 

 

 

Parameter와 Return Type이 있는 클로저

 

let someClosure = { (title: String) -> String in 
    return "Great! \(title)"
}

 

 

★ 여기서 "title"은 Parameter Name 이고, Argument Label은 아님 ★

(클로저에서는 Argument Label은 사용하지 않음)

 

 

여기서 someClosure를 호출하려면?

someClosure("무한도전")

// 아래는 오류 발생 
someClosure(title: "무한도전")

 

 

 

클로저는 1급 객체로서 사용 가능 

 

클로저를 변수 또는 상수에 대입 가능 

let someClosure = { () -> () in 
    print("some Closure")
}

 

 

기존의 클로저를 새로운 상수나 변수에 대입 가능 

 

let anotherClosure = someClosure

 

 

함수의 Parameter Type으로 클로저 전달 가능 

 

func someFunction(someClosure: () -> ()) {
    someClosure()
}

 

 

someClosure라는 함수를 파라미터로 전달 받는 someFunction이라는 함수 있음 

이 경우, 함수보단 클로저로 전달할 수 있음 

 

someFunction(someClosure: { () -> () in 
    print("Hello")
}

 

 

여기서 클로저는 다음과 같음 

 

{ () -> () in 
    print("Hello")
}

 

 

함수의 반환 타입으로 클로저 사용 가능 

 

func someFunction() -> () -> () {
}

 

 

실제 값을 return 할 때 함수가 아닌 클로저를 리턴할 수 있음 

 

func someFunction() -> () -> () {

    return { () -> () in
        print("Some Closure")
    }
}

 

 

호출하는 방법은 다음과 같음 

 

let someClosure = someFunction()
someClosure()


// Some Closure

 

 

 

클로저 실행

 

클로저를 실행하는 방법은 2가지임 

 

 

클로저가 대입된 변수나 상수로 호출

let someClosure = { () -> () in 
      print("Great!!! Closure")              
  }

someClosure()
// Great!! Closure

 

 

클로저를 직접 실행하기 

 

이 경우는 일회성으로 사용하는데 

클로저( ) 소괄호로 감싸고, 코드 마지막에( ) 소괄호를 붙임 

({ () -> () in 
      print("Great!!! Closure")              
})()

// Great!!! Closure

 

'iOS > Swift' 카테고리의 다른 글

클로저 4편  (0) 2024.02.10
클로저 3편  (0) 2024.02.10
클로저 1편  (0) 2024.02.06
접근제어  (0) 2024.02.05
인스턴스 생성 및 소멸 6편 (인스턴스 소멸)  (0) 2024.02.02