카테고리 없음
Swift - 6 First Class Object(1급 객체), Closure(클로저)
Jihyeonnn
2024. 10. 15. 23:18
이번 포스팅에서는 1급 객체, 클로저의 개념과 예제를 다루어 보겠다.
변수에 저장 가능, 매개변수로 전달 가능, 리턴값으로 사용 가능 이 세 가지의 조건을 충족하면 1급 객체라고 부를 수 있다.
Swift는 함수를 데이터 타입처럼 처리할 수 있는데, 다음과 같이 함수를 상수 또는 변수에 할당하는 것이 가능하다.
func inchesToFeet (inches: Float) -> Float {
return inches * 0.0833333
}
let toFeet = inchesToFeet
print(inchesToFeet(inches:10)) //0.833333
print(toFeet(10)) //0.833333
//주의 : argument label인 (inches:) 안 씀
1급 객체 예제 소스
func up(num: Int) -> Int {
return num + 1
}
func down(num: Int) -> Int {
return num - 1
}
let toUp = up
print(up(num:10))
print(toUp(10))
let toDown = down //변수에 저장 가능
func upDown(Fun: (Int) -> Int, value: Int) {
let result = Fun(value)
print("결과 = \(result)")
}
upDown(Fun:toUp, value: 10) //toUp(10)
upDown(Fun:toDown, value: 10) //toDown(10) //매개변수로 전달 가능
func decideFun(x: Bool) -> (Int) -> Int {
//매개변수형 리턴형이 함수형
if x {
return toUp
} else {
return toDown
}
}
let r = decideFun(x:true) // let r = toUp //리턴값으로 사용 가능
print(type(of:r)) //(Int) -> Int
print(r(10)) // toUp(10)
클로저(Closure)
클로저는 특정 작업(함수)와 그 작업이 일어난 곳(환경 또는 상태)을 모두 기억하고 있는 도구이다.
func add(x: Int, y: Int) -> Int {
return(x+y)
}
print(add(x:10, y:20)) //30
let add1 = { (x: Int, y: Int) -> Int in //클로저 표현식
return(x+y)
}
//print(add1(x:10, y:20)) //주의 error: extraneous(관련 없는) argument labels 'x:y:' in call
print(add1(10, 20)) //30
print(type(of:add1)) //(Int, Int) -> Int
모든 출처: Smile Han의 iOS 프로그래밍 기초