본문 바로가기

Frontend/JS

[JS] Javascript 일급 객체(First Class Object, First Class Function)

728x90
함수를 변수에 할당하는 등의 작업이 
함수가 일급 객체이기 때문이라는 것을 알고
일급 객체에 대한 공부한 기록이다.

일급 객체

JS에서 일급 객체는 아래의 3가지의 조건을 만족해야 한다.

  1. 변수에 할당할 수 있다.
  2. 함수의 인자로 전달할 수 있다.
  3. 함수의 결과로서 반환될 수 있다.

굳이 예제를 보지 않아도 이해할 수 있는 조건이다.

 

일급 객체의 조건을 보면 함수 또한 일급 객체라는 것을 알 수 있다.

일급 객체의 특성을 가지면서 함수가 구현할 수 있는 기능은 아래와 같다.

  1. 고차함수를 만들 수 있다.
  2. 콜백함수를 사용할 수 있다.

일급 객체의 조건을 하나씩 함수에 적용시켜 보자.

변수 할당

const foo = function(){
  console.log("foobar");
};
foo();
//foobar

위의 코드를 보면 함수가 리터럴 방식으로 만들어진 것을 볼 수 있다.

리터럴 방식이 함수가 변수에 할당될 수 있다는 것을 보여주는 생성 방식이다.

 

인자로 전달

function sayHello() {
  return "Hello, ";
}
function greeting(helloMessage, name) {
  console.log(helloMessage() + name);
}
greeting(sayHello, "JavaScript!");
// Hello, JavaScript!

sayHello라는 함수가 greeting의 인자로 전달된 것을 볼 수 있다.

greeting은 sayHello를 전달받음으로써 함수 내부에서 helloMessage를 사용할 수 있다.

 

함수의 반환값

function sayHello() {
  return () => {
    console.log("Hello!");
  };
}

위에서는 sayHello 함수가 익명 함수를 반환한 것을 볼 수 있다.

익명 함수가 반환됨에 따라 익명 함수 내부의 코드가 실행되었다.

고차함수/콜백함수

고차함수는 함수를 인자로 전달받거나 함수를 반환하는 함수를 말한다.

위의 예시에서 '인자로 전달'에서 sayHello를 인자로 전달받은 greeting,

'함수의 반환값'에서 익명 함수를 반환한 sayHello가 고차함수라고 할 수 있다.

 

콜백함수는 인자로 전달되는 함수를 말한다.

'인자로 전달'에서 greeting으로 전달되는 sayHello가 콜백함수라고 할 수 있다.

 

728x90