First-Class Function

고재경·2020년 12월 22일
0

오늘은 First-Class Function(일급 함수)에 대해 알아보도록 하겠습니다.

First-Class Function이란?

함수를 다른 변수와 동일하게 다루는 언어는 일급 함수를 가졌다고 표현합니다. 예를 들어, 일급 함수를 가진 언어에서는 함수를 다른 함수에 매개변수로 제공하거나, 함수가 함수를 반환할 수 있으며, 변수에도 할당할 수 있습니다.

First-Class Funtion의 사용

First-Class Function은 아래 예시와 같이 사용할 수 있습니다.

Ex1 > 변수에 함수를 할당

func add(a: Int, b: Int) -> Int {
    return a + b
}

var result = add

print(result(3, 5))

First-Class Function을 가진 언어는 위처럼 변수에 함수를 할당할 수 있습니다. result라는 변수에 함수 add를 저장하였습니다. 함수를 저장한 변수 result는 add와 같이 매개변수를 전달할 수 있습니다.

Ex2 > 함수를 함수의 매개변수로 사용

func add(a: Int, b: Int) -> Int {
    return a + b
}

func printResult(function: (Int, Int) -> Int, a: Int, b: Int) {
    let result = function(a, b)
    print(result)
}

printResult(function: add, a: 4, b: 3)

printResult의 매개변수로 add라는 함수를 전달하여 printResult의 함수를 제외한 매개변수 a와 b의 값을 더한 결과를 출력하는 함수를 만들어 보았습니다.

다른 함수의 매개변수로 사용되는 함수를 Callback Function이라고 합니다. 위의 예시에서는 add가 콜백함수가 됩니다.

Ex3 > 함수의 return값으로 함수를 사용

func printName(name: String) -> (() -> String) {
    func printNameAndAge() -> String {
        return "My name is \(name), I'm 26 years old."
    }
    
    return printNameAndAge
}

let myInfo = printName(name: "JK")
print(myInfo())

printName이라는 함수 안에 printNameAndAge라는 함수를 만들어 printName의 리턴값으로 printNameAndAge 함수를 주었습니다.

위와 같이 함수를 리턴하는 함수를 High-Order Function(고차함수)라고 합니다.


References

https://developer.mozilla.org/ko/docs/Glossary/First-class_Function
https://velog.io/@shchoice/First-class-Function%EC%9D%BC%EA%B8%89-%ED%95%A8%EC%88%98-Higher-order-Function%EA%B3%A0%EC%9C%84-%ED%95%A8%EC%88%98

0개의 댓글