Programer/iOS

[FP] 함수 & 고차함수 vs 클로저

아즈샤 2018. 7. 12. 12:23
반응형

1. 함수는 무엇인가요?

기본적으로 Input 값이 있고 연산 후 Output이 있는 것을 함수라고 합니다.


//두개의 Input값을 받아 더한 값을 Output값을 리턴 하는 함수


func addNumber(n1: Int, n2: Int) -> Int {

    

    return n1 + n2

    

}


추가로, Output 값만 있는 함수는 Generator, Input 값만 있는 함수는 Consumer 라고 부릅니다.


2. 고차함수는 무엇인가요?

다른 함수를 전달인자로 받거나 함수 실행 결과를 함수로 리턴하는 함수를 고차함수라고 합니다.


//실행 결과를 inc 함수로 리턴하는 makeInc 고차함수


func makeInc(_ n: Int) -> (Int) -> Int {

    

    func inc(_ x: Int) -> Int {

        

        return n + x

        

    }

    

    return inc

    

}



3. 그럼 클로저는 함수와 어떤 차이가 있나요?

위에 예제로 봤던 고차함수를 아래와 같이 실행시켜봅시다.


let f = makeInc(10)

f(5)        // 15



위 코드대로 실행하면 결과 값이 15 가 나옵니다.

두번 줄에서 f는 10이라는 값이 매개변수로 전달되지 않았지만, 첫번째 줄에서 f는 생성 될때 10이라는 state를 점유하고 있습니다.

이러한 state 값을 점유하고 있는 함수를 클로저라고 합니다.


즉, 클로저 역시 함수지만, 함수가 생성될 때 state를 점유하고 있다면 우리는 그것을 클로저라고 합니다.

"Closures are also functions. But when a function captures state upon its creation, we call it a closure."


참고링크


반응형