일급 함수란?
일급 함수(First-class function)는 함수를 일급 시민(First-class citizens)으로 취급한다는 것입니다.
프로그래밍 언어에서 일급 함수를 가질 때, 함수들이 변수처럼 다루어질 수 있습니다. (일급 객체는 객체를 변수처럼 다룰 수 있습니다.)
이 때 일급 시민의 조건은 아래와 같습니다.
- 변수에 값으로 할당될 수 있다.
- 다른 함수의 전달인자로 전달될 수 있다.
- 다른 함수에 의해 반환될 수 있습니다.
위의 내용을 Javascript 코드를 통해 알아보겠습니다.
예제
변수에 함수 할당
1
2
3
4
5
const foo = function() {
console.log("foobar");
};
foo(); // foobar
변수에 익명함수를 할당한 다음, 끝에 괄호를 붙여서 함수를 호출할 해당 변수를 사용합니다.
함수에 전달인자로 전달
1
2
3
4
5
6
7
8
9
function sayHello() {
return "Hello, ";
}
function greeting(helloMessage, name) {
console.log(helloMessage() + name);
}
greeting(sayHello, "Soyeon"); // Hello, Soyeon
sayHello
함수를 greeting
함수에 전달인자로 전달하고, 끝에 괄호()
를 붙여서 전달인자를 사용합니다.
- 콜백함수 : 다른 함수에 전달인자로 전달되는 함수 (sayHello 함수는 콜백함수에 포함됩니다.)
함수 반환
1
2
3
4
5
function sayHello() {
return () => {
console.log("Hello~");
};
}
다른 함수로부터 함수를 반환합니다.
- 고차함수 : 함수를 반환하거나 다른 함수들을 전달인자로 사용하는 함수
(sayHello 함수는 고차함수에 포함됩니다.)
자바에서의 함수형 프로그래밍
자바 8부터는 함수형 프로그래밍을 도입하였습니다.
일반적으로 함수형 프로그래밍에서 아래 3가지 조건을 만족해야 합니다.
- 순수 함수(Pure function) : 동일한 입력값에 대해 항상 같은 값을 반환한다. 전역 변수를 사용하거나 변경해서 예상치 못한 Side effect를 발생하지 않는다.
- 고차함수(High Order Function) : 함수를 인자로 받거나 함수를 반환 값으로 이용할 수 있다.
- 익명함수(Anonymous function) : 이름이 없는 함수를 말하며, 람다식으로 표현되는 함수 구현을 말합니다.
이러한 함수형 프로그래밍과 관련하여 도입된 기능이 있습니다.
- 람다 (+ Functional Interface)
- 스트림
이에 대한 자세한 설명은 이 곳 에서 확인하실 수 있습니다.
출처
- mdn - 일급함수
- velog.io/@vagabondms/기술-스터디-일급-함수란
- https://en.wikipedia.org/wiki/First-class_function
- https://breakout-theworld.tistory.com/50
- warpgate3.tistory.com/entry/자바코드로-보는-함수형-프로그래밍
- https://tecoble.techcourse.co.kr/post/2021-09-30-java8-functional-programming/