728x90
1. 정의
Swift에서 함수는 일급 객체로 취급되며, 변수에 저장하거나 다른 함수의 인자로 전달할 수 있고, 반환값으로 사용할 수도 있다.
2. 개념
일급 함수
프로그래밍에서 함수가 일반적인 데이터(정수, 문자열 등)처럼 취급될 수 있는 개념을 의미한다. 즉, 함수 자체를 값처럼 활용할 수 있으며, 변수에 저장하거나 다른 함수에 인자로 전달할 수 있고, 함수의 반환값으로도 사용할 수 있다.
주요 특징
- 변수에 할당 가능
- 함수를 변수나 상수에 저장할 수 있다.
- 함수의 인자로 전달 가능
- 다른 함수의 매개변수로 함수를 전달할 수 있다.
- 함수의 반환값으로 사용 가능
- 함수가 다른 함수에서 반환될 수 있다.
3. 문법 코드
// 함수를 변수에 할당 가능
let add: (Int, Int) -> Int = { (a, b) in return a + b }
let result = add(3, 5) // 8
// 함수를 매개변수로 전달 가능
func applyFunction(_ fn: (Int, Int) -> Int, _ a: Int, _ b: Int) -> Int {
return fn(a, b)
}
let sum = applyFunction(add, 4, 5) // 9
// 함수를 반환값으로 사용 가능
func makeMultiplier(_ factor: Int) -> (Int) -> Int {
return { number in number * factor }
}
let double = makeMultiplier(2)
let doubledValue = double(5) // 10
// 클로저 축약형 예시
let multiply: (Int, Int) -> Int = { $0 * $1 }
let product = multiply(3, 4) // 12
4. 예시 코드
// 더하기 함수를 변수에 저장하여 사용
let addFunction: (Int, Int) -> Int = { $0 + $1 }
let result1 = addFunction(10, 20) // 30
// 배열의 각 요소를 변환하는 함수 적용
let numbers = [1, 2, 3, 4, 5]
let squaredNumbers = numbers.map { $0 * $0 } // [1, 4, 9, 16, 25]
5. 사용 시 주의할 점
- 클로저 캡처에 주의해야 한다.
- 클로저 내부에서 외부 변수를 참조할 경우, 캡처 방식(strong, weak 등)에 따라 메모리 관리에 영향을 줄 수 있다.
class Sample {
var value = 10
lazy var closure: () -> Void = { [weak self] in
print(self?.value ?? 0)
}
}
- 함수 타입을 명확히 지정해야 한다.
- 타입 추론이 가능하지만, 명시적으로 지정하면 가독성과 유지보수성이 높아진다.
let operation: (Int, Int) -> Int = { $0 + $1 }
6. 정리
- 객체지향 언어이자 함수형 언어이기 때문에 함수가 일급 함수의 조건에 부합한다.
- Swift에서 함수는 변수에 저장, 인자로 전달, 반환값으로 활용할 수 있다.
- 클로저를 활용하면 더 간결한 문법으로 표현할 수 있다.
- 메모리 관리 및 타입 명시성에 주의해야 한다.
728x90
'iOS > Swift' 카테고리의 다른 글
Swift 에서의 프로퍼티(Property) (0) | 2025.03.21 |
---|---|
Swift 에서의 Generics(제너릭) (0) | 2025.03.20 |
SwiftUI 로 고차함수 예제코드 (0) | 2025.03.19 |
Swift 에서의 초기화와 초기화 해제 (init, deinit) 그리고 self (0) | 2025.03.19 |
[Swift Playground] 코딩 배우기2 - 임의의 장소에 보석 놓기 (0) | 2025.03.17 |