일급 함수?

Shawn·2026년 3월 16일

JS 딥다이브

목록 보기
2/2
post-thumbnail

자바스크립트->함수에 대해서 설명하는 중에
일급 함수(객체)라는 말에 대해서 용어를 정리한 것이 있다.

하지만, 용어만 간단하게 설명만 하고
넘어간 거 같아서 일급 객체가 대체 어떤 것인지
코드로 직접 보면서 공부하려고 한다.

먼저, 들어가기 전에 개념을 한번 보고 알아보도록 하자

위 이미지는 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에서 말한
"함수를 마치 변수처럼 다룬다"
라는 말이 왜 그렇게 말하고 있는 것인지 알게 될 것이다.

profile
기억하기 보단, 기록하는 개발자로 나아가고 있습니다

0개의 댓글