카테고리 없음

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 프로그래밍 기초