[iOS] Closure 1

Closure

Closure
중괄호 { } 로 감싸진 실행 가능한 코드블록을 말한다.

어떤 상수나 변수의 참조를
캡쳐 [ capture ] 해서 저장할 수 있다.

Swift 는 이 캡쳐와 관련한 모든 메모리를
알아서 처리한다.

매개변수를 받을 수 있고,
반환 값이 존재할 수 있다는 점에서 함수와 동일하다.


Closure 를 사용하는 이유

클로저를 사용하는 가장 일본적인 이유 중 하나는
기능을 저장하는 것이다.

클로저를 통해, 일부 기능을 단일 변수로 마무리하고
어딘가에 저장할 수 있다.

기능에서 return 하고
클로저를 다른 곳에 보관할 수 있다.


Closure 는 크게 세 가지로 나눌 수 있다.

🌵 Global Function

'Named Closure' 라고도 한다.
func 라는 키워드를 이용해 이름을 붙여주는,
'함수'라고 부르는 것이 이에 해당된다.

🌵 중첩 함수 [ Nested Function ]

함수 내부에서 다시 함수를 정의하여 사용하는 함수이다.

내부 함수는 숨겨져있고,
선언된 함수 내부에서만 호출이 가능하다.

// example1

func calcDecrement(forDecrement total: Int) -> () -> Int {
    var overallDecrement = 0
    
    func decrementer() -> Int {
        overallDecrement -= total
        return overallDecrement
    }
    return decrementer
}

let decrem = calcDecrement(forDecrement: 30)
print(decrem()) // -30

🌵 Closure expression

'Unnamed Closure' 라고도 하며,
일반적으로 클로저라고 부르는 것이 이에 해당된다.


{(parameters) -> return type in
	// statements
}

클로저는 일급 객체이기 때문에
변수에 할당 될 수 있다.

// example2

let closureValue = { (name: String) in print(name) }

closureValue("Eugenie") // Eugenie

함수의 매개변수로 전달 될 수 있다.

// example3

func closureOperation(closure: () -> Void) {
	// Some code here
}
일급 객체

▶️ 변수나 데이터 구조 안에 담을 수 있다.
▶️ 매개변수로 전달 할 수 있다.
▶️ 반환값으로 사용할 수 있다.
▶️ 할당에 사용된 이름과 관계없이 고유한 구별이 가능하다.
▶️ 동적으로 프로퍼티 할당이 가능하다.

Closure Parameter

클로저에서 매개변수는 { } 안에 나열된다.

클로저가 매개변수를 받아들이도록 하려면,
다음과 같이 작성하면 된다.

// example4

let favorite = { (color: String) in
	print("My favorite color is \(color)!")
}

favorite("blue") // My favorite color is blue!

in 은 클로저가 시작된다는 것을 알려주는 것이다.

호출할 때는
함수와는 달리, 변수레이블을 사용하지 않는다.


📚 Reference
Swift 의 Closure
Swift) 클로저(Closure) 정복하기(1/3) - 클로저, 누구냐 넌
Swift: 기초문법 [#1 클로저 기본 - Closure]

좋은 웹페이지 즐겨찾기