자바스크립트->함수에 대해서 설명하는 중에
일급 함수(객체)라는 말에 대해서 용어를 정리한 것이 있다.
하지만, 용어만 간단하게 설명만 하고
넘어간 거 같아서 일급 객체가 대체 어떤 것인지
코드로 직접 보면서 공부하려고 한다.
먼저, 들어가기 전에 개념을 한번 보고 알아보도록 하자

위 이미지는 MDN 문서에서 참고한 내용이다.
"함수를 마치 변수처럼 다룬다"
라는 것이 일급 함수(객체)라고 한다는데 대체 이게 무슨 말인지
처음에 공부할 때 많이 헷갈리고 머리를 붙잡았던 적이 있었다.
하지만, 개념만 보면 크게 와닿기가 쉽지가 않으므로 코드와 함께 본다면
우리가 말하는 일급 객체가 무슨 의미인지 깨닫기 쉬울 것이다.
먼저, 우리가 프로그래밍을 할 때, 함수를 선언하는 방법을 보고자 한다.
총 2가지 방식의 함수 선언이 있는데,
위와 같이 있는데, 각각의 형식의 코드를 살펴보도록 하자
// 함수 표현식
var sumNumbers = function(a, b) {
return a + b;
}
// 함수 선언문
function sumNumbers(a, b) {
return a + b;
}
위와 같이 두 함수는 동일하게
두 개의 숫자를 넘겨 받아 합을 받환하는 역할을 하고 있다.
근데 여기서, 함수 표현식을 보게 되면 의아해할 수도 있다.
"함수를 저렇게도 정의할 수 있는거야? 🤨"
라고 느낄 수 있을텐데,
이와 같이 함수를 선언할 수 있는 이유는
자바스크립트에서는 함수도 변수나 인자로 취급을 할 수 있기 때문이다.
즉, 함수가 이름을 가지더라도 변수 이름을 사용해
함수를 호출할 수가 있는 것이다.
또 다른 예시를 한번 보도록 하자
function sayHello() {
return "Hello, ";
}
function greeting(helloMessage, name) {
console.log(helloMessage() + name);
}
// `sayHello`를 전달인자로 `greeting` 함수에 전달
greeting(sayHello, "JavaScript!");
// 출력값 : Hello, JavaScript!
위와 코드와 같이 함수에 인자를 전달해서 사용할 수 있게 된다.
sayHello() 함수를 greeting()함수에 전달인자로 전달하는데,
이것은 함수를 값으로서 어떻게 다루는지 설명하게 된다.
여기서 참고할 것은, 다른 함수에 전달인자로
전달하는 함수를 콜백 함수라고 하는데, sayHello()는 콜백 함수이다.
function sayHello() {
return () => {
console.log("Hello!");
};
}
위 방법은 함수를 반환하는 코드인데,
다른 함수로부터 함수를 반환하는 코드이다.
JavaScript에서 함수들은 값들로서 다루어질 수 있기 때문에
함수를 반환할 수 있다.
함수를 반환하거나 다른 함수들을
전달인자로서 사용하는 함수를 "고차 함수"라고 불린다.
결론은 계속 반복해서 설명한 게
함수는 값이라는 걸 말한 것이다.
함수도 값처럼 할당하고 선언할 수 있는 의미이다.
위 글을 이해하고 맨 처음 위에서 MDN에서 말한
"함수를 마치 변수처럼 다룬다"
라는 말이 왜 그렇게 말하고 있는 것인지 알게 될 것이다.