Swift-Closure(클로저)

아토시스·2023년 8월 22일
0

Swift

목록 보기
6/14
post-thumbnail

클로저는 일정 기능을 하는 코드를 하나의 블록으로 모아놓은 것을 말한다!

함수를 만들어 변수에 할당하고, 해당 변수를 사용하여 해당 함수를 호출하고, 해당 함수를 다른 함수에 매게 변수로 전달 할 수도 있다. 이러한 방식으로 사용되는 함수를 클로저라고 하며 함수처럼 작동하지만 약간 다르다..

여기서 질문 ..!!!

클로저는 무엇이며 Swift에서 왜 이렇게 많이 사용될까 ?

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

  1. 딜레이 후 일부 코드를 실행한다.
  2. 애니메이션이 완료된 후 일부 코드를 실행한다.
  3. 다운로드가 완료되면 일부 코드를 실행한다.
  4. 사용자가 메뉴에서 옵션을 선택한 경우 일부 코드를 실행한다.

1. 클로저에서 매개변수 사용

클로저에서 매개변수는 {} 안에 나열된다. 클로저가 매개변수를 받아들이도록 하려면 {} 바로 뒤 () 안에 나열한 다음 in 을 작성하여 클로저가 시작된다는 것을 알 수 있도록 작성해야한다.

예시로 다음과 같이 장소 이름 문자열을 유일한 매개변수로 받아들이는 클로저를 만들 수 있다.

let driving = { (place: String) in
    print("저는 차를타고 \(place)에 가고있습니다.")
}

여기서 함수와 클로저의 차이점 중 하나는 클로저를 사용할 때는 변수레이블을 사용하지 않는다는 점이다.

아래와 같이 호출할 수 있당!!

driving("병원")
//저는 차를타고 병원에 가고있습니다.

2. 클로저와 함수의 매개 변수 갖는 방식의 차이

함수

func pay(user: String, amount: Int) {
    // code
}

클로저

let payment = { (user: String, amount: Int) in
    // code
}

함수의 매개변수 괄호가 중괄호 안으로 들어왔다고 생각하면 편할 거 같다 ㅎㅎ. in 키워드는 매개변수 끝에 있고 , 클로저의 본문이 시작한다고 표시하고 있다.

매개변수와 클로저 본문은 모두 동일한 코드 블록의 일부이며 변수이다.
만약 in가 없으면 클로저 본문이 시작되는 위치를 알기 어렵기 때문에 아주 중요하다구 한다 ~


3. 클로저에서 값 반환

클로저는 값을 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)

그렇다면 매개변수가 없는 클로저에서 값을 반환하는 방법은 ??

  1. 하나의 매개변수를 받아들이고 아무것도 return 하지 않는 클로저

  1. 하나의 매개변수를 받아들이고 Bool을 return 하는 클로저

  1. 매개변수를 받아들이지 않고 값을 반환하는 것은 불가능하기 때문에 , 대신 다음과 같이 매개변수 목록에 빈 () 를 사용해야한다.

profile
오늘보다 더 나은 내일이 되길 바라며

0개의 댓글