반응형

일급함수

자바스크립트의 함수는 일급함수이다. (함수를 값으로 다룰 수 있다라는 말과 동치)

 

일급객체

변수에 할당할 수 있고, 함수의 인자나 함수의 리턴값으로 사용될 수 있는 객체를 일급객체라고 말한다.
즉 객체를 값으로 다룰 수 있다.

 

일급함수는 함수가 다른 일급객체(변수)와 동일하게 다루어 질 수 있다는 말이다. 즉 함수가 변수로 사용될 수 있다.

 

// 함수의 결과값으로 함수를 사용할 수 있다.
const returnFunc = () => () => 1;
console.log(returnFunc) // 함수의 인자로 함수가 사용된 모습이다.
console.log(returnFunc()); // () => 1; 함수가 출력됨

// 만들어진 함수를 변수로 담을 수 있다.
const wrapper = returnFunc();
console.log(wrapper); // () => 1; 함수가 출력됨

 

이렇게 함수가 변수로 사용되면 아래와 같은 장점을 가지게 된다.

 

1. 즉시 실행되지 않아도 된다. 지연 실행을 지원한다.

2. 함수의 합성을 통해 고차 함수(함수를 인자로 받아서 실행하는 함수), 클로저 등을 만들 수 있다.

 

const apply = f => f(1);
const add10 = a => a+10;

console.log(apply(add10)); // 함수의 합성~! 11
console.log(apply(a => a - 1)); // 직접 함수를 인자로 전달하여 함수를 합성할 수도 있다. 0

 

클로저란, 함수 내부에서 외부 변수를 기억하고 있는 구조를 클로저라고 한다.
(인수와 함수 모두를 통틀어 클로저라고 부른다.)

 

// 클로저
const addMaker = a => b => a + b;
const add10 = addMaker(10);

log(add10(5)); // 15
log(add10(10)); // 20

 

함수가 조합과 추상의 도구로 사용될 수 있고 고차 함수를 통해 함수형 프로그래밍이 가능해진다. 다른 OOP 언어에서는 자바 언어의 함수형 인터페이스(Supplier, Predicate, Consumer, Function) 들이 대표적인 예가 될 수 있다.

반응형

'언어 > Javascript' 카테고리의 다른 글

[JS] 커링함수  (0) 2023.02.12
[JS] 비동기 클린 코드과 에러 핸들링  (0) 2023.02.02

+ Recent posts