클로저(Closure)

Swift/문법 2021. 1. 28. 21:30

클로저

- 코드의 블록

- 일급 시민(first citizen)

- 변수, 상수 등으로 저장, 전달 인자로 전달이 가능

- 함수 : 이름이 있는 클로저

 

클로저 정의 문법

- 매개 변수가 필요 없을 시 ()만 사용 가능

- 반환 타입이 없으면 Void를 쓰면 됨

 

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

실행코드

}

 

* 함수를 사용할 경우

func sumFuntion(a: Int, b: Int) -> Int {

return a + b

}

 

var sumResult: Int = sumFunction(a: 1, b: 2)

 

print(sumResult) // 3

 

* 클로저의 사용

var sum: (Int, Int) -> Int = { (a: Int, b: Int) -> Int in

return a + b

}

//(Int, Int) -> Int 클로저의 타입 표현

 

sumResult = sum(1, 2)

print(sumResult) // 3

 

// 함수는 클로저의 일종이므로 sum 변수에는 당연히 함수도 할당할 수 있음

sum = sumFunction(a:b:)

 

sumResult = sum(1, 2)

print(sumResult) // 3

 

 

함수의 전달 인자로서의 클로저

- call back의 용도로 많이 사용

 

let add: (Int, Int) -> Int

add = { (a: Int, b: Int) -> Int in

return a + b

}

 

let substract: (Int, Int) -> Int

substract = { (a: Int, b: Int) -> Int in

return a - b

}

 

let divide: (Int, Int) -> Int

divide = { (a: Int, b: Int) -> Int in

return a / b

}

 

func calculate(a: Int, b: Int, method: (Int, Int) -> Int) -> Int {

return method(a, b)

}

 

var calculated: Int

 

calculated = calculated(a: 50, b: 10, method: add)

 

print(calculated) // 60

 

calculated = calculated(a: 50, b: 10, method: substract)

 

print(calculated) // 40

 

calculated = calculated(a: 50, b: 10, method: divide)

 

print(calculated) // 5

 

calculated = calculated(a: 50, b: 10, method: { (left: Int, right: Int) -> Int in

return left * right

})

// 코드 블록을 넘겨주면 실행 가능한 코드들을 묶어줘서 함수로 전달

 

print(calculated) // 500

'Swift > 문법' 카테고리의 다른 글

프로퍼티(property)  (0) 2021.01.28
클로저 고급  (0) 2021.01.28
값 타입과 참조 타입(value type / reference type)  (0) 2021.01.27
열거형(enum)  (0) 2021.01.27
클래스  (0) 2021.01.27
Posted by khon98
,