Programer/iOS

[Swift] 클로저 (Closure)

아즈샤 2017. 2. 28. 14:26
반응형

1. 클로저란?

특정 기능을 담은 코드를 블럭으로 모아둔 것

(Swift는 함수를 일급변수로 취급하므로 클로저 역시 매개변수로 활용이 가능)


1. 클로저의 3가지 모양


- 이름을 가지면서 어떤 값도 획득하지 않은 전역 함수의 형태

- 이름을 가진면서 다른 함수 내부의 값을 획득할 수 있는 중첩된 함수의 형태

- 이름이 없고 주변 문맥에 따라 값을 획득할 수 있는 축약 문법으로 작성된 형태


2. 기본 클로저 

- 클로저를 사용하지 않는 경우 sorted 매서드 사용

let names = ["scott", "azsha", "john"]


func backwards(first: String, second: String) -> Bool {

    return first > second

}


let reversed: [String] = names.sorted(by:backwards)


- 클로저의 기본 형태


{ (매개변수들) -> 반환 타입 in

실행 코드

}


let names = ["scott", "azsha", "john"]


let reversed:[String] = names.sorted(by:{(first: String, second: String) -> Bool in

    return first > second

})


3. 후행클로저

마지막 매개변수로 오는 클로저는 () 닫은 후에 와도 상관 없음

let names = ["scott", "azsha", "john"]


let reversed:[String] = names.sorted(){(first: String, second: String) -> Bool in

    return first > second

}


또한 ()가 없어도 됨

let names = ["scott", "azsha", "john"]


let reversed:[String] = names.sorted{(first: String, second: String) -> Bool in

    return first > second

}


4. 표현 간소화

- 문맥을 통한 유추

let names = ["scott", "azsha", "john"]


let reversed:[String] = names.sorted(){(first, second) in

    return first > second

}


- 단축 인자 이름

let names = ["scott""azsha""john"]


let reversed:[String] = names.sorted(){

    return $0 > $1

}


- 암시적 반환 표현

let names = ["scott""azsha""john"]


let reversed:[String] = names.sorted(){ $0 > $1 }


5. 연산자 함수를 클로저의 역할로 활용

let names = ["scott""azsha""john"]


let reversed:[String] = names.sorted(by: >)


6. 클로저의 값 획득

함수 안에 있는 값을 클로저가 획득하는 경우 클로저 외부 함수가 종료 한다 하더라도 클로저 안의 값은 사라지지 않는다.

이로인해 생기는 강한참조 순환 문제가 발생하는데, 이것은 차후에 다루기로 한다.


7. 클로저는 reference 타입

클로저는 reference 타입이므로 복사 할 경우, 같은 클로저를 가르키게 된다.



8. 탈출 클로저 (@escaping)

- 클로저가 함수의 매개변수로 들어가 다시 리턴(호출) 되는 경우 필요

- 클로저가 함수의 매개변수로 들어가 외부에 있는 변수에 저장되는 경우 필요


9. 자동 클로저 (@autoclosure)

- 클로저를 만들어두면 자신을 호출하기 전에는 실행하지 않고 가지고만 있음 -> 연산 지연을 통한 코드 실행 제어 수월

- 자동 클로저를 이용하면 클로저의 형식에서 { } 를 제외하고 사용할 수 있음

- 그러나 이해하는데 어려움이 있어 조직원과 규칙을 정하고 사용함을 권장함

 

반응형