072DATA

일급 객체로서의 함수 본문

Anything/끄적끄적

일급 객체로서의 함수

0720 2024. 8. 1. 22:19

 

 

자바스크립트에서 함수는 일급 객체라고 합니다. 그래서 함수를 객체처럼 여러가지 방식으로 다룰 수 있습니다.

일반 객체와 달리 함수는 특별한 능력을 갖고 있다고 하네요

 

"일급 객체란 다른 객체들에 일반적으로 적용 가능한 연산을 모두 지원하는 객체를 가리킨다 "

여기서 다른 객체 들은 매개 변수로 전달 될 수도 return 문으로 출력 하기도 하며

모든 연산이 가능한데 함수도 다른 객체들 처럼 가능 하다는 의미입니다.(함수를 매우 유연하게 사용 가능)

 

함수의 특징

 

1. 변수에 함수를 할당 가능 

 

 

 

const sayHello = function (){
    console.log("Hello");
}

 

 

 

이렇게 우측에 있는 함수를 좌측의 변수로 할당 가능합니다.

함수가 마치 값으로 취급되어 함수가 나중에 사용될 수 있도록 조치가 되었습니다.

 

 

 

 

2. 함수를 인자로 다른 함수에 전달할 수가 있다.

 

function callFunction(func) {
    func();
}

const sayHello = function (){
    console.log("Hello");
}

callFunction(sayHello);

 

 

 

매개 변수로 받은 변수가 사실, 함수인데

여기서 콜백 함수와 고차 함수라는 개념이 나옵니다.

 

콜백 함수는 매개 변수로서 쓰이는 함수를 말하고

고차 함수는 함수를 인자로 받거나 return하는 함수를 말합니다.

따지고 보면 콜백 함수는 고차 함수의 한 종류라고 볼 수도 있습니다.

 

따라서 위 코드에서 func는  매개 변수로서 쓰이는 콜백 함수이며

callfunction에서 sayHello 함수를 인자로 받아 전달된 것을 볼 수 있습니다.

 

 

 

3. 함수를 반환할 수 있다.

function createAdder(num) {
    return function(x){
        return x + num;
    }
}

const addFive = createAdder(5);
console.log(addFive(10));

 

이 예제는 클로저의 개념을 잘 보여줍니다. 클로저는 함수가 자신이 생성될 때의 환경을 기억하는 기능을 의미합니다.

여기서 반환된 함수는 자신이 생성될 때의 num 값을 기억하고 있습니다.

이렇게 생성된 함수는 이후 호출될 때 자신이 생성될 때의 num 값을 사용할 수 있게 됩니다.