Dev/JavaScript

[JavaScript] 함수는 1급 객체 (First-Class Object)

隣のプログラマー君 2023. 6. 1. 13:50
반응형

 

오늘은 1급 객체에 대한 이야길 해볼건데, 이게 왜 중요하냐면 

대부분 이 내용 때문에 현재 우리가 사용하고 있는 모든 코드들이 구현가능하기 때문이다. 

결국 이 내용을 이해하면 지금 우리가 이렇게 쓴다라고 거의 대충 감으로, 혹은 애매모호하게 이해하고 있던 부분들이

퍼즐이 끼워맞춰지는 것처럼 줄줄이 이해가 될거기 때문에, 아주 도움이 될 거라고 생각한다. 

 

1. 1급 객체란?

정의 : 다른 객체들에 일반적으로 적용가능한 연산을 모두 지원하는 객체를 가리킨다.

-출처: 위키 백과

 

1급 객체가 되기 위한 조건.

- 변수에 할당할 수 있다. 
- 다른 함수를 인자로 전달 받는다. 
- 다른 함수의 결과로서 리턴될 수 있다. 

 

위의 이야기들을 모두 종합하면, 결국 데이터를 다루듯이 동일하게 다룰 수 있는 것들 그러니까, string, number 이런 타입의 애들이랑 동일하게 다룰 수 있다면 1급 객체가 될 수 있다는 의미가 된다. 

=> 함수도 1급 객체가 된다. 

 

//ex 1

const func1 = () => {}
const func2 = function () {} // 변수에 할당이 가능하다.

//ex 2
const func1 = () => {}
const func2 = (func) => {return func()}
func2(func1) // 다른 함수를 인자로 받을 수 있다.


//ex 3
const func = () => {
	return () => {
    	return 1;
    }
} // 다른 함수의 리턴값으로 사용될 수 있다.

앞의 이 예제 코드들을 보면 앞선 조건들을 함수가 모두 만족하고 있음을 확인 할 수 있다.

 

2. 함수가 1급 객체여서 할 수 있는 것

함수가 1급 객체라는거 까진 이제 알겠는데 이게 1급 객체라서 뭐가 좋으냐?, 

라는 질문을 할 수 있다. 

 

함수가 1급 객체라면 대표적으로 두가지를 할 수 있다. 

1) 고차함수를 만들 수 있다. 

2) 콜백함수로 사용할 수 있다. 

 

1번이든 2번이든 예시는 앞의 예제코드로 다 들 수 있는데 고차함수라는건 함수의 parameter로 함수를 넘겨주고 함수를 결과값 즉, return값이 함수가 된 상태의 함수를 이야기 한다. 그러니까 함수의 depth가 만들어지는게 고차함수라고 이해하면 될 것같다. 

 

2번의 경우에는 이제 앞에서 설명한 parameter로 넘겨준 함수. 그게 콜백함수다. 

LIST

'Dev > JavaScript' 카테고리의 다른 글

[JS] slice()  (0) 2023.06.16
[TypeScript] TypeScript  (0) 2023.06.02
[원리] 실수 표현 원리  (0) 2023.05.30
[JavaScript] parseInt()  (0) 2023.05.23
[JavaScript] Hoisting  (0) 2023.04.20