High-order-function(고차함수)

이번에는 High-order-function에 대해서 정리해보겠습니다.

High-order-function이란 한 마디로 함수를 파라미터로 전달 받거나, 함수를 리턴하는 함수를 말합니다. 예제를 통해 알아보겠습니다.

simpleHighOrderFunction을 살펴보겠습니다. 파라미터를 살펴보면 sum 이라는 함수 하나와 Int 값 2개를 전달 받습니다. sum 이라는 함수 파라미터는 Int 값 2개를 전달받아 Int값을 반환하는 함수입니다. simpleHighOrderFunction 은 함수를 파라미터로 전달 받았으므로 High-order-function 이라고 말 할 수 있습니다.

main을 살펴보겠습니다. simpleHighOrderFunction을 호출할 때 첫 번째 argument로 (x, y) => x+y 라는 anonymousFunction(익명함수)를 전달 합니다. x 와 y를 전달받아 x+y를 하는 간단한 함수입니다. 그리고 10, 20이라는 Int 값 2개를 전달합니다.

simpleHighOrderFunction가 호출되면 sum(10, 20)를 실행하게 됩니다. sum은 위에서 설명한 (x, y) => x+y 익명함수를 말하고 익명함수 argument로 a와 b를 전달합니다. 결과는 예상대로 30이 반환됩니다.

High-order-function… 이름만 들으면 뭔가 어려워보이지만 개념은 매우 간단합니다. 함수를 인자로 받거나 함수를 반환하는 함수입니다. 이 조건이 성립하기 위해서는 기본적으로 함수가 FirstClassCitizen이여야 합니다.

High-order-function이 무엇인지는 알았지만 실제로 언제 어떻게 사용될까??? 이것도 간단한 예제를 통해서 알아보겠습니다.

Int값 2개를 입력받고, 어떤 연산을 하고 Int값을 반환하는 함수 여러개가 있는 경우, 위 코드 처럼 (Int, Int) => Int 라는 익명함수를 파라미터로 전달받아 함수 하나로 다양한 기능의 함수를 처리 할 수 있습니다. 6,7,8 번째 라인 처럼 이름이 있는 함수를 전달 할 수도 있고 10, 11, 12 처럼 이름이 없는 함수를 전달 할 수도 있습니다.

Contents