24.07.01 Today I Learned
2024. 7. 1. 20:51
오늘은 클로저를 복습해봤다.
강의 자료에도 나와 있듯이 클로저는 이름없는 함수 즉, 코드 블록을 말한다.
[ 함수를 만들어 변수에 할당하고, 해당 변수를 사용하여 해당 함수를 호출하고, 해당 함수를 다른 함수에 매개 변수로 전달할 수도 있다. ] 이러한 방식으로 사용되는 함수를 클로저라고 하며 함수처럼 작동하지만 약간은 다르게 작성된다.
또한 클로저는 상수나 변수의 참조를 캡쳐해 저장할 수 있다.
- Swift의 클로저는 주변 환경에 있는 변수나 상수를 캡쳐해 저장하고, 이를 나중에 사용할 수 있도록 한다. 이것은 클로저가 생성될 때 클로저가 참조하는 변수 또는 상수의 값에 대한 복사본을 유지하고 저장하는 매커니즘이다.
- 값(value) 캡쳐 : 클로저가 변수나 상수의 값을 캡처한다. 이 때, 클로저 내부에서 캡쳐한 값이 변경되어도 원본의 값(value)은 변경되지 않는다.
- 참조(reference)캡쳐 : 클로저가 변수나 상수의 참조를 캡쳐한다. 따라서 클로저 내에서 해당 변수나 상수를 변경하면 원본 값도 변경된다.
// 값 캡처
func makeIncrementer(forIncrement amount: Int) -> () -> Int {
var total = 0
// 클로저를 반환합니다.
let incrementer: () -> Int = {
// total 변수를 캡처하여 저장합니다.
total += amount
return total
}
return incrementer
}
let incrementByTen = makeIncrementer(forIncrement: 10)
print(incrementByTen()) // total = 10, 결과: 10
print(incrementByTen()) // total = 20, 결과: 20
// 참조 캡처
class SimpleClass {
var value: Int = 10
}
func createClosure() -> (() -> Int) {
let instance = SimpleClass()
// 참조 캡처를 사용하여 SimpleClass의 인스턴스를 캡처합니다.
let closure: () -> Int = {
// 클로저가 참조하는 인스턴스의 속성을 업데이트합니다.
instance.value *= 2
return instance.value
}
return closure
}
// 클로저 생성
let myClosure = createClosure()
print(myClosure()) // 20
print(myClosure()) // 40
// 클로저 내부에서 참조된 인스턴스의 속성을 변경하였으므로 원본에도 영향을 줍니다.
- 클로저는 일반적으로 기능을 저장하기 위해서 사용한다
- 클로저는 비동기 처리가 필요할 때 사용할 수 있는 코드 블록이다. (반드시 비동기에만 사용하는건 아님)
- 클로저는 클래스와 마찬가지로 참조 타입(reference type)이다.
추가로 내일 협업 프로젝트가 진행되는데 GitHub에 팀 레퍼지토리를 만들고 Test xcode파일을 만들어서 Terminal로 깃클론을 받았다.
'Today I Learned > 2024' 카테고리의 다른 글
24.07.04 Today I Learned (0) | 2024.07.04 |
---|---|
24.07.02 Today I Learned (0) | 2024.07.02 |
24.06.28 Today I Learned (0) | 2024.06.28 |
24.06.27 Today I Learned (0) | 2024.06.27 |
24.06.26 Today I Learned (0) | 2024.06.26 |