Swift 클로저

  • 스위프트 클로저를 다루기전에 알아야하는 개념이 있다.
  • 바로 일급 객체라는 것이다.

  • 다음과 같은 조건을 만족하는 것을 일급 객체라고 할 수 있다.

    • 변수나 데이터 구조안에 담을 수 있다.
    • 파라미터로 전달 할 수 있다.
    • 반환값(return value)으로 사용할 수 있다.
    • 할당에 사용된 이름과 관계없이 고유한 구별이 가능하다.
    • 동적으로 프로퍼티 할당이 가능하다.

  • 우리가 스위프트에서 알고 있는 대부분의 것은 일급 객체라고 할 수 있지만.
  • 메소드는 일급 객체가 아니고, 클로저가 존재하는 이유이기도 하다.

클로저의 유형

  • 클로저의 유형은 3가지로 나눠볼수 있다.

    • Global function
    • Nested function
    • Closure expressions

Global function

  • Global function은 우리가 흔히 알고 있는 함수이다.
  • 클래스 밖의 함수라고 할 수 있다.

Nested function

  • Nested function은 중첩 함수라고 말한다.
  • 함수 내부에서 다시 함수를 정의해서 사용하는 함수이다.
  • 외부에는 숨겨져 있고, 선언된 함수 내부에서만 호출이 가능하다.
func chooseStepFunction(backward: Bool) -> (Int) -> Int
{
    func stepForward(input: Int) -> Int { return input + 1 }
    func stepBackward(input: Int) -> Int { return input - 1 }
    
    return backward ? stepBackward : stepForward
}

Closure expressions

  • 이것이 흔히 클로저라고 불리는 유형이다.
  • 문법은 다음과 같다.
{(parameters) -> return type in
    statements
}

클로저의 변수 할당

  • 클로저는 일급 객체이기 때문에 변수에 할당될 수 있다.
let closureValue = {(name:String) in print(name) }
    
closureValue("hohyeonmoon")

관련 글