Swift/기초 문법

클로저 기본

수줌이 2021. 2. 10. 13:00

⭐ 클로저? 

  • 클로저는 실행가능한 코드 블럭입니다.

  • 함수와 다르게 이름정의는 필요하지는 않지만, 매개변수 전달반환 값이 존재 할 수 있다는 점이 동일합니다.

  • 함수는 이름이 있는 클로저입니다.

  • 일급객체로 전달인자, 변수, 상수 등에 저장 및 전달이 가능합니다.

 

1. 클로저 문법

  • 클로저는 중괄호{ }로 감싸져있습니다.

  • 괄호를 이용해 파라미터를 정의합니다.

  • -> 을 이용해 반환 타입을 명시합니다.

  • "in" 키워드를 이용해 실행 코드와 분리합니다.

{(매개변수 목록) -> 반환 타입 in
	/* 실행 코드 */
}

 

2. 클로저 사용

// 함수를 사용한다면
func sumFunction(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
}
sumResult = sum(1, 2)
print(sumResult) // 3 (함수를 사용할때와 같음)

// 함수는 클로저의 일종이므로
// sum 변수에는 당연히 함수도 할당할 수 있습니다
sum = sumFunction(a:b:)

sumResult = sum(1, 2)
print(sumResult) // 3

 

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

  • 클로저는 주로 함수의 전달인자로 많이 사용됩니다.

  • 함수 내부에서 원하는 코드블럭을 실행 할 수 있습니다.

let add: (Int, Int) -> Int
add = { (a: Int, b: Int) -> Int in
	return a+b
}

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

func calculate(a: Int, b: Int, mtd: (Int, Int) -> Int) -> Int {
	return mtd(a,b)
}

var after_calculate : Int
after_calculate = calculate(a: 50, b: 10, method: add)
// add(a,b)
print(after_calculate) // 60

// 혹은 아래와 같이 써도 됨
after_calculate = calculate(a: 50, b: 10, method: {( left: Int, right: Int) -> Int in
		return left*right
})
print(after_calculate) // 500

 

이 글은 Boostcourse에서 배운 내용을 정리하여 작성하였습니다.