Home [Web] 일급 함수(First-class function)
Post
Cancel

[Web] 일급 함수(First-class function)

일급 함수란?

일급 함수(First-class function)는 함수를 일급 시민(First-class citizens)으로 취급한다는 것입니다.

프로그래밍 언어에서 일급 함수를 가질 때, 함수들이 변수처럼 다루어질 수 있습니다. (일급 객체는 객체를 변수처럼 다룰 수 있습니다.)

이 때 일급 시민의 조건은 아래와 같습니다.

  1. 변수에 값으로 할당될 수 있다.
  2. 다른 함수의 전달인자로 전달될 수 있다.
  3. 다른 함수에 의해 반환될 수 있습니다.

위의 내용을 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가지 조건을 만족해야 합니다.

  1. 순수 함수(Pure function) : 동일한 입력값에 대해 항상 같은 값을 반환한다. 전역 변수를 사용하거나 변경해서 예상치 못한 Side effect를 발생하지 않는다.
  2. 고차함수(High Order Function) : 함수를 인자로 받거나 함수를 반환 값으로 이용할 수 있다.
  3. 익명함수(Anonymous function) : 이름이 없는 함수를 말하며, 람다식으로 표현되는 함수 구현을 말합니다.

이러한 함수형 프로그래밍과 관련하여 도입된 기능이 있습니다.

  • 람다 (+ Functional Interface)
  • 스트림

이에 대한 자세한 설명은 이 곳 에서 확인하실 수 있습니다.

출처

This post is licensed under CC BY 4.0 by the author.