내배캠 2-5 Closure

STONE·2024년 11월 1일

Swift_Ios

목록 보기
11/44

Closure

클로저란..

클로저는 코드에서 일급 객체로 취급되는 익명 함수로, 변수나 상수에 할당하거나 다른 함수에 인자로 전달할 수 있다. 클로저는 함수와 비슷한 역할을 하며, 클로저는 함수와 유사하지만 매개변수 이름을 생략할 수 있고, 참조를 캡처하여 사용할 수 있다.

//클로저의 종류
// Named Closure
// Unnamed Closure

// Named Closure -> 이름이 있는 함수
func doSomething(){
	print("hi")
}

// Unnamed Closure -> 이름이 없는 함수 : 보통 클로저하면 이름이 없는 함수를 말하긴 함
let closure = { print("hi")}

클로저 형식

// in 키워드는 매개변수와 반환 타입 선언 부분을 실행 코드 부분과 구분해 준다.

{ (매개변수들) -> 반환타입 in
	실행할 코드
}

클로저 예제

  1. 기본적인 클로저 사용
let sayHello = { (name: String) -> String in
	return "Hello, \(name)!"
    }

print(sayHello("Alice"))
  1. 함수의 인자로 전달 -> 클로저는 함수의 매개변수로 전달할 수도 있습니다.
func performAction(action: () -> Void){
	action()
}
    
performAction{
	print("Action")
}

클로저의 간소화

Swift는 클로저의 간소화를 지원하기 때문에 간소하게 작성할 수 있다.
1. 매개변수와 반환 타입 추론 : 클로저가 매개변수로 전달될 때는 타입을 추론할 수 있기 때문에 타입을 생략할 수 있다.
2. 축약 인수 이름 사용: $0, $1등 축약 이름으로 매개변수를 간단히 참조할 수 있습니다.
3. 단일 표현식: 클로저가 한 줄일 경우 return 키워드를 생략할 수 있습니다.

let numbers = [5, 3, 6, 1, 9]
// $0 < $1은 첫 번째 요소와 두 번째 요소의 비교
let sortedNumbers = numbers.sorted(by: {$0 < $1})
print(sortedNumbers)

클로저의 캡처

-> 클로저는 자신이 선언된 문맥의 상수와 변수를 캡처하여, 그 이후에도 해당 값에 접근할 수 있다.

func makeIncrementer(incrementAmount: Int) -> () -> Int{
	var total = 0
    // 클로저 부분
    let incrementer: () -> Int = {
		total += incrementAmount
        return total
    }
    // 쿨로저 반환
    return incrementer
}

let incrementByTwo = makeIncrementer(incrementAmount: 2)
print(incrementByTwo())
print(incrementByTwo())

클로저의 주요 사용 사례

  1. 컬렉션 정렬 : sorted, filter, map
  2. 비동기 작업 : 네트워킹, 데이터베이스 처리에서 완료 핸들러로 사용
  3. UI 업데이트 : 버튼 클릭 시 이벤트 핸들러로 사용
  • 클로저는 코드의 유연성과 가독성을 높이지만, 순환 참조 문제를 주의해야 한다.
profile
흠...?

0개의 댓글