클로저는 일정 기능을 하는 코드를 하나의 블록으로 모아놓은 것을 말한다!
함수를 만들어 변수에 할당하고, 해당 변수를 사용하여 해당 함수를 호출하고, 해당 함수를 다른 함수에 매게 변수로 전달 할 수도 있다. 이러한 방식으로 사용되는 함수를 클로저라고 하며 함수처럼 작동하지만 약간 다르다..
여기서 질문 ..!!!
클로저를 사용하는 가장 일반적인 이유 중 하나는 기능을 저장하는 것이다.
클로저에서 매개변수는 {}
안에 나열된다. 클로저가 매개변수를 받아들이도록 하려면 {}
바로 뒤 ()
안에 나열한 다음 in
을 작성하여 클로저가 시작된다는 것을 알 수 있도록 작성해야한다.
예시로 다음과 같이 장소 이름 문자열을 유일한 매개변수로 받아들이는 클로저를 만들 수 있다.
let driving = { (place: String) in
print("저는 차를타고 \(place)에 가고있습니다.")
}
여기서 함수와 클로저의 차이점 중 하나는 클로저를 사용할 때는 변수레이블을 사용하지 않는다
는 점이다.
아래와 같이 호출할 수 있당!!
driving("병원")
//저는 차를타고 병원에 가고있습니다.
func pay(user: String, amount: Int) {
// code
}
let payment = { (user: String, amount: Int) in
// code
}
함수의 매개변수 괄호가 중괄호 안으로 들어왔다고 생각하면 편할 거 같다 ㅎㅎ. in
키워드는 매개변수 끝에 있고 , 클로저의 본문이 시작한다고 표시하고 있다.
매개변수와 클로저 본문은 모두 동일한 코드 블록의 일부이며 변수이다.
만약 in
가 없으면 클로저 본문이 시작되는 위치를 알기 어렵기 때문에 아주 중요하다구 한다 ~
클로저는 값을 return
할 수 있으며 방법은, 클로저 내부 in
키워드 바로 앞에 작성하면 된다.
let driving = { (place: String) in
print("저는 차를타고 \(place)에 가고있습니다.")
}
위의 코드는 단순히 driving()
클로저를 가져와서 출력하고 있다.
대신 아래처럼 문자열을 return
할 수도 있다.
let drivingWithReturn = { (place: String) -> String in
return "저는 차를타고 \(place)에 가고있습니다."
}
// 클로저 실행 후 return 값 출력
let message = drivingWithReturn("병원")
print(message)